/* Generated by Cython 0.29.24 */

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

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

#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
  #define Py_OptimizeFlag 0
#endif
#define __PYX_BUILD_PY_SSIZE_T "n"
#define CYTHON_FORMAT_SSIZE_T "z"
#if PY_MAJOR_VERSION < 3
  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
  #define __Pyx_DefaultClassType PyClass_Type
#else
  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#endif
  #define __Pyx_DefaultClassType PyType_Type
#endif
#ifndef Py_TPFLAGS_CHECKTYPES
  #define Py_TPFLAGS_CHECKTYPES 0
#endif
#ifndef Py_TPFLAGS_HAVE_INDEX
  #define Py_TPFLAGS_HAVE_INDEX 0
#endif
#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
#endif
#ifndef Py_TPFLAGS_HAVE_FINALIZE
  #define Py_TPFLAGS_HAVE_FINALIZE 0
#endif
#ifndef METH_STACKLESS
  #define METH_STACKLESS 0
#endif
#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
  #ifndef METH_FASTCALL
     #define METH_FASTCALL 0x80
  #endif
  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
                                                          Py_ssize_t nargs, PyObject *kwnames);
#else
  #define __Pyx_PyCFunctionFast _PyCFunctionFast
  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
#endif
#if CYTHON_FAST_PYCCALL
#define __Pyx_PyFastCFunction_Check(func)\
    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)))))
#else
#define __Pyx_PyFastCFunction_Check(func) 0
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
  #define PyObject_Malloc(s)   PyMem_Malloc(s)
  #define PyObject_Free(p)     PyMem_Free(p)
  #define PyObject_Realloc(p)  PyMem_Realloc(p)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1
  #define PyMem_RawMalloc(n)           PyMem_Malloc(n)
  #define PyMem_RawRealloc(p, n)       PyMem_Realloc(p, n)
  #define PyMem_RawFree(p)             PyMem_Free(p)
#endif
#if CYTHON_COMPILING_IN_PYSTON
  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
#else
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
#endif
#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
  #define __Pyx_PyThreadState_Current PyThreadState_GET()
#elif PY_VERSION_HEX >= 0x03060000
  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
#elif PY_VERSION_HEX >= 0x03000000
  #define __Pyx_PyThreadState_Current PyThreadState_GET()
#else
  #define __Pyx_PyThreadState_Current _PyThreadState_Current
#endif
#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
#include "pythread.h"
#define Py_tss_NEEDS_INIT 0
typedef int Py_tss_t;
static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
  *key = PyThread_create_key();
  return 0;
}
static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
  Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
  *key = Py_tss_NEEDS_INIT;
  return key;
}
static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
  PyObject_Free(key);
}
static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
  return *key != Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
  PyThread_delete_key(*key);
  *key = Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
  return PyThread_set_key_value(*key, value);
}
static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
  return PyThread_get_key_value(*key);
}
#endif
#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
#else
#define __Pyx_PyDict_NewPresized(n)  PyDict_New()
#endif
#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
#else
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS
#define __Pyx_PyDict_GetItemStr(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
#else
#define __Pyx_PyDict_GetItemStr(dict, name)  PyDict_GetItem(dict, name)
#endif
#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
  #define CYTHON_PEP393_ENABLED 1
  #if defined(PyUnicode_IS_READY)
  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                              0 : _PyUnicode_Ready((PyObject *)(op)))
  #else
  #define __Pyx_PyUnicode_READY(op)       (0)
  #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)         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 defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
  #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
  #else
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
  #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)         (sizeof(Py_UNICODE))
  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
#endif
#if CYTHON_COMPILING_IN_PYPY
  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
#else
  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
  #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
#endif
#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
#else
  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
#endif
#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
  #define PyObject_ASCII(o)            PyObject_Repr(o)
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyBaseString_Type            PyUnicode_Type
  #define PyStringObject               PyUnicodeObject
  #define PyString_Type                PyUnicode_Type
  #define PyString_Check               PyUnicode_Check
  #define PyString_CheckExact          PyUnicode_CheckExact
#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
#ifndef PySet_CheckExact
  #define PySet_CheckExact(obj)        (Py_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   PyInt_AsLong
#else
  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
#endif
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
#else
  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
#endif
#if CYTHON_USE_ASYNC_SLOTS
  #if PY_VERSION_HEX >= 0x030500B1
    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
  #else
    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
  #endif
#else
  #define __Pyx_PyType_AsAsync(obj) NULL
#endif
#ifndef __Pyx_PyAsyncMethodsStruct
    typedef struct {
        unaryfunc am_await;
        unaryfunc am_aiter;
        unaryfunc am_anext;
    } __Pyx_PyAsyncMethodsStruct;
#endif

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

#define __PYX_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__gnocis__sequences
#define __PYX_HAVE_API__gnocis__sequences
/* Early includes */
#include <string.h>
#include <stdlib.h>
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

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

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

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


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

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


static const char *__pyx_f[] = {
  "gnocis/sequences.pyx",
  "gnocis/sequences.pxd",
  "stringsource",
  "gnocis/regions.pxd",
  "gnocis/common.pxd",
  "gnocis/motifs.pxd",
};

/*--- Type declarations ---*/
struct __pyx_obj_6gnocis_7regions_region;
struct __pyx_obj_6gnocis_7regions_regions;
struct __pyx_obj_6gnocis_6common__PyMEAPrivateData;
struct __pyx_obj_6gnocis_6motifs_motifOccurrence;
struct __pyx_obj_6gnocis_6motifs_IUPACMotif;
struct __pyx_obj_6gnocis_6motifs_PWMMotif;
struct __pyx_obj_6gnocis_9sequences_sequenceLabel;
struct __pyx_obj_6gnocis_9sequences_sequence;
struct __pyx_obj_6gnocis_9sequences_sequences;
struct __pyx_obj_6gnocis_9sequences_sequenceStream;
struct __pyx_obj_6gnocis_9sequences_sequenceGenerator;
struct __pyx_obj_6gnocis_9sequences_MarkovChain;
struct __pyx_obj_6gnocis_9sequences_IID;
struct __pyx_obj_6gnocis_9sequences_streamFASTASeq;
struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock;
struct __pyx_obj_6gnocis_9sequences_stream2bitSeq;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate;
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr;
struct __pyx_opt_args_6gnocis_9sequences_streamFASTA;
struct __pyx_opt_args_6gnocis_9sequences_stream2bit;
struct __pyx_opt_args_6gnocis_9sequences_getSequenceStreamFromPath;
struct __pyx_opt_args_6gnocis_9sequences_streamFASTAGZ;

/* "gnocis/sequences.pxd":53
 * 
 * # Streams a FASTA file in blocks.
 * cpdef streamFASTA(path, wantBlockSize = *, spacePrune = *, dropChr = *, restrictToSequences = *)             # <<<<<<<<<<<<<<
 * 
 * # Streams a 2bit file in blocks.
 */
struct __pyx_opt_args_6gnocis_9sequences_streamFASTA {
  int __pyx_n;
  PyObject *wantBlockSize;
  PyObject *spacePrune;
  PyObject *dropChr;
  PyObject *restrictToSequences;
};

/* "gnocis/sequences.pxd":56
 * 
 * # Streams a 2bit file in blocks.
 * cpdef stream2bit(path, wantBlockSize = *, spacePrune = *, dropChr = *, restrictToSequences = *)             # <<<<<<<<<<<<<<
 * 
 * # Gets a sequence stream based on a path, deciding on the format from the path.
 */
struct __pyx_opt_args_6gnocis_9sequences_stream2bit {
  int __pyx_n;
  PyObject *wantBlockSize;
  PyObject *spacePrune;
  PyObject *dropChr;
  PyObject *restrictToSequences;
};

/* "gnocis/sequences.pxd":59
 * 
 * # Gets a sequence stream based on a path, deciding on the format from the path.
 * cpdef getSequenceStreamFromPath(path, wantBlockSize = *, spacePrune = *, dropChr = *, restrictToSequences = *)             # <<<<<<<<<<<<<<
 * 
 * ###########################################################################
 */
struct __pyx_opt_args_6gnocis_9sequences_getSequenceStreamFromPath {
  int __pyx_n;
  PyObject *wantBlockSize;
  PyObject *spacePrune;
  PyObject *dropChr;
  PyObject *restrictToSequences;
};

/* "gnocis/sequences.pyx":711
 * 
 * # Streams a FASTA file in blocks.
 * cpdef streamFASTAGZ(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a gzipped FASTA file.
 */
struct __pyx_opt_args_6gnocis_9sequences_streamFASTAGZ {
  int __pyx_n;
  PyObject *wantBlockSize;
  PyObject *spacePrune;
  PyObject *dropChr;
  PyObject *restrictToSequences;
};

/* "regions.pxd":16
 * 
 * # Represents regions.
 * cdef class region:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str seq
 */
struct __pyx_obj_6gnocis_7regions_region {
  PyObject_HEAD
  PyObject *seq;
  PY_LONG_LONG start;
  PY_LONG_LONG end;
  bool strand;
  float score;
  PyObject *source;
  PyObject *feature;
  PyObject *group;
  PyObject *ext;
  PyObject *markers;
};


/* "regions.pxd":27
 * 
 * # Represents region sets. Supports operands '+' for adding regions from two sets with no merging, '|' for merging two sets, and '^' for excluding the regions in the latter set from the first.
 * cdef class regions:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str name
 */
struct __pyx_obj_6gnocis_7regions_regions {
  PyObject_HEAD
  PyObject *name;
  PyObject *regions;
};


/* "common.pxd":12
 * # Global data
 * 
 * cdef class _PyMEAPrivateData:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public unsigned char* charNTIndexTable
 */
struct __pyx_obj_6gnocis_6common__PyMEAPrivateData {
  PyObject_HEAD
  unsigned char *charNTIndexTable;
};


/* "motifs.pxd":21
 * 
 * # Represents a DNA sequence motif occurrence.
 * cdef class motifOccurrence:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public object motif
 */
struct __pyx_obj_6gnocis_6motifs_motifOccurrence {
  PyObject_HEAD
  PyObject *motif;
  PyObject *seq;
  int start;
  int end;
  bool strand;
};


/* "motifs.pxd":32
 * # IUPAC motifs
 * 
 * cdef class IUPACMotif:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str name, motif, regexMotif, regexMotifRC
 */
struct __pyx_obj_6gnocis_6motifs_IUPACMotif {
  PyObject_HEAD
  PyObject *name;
  PyObject *motif;
  PyObject *regexMotif;
  PyObject *regexMotifRC;
  int nmismatches;
  PyObject *c;
  PyObject *cRC;
  struct __pyx_obj_6gnocis_9sequences_sequence *cachedSequence;
  PyObject *cachedOcc;
};


/* "motifs.pxd":44
 * # Position Weight Matrix motifs
 * 
 * cdef class PWMMotif:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str name, path
 */
struct __pyx_obj_6gnocis_6motifs_PWMMotif {
  PyObject_HEAD
  PyObject *name;
  PyObject *path;
  double threshold;
  PyObject *PWMF;
  PyObject *PWMRC;
  double *bPWMF;
  double *bPWMRC;
  double *maxScoreLeftF;
  double *maxScoreLeftRC;
  struct __pyx_obj_6gnocis_9sequences_sequence *cachedSequence;
  PyObject *cachedOcc;
};


/* "gnocis/sequences.pxd":17
 * 
 * # Represents a sequence label
 * cdef class sequenceLabel:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str name
 */
struct __pyx_obj_6gnocis_9sequences_sequenceLabel {
  PyObject_HEAD
  PyObject *name;
  float value;
};


/* "gnocis/sequences.pxd":27
 * 
 * # Represents and loads DNA sequences.
 * cdef class sequence:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str name, seq, path, annotation
 */
struct __pyx_obj_6gnocis_9sequences_sequence {
  PyObject_HEAD
  struct __pyx_vtabstruct_6gnocis_9sequences_sequence *__pyx_vtab;
  PyObject *name;
  PyObject *seq;
  PyObject *path;
  PyObject *annotation;
  struct __pyx_obj_6gnocis_7regions_region *sourceRegion;
  PyObject *cbytes;
  PyObject *cbytesIndexed;
  PyObject *labels;
};


/* "gnocis/sequences.pxd":37
 * 
 * # Represents a set of DNA sequences.
 * cdef class sequences:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str name
 */
struct __pyx_obj_6gnocis_9sequences_sequences {
  PyObject_HEAD
  PyObject *name;
  PyObject *sequences;
};


/* "gnocis/sequences.pxd":49
 * 
 * # Represents sequence streams.
 * cdef class sequenceStream:             # <<<<<<<<<<<<<<
 * 	pass
 * 
 */
struct __pyx_obj_6gnocis_9sequences_sequenceStream {
  PyObject_HEAD
};


/* "gnocis/sequences.pxd":65
 * 
 * # Represents sequence streams
 * cdef class sequenceGenerator:             # <<<<<<<<<<<<<<
 * 	pass
 * 
 */
struct __pyx_obj_6gnocis_9sequences_sequenceGenerator {
  PyObject_HEAD
};


/* "gnocis/sequences.pxd":68
 * 	pass
 * 
 * cdef class MarkovChain(sequenceGenerator):             # <<<<<<<<<<<<<<
 * 
 * 	cdef public int degree, pseudoCounts, nGenerated
 */
struct __pyx_obj_6gnocis_9sequences_MarkovChain {
  struct __pyx_obj_6gnocis_9sequences_sequenceGenerator __pyx_base;
  int degree;
  int pseudoCounts;
  int nGenerated;
  bool addReverseComplements;
  bool prepared;
  PyObject *trainingSequences;
  PyObject *spectrum;
  PyObject *initialDistribution;
  PyObject *probspectrum;
  PyObject *comparableSpectrum;
};


/* "gnocis/sequences.pxd":78
 * 
 * # IID sequence model
 * cdef class IID(sequenceGenerator):             # <<<<<<<<<<<<<<
 * 
 * 	cdef public int pseudoCounts, nGenerated
 */
struct __pyx_obj_6gnocis_9sequences_IID {
  struct __pyx_obj_6gnocis_9sequences_sequenceGenerator __pyx_base;
  int pseudoCounts;
  int nGenerated;
  bool addComplements;
  bool prepared;
  PyObject *trainingSequences;
  PyObject *spectrum;
  PyObject *ntDistribution;
};


/* "gnocis/sequences.pyx":564
 * 
 * # Represents a sequence in a FASTA file
 * cdef class streamFASTASeq:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str name, lastLine
 */
struct __pyx_obj_6gnocis_9sequences_streamFASTASeq {
  PyObject_HEAD
  PyObject *name;
  PyObject *lastLine;
  int wantBlockSize;
  bool parsingCompleted;
  PyObject *fstream;
};


/* "gnocis/sequences.pyx":733
 * 
 * # Represents a 2bit N-block
 * cdef class stream2bitNBlock:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public int start, size
 */
struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock {
  PyObject_HEAD
  int start;
  int size;
};


/* "gnocis/sequences.pyx":741
 * 
 * # Represents a sequence in a 2bit file
 * cdef class stream2bitSeq:             # <<<<<<<<<<<<<<
 * 
 * 	cdef public str name
 */
struct __pyx_obj_6gnocis_9sequences_stream2bitSeq {
  PyObject_HEAD
  PyObject *name;
  PyObject *fstream;
  int wantBlockSize;
  int nnt;
  PyObject *Nblocks;
};


/* "gnocis/sequences.pyx":202
 * 		return 'Sequence list<%s>'%(self.name)
 * 
 * 	def table(self):             # <<<<<<<<<<<<<<
 * 		return nctable(
 * 			'Sequences: ' + self.name,
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table {
  PyObject_HEAD
  PyObject *__pyx_8genexpr1__pyx_v_s;
};


/* "gnocis/sequences.pyx":208
 * 				{
 * 					'Name': s.name,
 * 					'Labels': ', '.join(l.name for l in s.labels),             # <<<<<<<<<<<<<<
 * 					'Length': len(s.seq),
 * 					'Source region': '' if s.sourceRegion is None else s.sourceRegion.bstr(),
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *__pyx_outer_scope;
  PyObject *__pyx_v_l;
};


/* "gnocis/sequences.pyx":341
 * 
 * 	# Gets sequences with the given label
 * 	def withLabel(self, labels, ensureAllLabels = True):             # <<<<<<<<<<<<<<
 * 		""" Extracts sequences with the given label or labels.
 * 
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel {
  PyObject_HEAD
  PyObject *__pyx_v_ret;
};


/* "gnocis/sequences.pyx":361
 * 				for lbl in labels
 * 			]
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):             # <<<<<<<<<<<<<<
 * 				raise Exception("Not all requested labels were found among the sequences")
 * 			return ret
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *__pyx_outer_scope;
  PyObject *__pyx_v_seqs;
};


/* "gnocis/sequences.pyx":373
 * 
 * 	# Gets labels for sequences
 * 	def labels(self):             # <<<<<<<<<<<<<<
 * 		""" Gets labels for sequences.
 * 
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self;
};


/* "gnocis/sequences.pyx":379
 * 		:rtype: set
 * 		"""
 * 		return set(l for s in self.sequences for l in s.labels)             # <<<<<<<<<<<<<<
 * 
 * 	# Saves to FASTA file.
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *__pyx_outer_scope;
  PyObject *__pyx_v_l;
  PyObject *__pyx_v_s;
};


/* "gnocis/sequences.pyx":403
 * 
 * 	# Prints basic statistics about the set.
 * 	def printStatistics(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Outputs basic statistics.
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self;
};


/* "gnocis/sequences.pyx":410
 * 		print(' - Sequences: %d'%len(self.sequences))
 * 		if len(self.sequences) > 0:
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))             # <<<<<<<<<<<<<<
 * 		print(' - Total length: %d nt'%( sum( len(s) for s in self.sequences ) ))
 * 
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *__pyx_outer_scope;
  PyObject *__pyx_v_s;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
};

struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *__pyx_outer_scope;
  PyObject *__pyx_v_s;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
};

struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *__pyx_outer_scope;
  PyObject *__pyx_v_s;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
};


/* "gnocis/sequences.pyx":411
 * 		if len(self.sequences) > 0:
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))
 * 		print(' - Total length: %d nt'%( sum( len(s) for s in self.sequences ) ))             # <<<<<<<<<<<<<<
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *__pyx_outer_scope;
  PyObject *__pyx_v_s;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
};


/* "gnocis/sequences.pyx":437
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTAGZ(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a gzipped FASTA file.
 * 
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ {
  PyObject_HEAD
  PyObject *__pyx_v_f;
};


/* "gnocis/sequences.pyx":449
 * 	pathName = path.split('/')[-1]
 * 	with gzip.open(path, 'rb') as f:
 * 		for line in (y.decode('utf-8') for y in f):             # <<<<<<<<<<<<<<
 * 			line = line.strip()
 * 			if line.startswith('>'):
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *__pyx_outer_scope;
  PyObject *__pyx_v_y;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "gnocis/sequences.pyx":475
 * 
 * 	# Fetches n sequences (or less, if fewer or none are left)
 * 	def fetch(self, n, maxnt):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Fetches n sequences (or less, if fewer or none are left).
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_cseq;
  PyObject *__pyx_v_fetched;
  int __pyx_v_i;
  PyObject *__pyx_v_maxnt;
  PyObject *__pyx_v_n;
  PY_LONG_LONG __pyx_v_ntFetched;
  struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "gnocis/sequences.pyx":508
 * 
 * 	# Outputs a stream of complete sequences by joining sequence blocks
 * 	def streamFullSequences(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Streams and yields whole sequences.
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences {
  PyObject_HEAD
  PyObject *__pyx_v_cseq;
  PyObject *__pyx_v_genexpr;
  struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "gnocis/sequences.pyx":516
 * 		"""
 * 		for cseq in self:
 * 			yield sequence(cseq.name, ''.join(blk for blk in cseq))             # <<<<<<<<<<<<<<
 * 
 * 	# Gets the sequence lengths
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *__pyx_outer_scope;
  PyObject *__pyx_v_blk;
};


/* "gnocis/sequences.pyx":519
 * 
 * 	# Gets the sequence lengths
 * 	def sequenceLengths(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns a dictionary of the lengths of all sequences in the stream.
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths {
  PyObject_HEAD
  PyObject *__pyx_9genexpr18__pyx_v_cseq;
};


/* "gnocis/sequences.pyx":526
 * 		cdef dict ret
 * 		cdef object cseq, blk
 * 		return { cseq.name: sum( len(blk) for blk in cseq ) for cseq in self }             # <<<<<<<<<<<<<<
 * 
 * 	# Gets a sequence set with windows from the sequences
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *__pyx_outer_scope;
  PyObject *__pyx_v_blk;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "gnocis/sequences.pyx":586
 * 		return self.__str__()
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		cdef str cbuf, cl
 * 		cdef int wbs = self.wantBlockSize
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream {
  PyObject_HEAD
  PyObject *__pyx_v_cbuf;
  PyObject *__pyx_v_cl;
  struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self;
  int __pyx_v_wbs;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "gnocis/sequences.pyx":641
 * 		self.isGZ = isGZ
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef str line, sname
 * 		cdef streamFASTASeq seqStream
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ {
  PyObject_HEAD
  PyObject *__pyx_v_fIn;
  PyObject *__pyx_v_genexpr;
  PyObject *__pyx_v_line;
  PyObject *__pyx_v_lineSrc;
  PyObject *__pyx_v_self;
  struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_seqStream;
  PyObject *__pyx_v_sname;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
};


/* "gnocis/sequences.pyx":648
 * 			# Parse line by line, with streaming of all included sequences, re-using the last
 * 			# read line by each sequence stream when a new sequence starts.
 * 			lineSrc = (y.decode('utf-8') for y in fIn) if self.isGZ else fIn             # <<<<<<<<<<<<<<
 * 			line = None
 * 			while True:
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *__pyx_outer_scope;
  PyObject *__pyx_v_y;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "gnocis/sequences.pyx":755
 * 		self.nnt = nnt
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		cdef list Nblocks = self.Nblocks
 * 		cdef stream2bitNBlock block
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream {
  PyObject_HEAD
  PyObject *__pyx_v_Nblocks;
  struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_block;
  char *__pyx_v_byteToNTs;
  int *__pyx_v_byteToNTsI;
  unsigned char __pyx_v_c;
  PyObject *__pyx_v_cbuf;
  int *__pyx_v_crbuf;
  int __pyx_v_filecursor;
  PyObject *__pyx_v_firstValidNBlock;
  PyObject *__pyx_v_i;
  long __pyx_v_iA;
  int __pyx_v_iB;
  PyObject *__pyx_v_iblock;
  int __pyx_v_ints;
  bool __pyx_v_isEnd;
  int __pyx_v_nLoad;
  int __pyx_v_nLoadNT;
  int __pyx_v_nnt;
  int __pyx_v_nprocess;
  PyObject *__pyx_v_ntByIndex;
  char *__pyx_v_rbuf;
  int __pyx_v_rbufsize;
  int __pyx_v_rcursor;
  struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self;
  int __pyx_v_wantBlockSize;
  long __pyx_v_x;
};


/* "gnocis/sequences.pyx":868
 * 		self.restrictToSequences = restrictToSequences
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef unsigned int sig, ver, nseq, reserved, offset
 * 		cdef list seqs
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ {
  PyObject_HEAD
  PyObject *__pyx_v_Nblocks;
  PyObject *__pyx_v_blkSizes;
  PyObject *__pyx_v_blkStarts;
  PyObject *__pyx_9genexpr25__pyx_v_bsize;
  PyObject *__pyx_9genexpr25__pyx_v_bstart;
  PyObject *__pyx_v_fIn;
  PyObject *__pyx_v_genexpr;
  int __pyx_v_iseq;
  PyObject *__pyx_v_maskSizes;
  PyObject *__pyx_v_maskStarts;
  PyObject *__pyx_v_name;
  PyObject *__pyx_v_namebytes;
  PyObject *__pyx_v_namelen;
  int __pyx_v_nblk;
  PyObject *__pyx_v_nmask;
  int __pyx_v_nnt;
  unsigned int __pyx_v_nseq;
  unsigned int __pyx_v_offset;
  unsigned int __pyx_v_reserved;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_seqInfo;
  PyObject *__pyx_v_seqs;
  unsigned int __pyx_v_sig;
  PyObject *__pyx_v_sname;
  unsigned int __pyx_v_ver;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  int __pyx_t_5;
  Py_ssize_t __pyx_t_6;
};


/* "gnocis/sequences.pyx":900
 * 				fIn.seek(seqInfo['offset'])
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))             # <<<<<<<<<<<<<<
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *__pyx_outer_scope;
  int __pyx_v__;
};


/* "gnocis/sequences.pyx":901
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))             # <<<<<<<<<<<<<<
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *__pyx_outer_scope;
  int __pyx_v__;
};


/* "gnocis/sequences.pyx":903
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))             # <<<<<<<<<<<<<<
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *__pyx_outer_scope;
  PyObject *__pyx_v__;
};


/* "gnocis/sequences.pyx":904
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))             # <<<<<<<<<<<<<<
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 * 				Nblocks = sorted([ stream2bitNBlock(bstart, bsize) for bstart, bsize in zip(blkStarts, blkSizes) ], key = lambda x: x.start)
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *__pyx_outer_scope;
  PyObject *__pyx_v__;
};


/* "gnocis/sequences.pyx":969
 * 
 * # Streams sequence windows from a sequence set or sequence stream, with coordinates and window sequence.
 * def streamSequenceWindows(src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Yields sequence windows for a sequence set, sequence stream or a path to a sequence file.
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows {
  PyObject_HEAD
  PyObject *__pyx_v_blk;
  PyObject *__pyx_v_cbuf;
  PyObject *__pyx_v_cseq;
  int __pyx_v_cstart;
  PyObject *__pyx_v_src;
  int __pyx_v_windowSize;
  int __pyx_v_windowStep;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
};


/* "gnocis/sequences.pyx":1062
 * 		return self.__str__()
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		while self.wantSize > 0:
 * 			ng = min(self.wantBlockSize, self.wantSize)
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream {
  PyObject_HEAD
  PyObject *__pyx_v_ng;
  PyObject *__pyx_v_self;
};


/* "gnocis/sequences.pyx":1078
 * 		self.name = str(model)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ {
  PyObject_HEAD
  PyObject *__pyx_v_i;
  PyObject *__pyx_v_seed;
  PyObject *__pyx_v_self;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "gnocis/sequences.pyx":1209
 * 
 * 	# Prepares model for use
 * 	def _prepare(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Prepares model for use.
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare {
  PyObject_HEAD
  int __pyx_v_ki;
  long __pyx_v_kis;
  struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self;
};


/* "gnocis/sequences.pyx":1237
 * 		for ki in range(len(self.probspectrum)):
 * 			kis = ki << 2
 * 			obsT = sum( self.spectrum[ kis | nti ] for nti in range(4) )             # <<<<<<<<<<<<<<
 * 			if obsT > 0:
 * 				self.probspectrum[ki] = [ (nti, self.spectrum[ kis | nti ] / obsT) for nti in range(4) ]
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *__pyx_outer_scope;
  long __pyx_v_nti;
  long __pyx_t_0;
};


/* "gnocis/sequences.pyx":1246
 * 		self.comparableSpectrum = {}
 * 		for ki in range(len(self.probspectrum)):
 * 			kmer = ''.join( kSpectrumIndex2NT[(ki >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )             # <<<<<<<<<<<<<<
 * 
 * 			self.comparableSpectrum[kmer] =  { nt: self.spectrum[(ki << 2) | kSpectrumNT2Index[nt]] for nt in [ 'A', 'T', 'G', 'C' ] }
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *__pyx_outer_scope;
  PyObject *__pyx_v_x;
};


/* "gnocis/sequences.pyx":1328
 * 
 * 	# Generates a sequence
 * 	def generate(self, int length):             # <<<<<<<<<<<<<<
 * 		""" Generates a sequence.
 * 
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self;
  int __pyx_v_state;
};


/* "gnocis/sequences.pyx":1350
 * 		random.seed(seed)
 * 		state = weightedRandomChoice(self.initialDistribution)
 * 		kmer = ''.join( kSpectrumIndex2NT[(state >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )             # <<<<<<<<<<<<<<
 * 		seq = '' + kmer
 * 		andMask = ((4 ** (degree))-1)
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *__pyx_outer_scope;
  PyObject *__pyx_v_x;
};


/* "gnocis/sequences.pyx":1460
 * 
 * 	# Prepares model for use
 * 	def _prepare(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Prepares model for use.
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self;
};


/* "gnocis/sequences.pyx":1473
 * 				self.spectrum[nt] += self.pseudoCounts
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 * 		ntT = sum( self.spectrum[nt] for nt in nucleotides )             # <<<<<<<<<<<<<<
 * 		self.ntDistribution = [ (nt, float(self.spectrum[nt])/ ntT) for nt in nucleotides ]
 * 		self.prepared = True
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *__pyx_outer_scope;
  PyObject *__pyx_v_nt;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "gnocis/sequences.pyx":1478
 * 
 * 	# Generates a sequence
 * 	def generate(self, length):             # <<<<<<<<<<<<<<
 * 		""" Generates a sequence.
 * 
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate {
  PyObject_HEAD
  PyObject *__pyx_v_length;
  struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self;
};


/* "gnocis/sequences.pyx":1491
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		seq = ''.join( weightedRandomChoice(self.ntDistribution) for _ in range(length) )             # <<<<<<<<<<<<<<
 * 		self.nGenerated += 1
 * 		return sequence('Generated sequence <Length: %d, Model: %s; Seed: %d>'%(length, str(self), seed), seq)
 */
struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr {
  PyObject_HEAD
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *__pyx_outer_scope;
  PyObject *__pyx_v__;
};



/* "gnocis/sequences.pyx":62
 * 
 * # Represents and loads DNA sequences.
 * cdef class sequence:             # <<<<<<<<<<<<<<
 * 	"""
 * 	The `sequence` class represents a DNA sequence.
 */

struct __pyx_vtabstruct_6gnocis_9sequences_sequence {
  PyObject *(*getBytes)(struct __pyx_obj_6gnocis_9sequences_sequence *);
  PyObject *(*getBytesIndexed)(struct __pyx_obj_6gnocis_9sequences_sequence *);
};
static struct __pyx_vtabstruct_6gnocis_9sequences_sequence *__pyx_vtabptr_6gnocis_9sequences_sequence;

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

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

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

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

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

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

/* PyUnicode_Unicode.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Unicode(PyObject *obj);

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

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

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

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

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

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

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

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

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

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

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

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

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

/* PyObjectFormatAndDecref.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f);
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f);

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

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

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

/* BuildPyUnicode.proto */
static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength,
                                                int prepend_sign, char padding_char);

/* CIntToPyUnicode.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_PY_LONG_LONG(PY_LONG_LONG value, Py_ssize_t width, char padding_char, char format_char);

/* CIntToPyUnicode.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char);

/* PyUnicode_Substring.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring(
            PyObject* text, Py_ssize_t start, Py_ssize_t stop);

/* CIntToPyUnicode.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char);

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

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

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

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

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

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

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

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

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

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

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

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

/* PyObjectFormat.proto */
#if CYTHON_USE_UNICODE_WRITER
static PyObject* __Pyx_PyObject_Format(PyObject* s, PyObject* f);
#else
#define __Pyx_PyObject_Format(s, f) PyObject_Format(s, f)
#endif

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

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

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

/* unicode_tailmatch.proto */
static int __Pyx_PyUnicode_Tailmatch(
    PyObject* s, PyObject* substr, Py_ssize_t start, Py_ssize_t end, int direction);

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

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

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

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

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

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

/* decode_c_string_utf16.proto */
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) {
    int byteorder = 0;
    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
}
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) {
    int byteorder = -1;
    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
}
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) {
    int byteorder = 1;
    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
}

/* decode_c_bytes.proto */
static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
         const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
         const char* encoding, const char* errors,
         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));

/* decode_bytes.proto */
static CYTHON_INLINE PyObject* __Pyx_decode_bytes(
         PyObject* string, Py_ssize_t start, Py_ssize_t stop,
         const char* encoding, const char* errors,
         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
    return __Pyx_decode_c_bytes(
        PyBytes_AS_STRING(string), PyBytes_GET_SIZE(string),
        start, stop, encoding, errors, decode_func);
}

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

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

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

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

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

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

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

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

/* py_dict_keys.proto */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d);

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

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

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

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

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

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

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

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

/* UnicodeAsUCS4.proto */
static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*);

/* object_ord.proto */
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyObject_Ord(c)\
    (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c))
#else
#define __Pyx_PyObject_Ord(c) __Pyx__PyObject_Ord(c)
#endif
static long __Pyx__PyObject_Ord(PyObject* c);

/* unicode_iter.proto */
static CYTHON_INLINE int __Pyx_init_unicode_iteration(
    PyObject* ustring, Py_ssize_t *length, void** data, int *kind);

/* GetItemIntUnicode.proto */
#define __Pyx_GetItemInt_Unicode(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Unicode_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
    (PyErr_SetString(PyExc_IndexError, "string index out of range"), (Py_UCS4)-1))
static CYTHON_INLINE Py_UCS4 __Pyx_GetItemInt_Unicode_Fast(PyObject* ustring, Py_ssize_t i,
                                                           int wraparound, int boundscheck);

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

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

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

/* CallNextTpTraverse.proto */
static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse);

/* CallNextTpClear.proto */
static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_dealloc);

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

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

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

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

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

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

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

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

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

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

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

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

/* None.proto */
static CYTHON_INLINE long __Pyx_pow_long(long, long);

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

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

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

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PY_LONG_LONG(PY_LONG_LONG value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char value);

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

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

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

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

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

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

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

/* CoroutineBase.proto */
typedef PyObject *(*__pyx_coroutine_body_t)(PyObject *, PyThreadState *, PyObject *);
#if CYTHON_USE_EXC_INFO_STACK
#define __Pyx_ExcInfoStruct  _PyErr_StackItem
#else
typedef struct {
    PyObject *exc_type;
    PyObject *exc_value;
    PyObject *exc_traceback;
} __Pyx_ExcInfoStruct;
#endif
typedef struct {
    PyObject_HEAD
    __pyx_coroutine_body_t body;
    PyObject *closure;
    __Pyx_ExcInfoStruct gi_exc_state;
    PyObject *gi_weakreflist;
    PyObject *classobj;
    PyObject *yieldfrom;
    PyObject *gi_name;
    PyObject *gi_qualname;
    PyObject *gi_modulename;
    PyObject *gi_code;
    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);

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

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

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

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

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

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

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

PyObject *__pyx_f_6gnocis_9sequences_8sequence_getBytes(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto*/
PyObject *__pyx_f_6gnocis_9sequences_8sequence_getBytesIndexed(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto*/

/* Module declarations from 'libcpp' */

/* Module declarations from 'gnocis.regions' */
static PyTypeObject *__pyx_ptype_6gnocis_7regions_region = 0;
static PyTypeObject *__pyx_ptype_6gnocis_7regions_regions = 0;

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

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

/* Module declarations from 'gnocis.common' */
static PyTypeObject *__pyx_ptype_6gnocis_6common__PyMEAPrivateData = 0;
static struct __pyx_obj_6gnocis_6common__PyMEAPrivateData *(*__pyx_f_6gnocis_6common_getGlobalData)(void); /*proto*/

/* Module declarations from 'gnocis.motifs' */
static PyTypeObject *__pyx_ptype_6gnocis_6motifs_motifOccurrence = 0;
static PyTypeObject *__pyx_ptype_6gnocis_6motifs_IUPACMotif = 0;
static PyTypeObject *__pyx_ptype_6gnocis_6motifs_PWMMotif = 0;

/* Module declarations from 'gnocis.sequences' */
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_sequenceLabel = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_sequence = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_sequences = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_sequenceStream = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_sequenceGenerator = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_MarkovChain = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_IID = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_streamFASTASeq = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_stream2bitNBlock = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences_stream2bitSeq = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct__table = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_1_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_2_withLabel = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_3_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_4_labels = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_5_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_6_printStatistics = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_7_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_8_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_9_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_10_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_12_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_13_fetch = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_15_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_17_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_18_stream = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_19___iter__ = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_20_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_21_stream = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_22___iter__ = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_23_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_24_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_25_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_26_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_28_stream = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_29___iter__ = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_30__prepare = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_31_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_32_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_33_generate = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_34_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_35__prepare = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_36_genexpr = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_37_generate = 0;
static PyTypeObject *__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_38_genexpr = 0;
static PyObject *__pyx_f_6gnocis_9sequences_streamFASTA(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_streamFASTA *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences_stream2bit(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_stream2bit *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences_getSequenceStreamFromPath(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_getSequenceStreamFromPath *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences_streamFASTAGZ(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_streamFASTAGZ *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceLabel__set_state(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequence__set_state(struct __pyx_obj_6gnocis_9sequences_sequence *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequences__set_state(struct __pyx_obj_6gnocis_9sequences_sequences *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceStream__set_state(struct __pyx_obj_6gnocis_9sequences_sequenceStream *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_streamFASTASeq__set_state(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_stream2bitNBlock__set_state(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_stream2bitSeq__set_state(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceGenerator__set_state(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_MarkovChain__set_state(struct __pyx_obj_6gnocis_9sequences_MarkovChain *, PyObject *); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_IID__set_state(struct __pyx_obj_6gnocis_9sequences_IID *, PyObject *); /*proto*/
#define __Pyx_MODULE_NAME "gnocis.sequences"
extern int __pyx_module_is_main_gnocis__sequences;
int __pyx_module_is_main_gnocis__sequences = 0;

/* Implementation of 'gnocis.sequences' */
static PyObject *__pyx_builtin_range;
static PyObject *__pyx_builtin_open;
static PyObject *__pyx_builtin_print;
static PyObject *__pyx_builtin_sum;
static PyObject *__pyx_builtin_min;
static PyObject *__pyx_builtin_max;
static PyObject *__pyx_builtin_enumerate;
static PyObject *__pyx_builtin_sorted;
static PyObject *__pyx_builtin_zip;
static const char __pyx_k_[] = ">";
static const char __pyx_k_1[] = "\\1\n";
static const char __pyx_k_A[] = "A";
static const char __pyx_k_B[] = "B";
static const char __pyx_k_C[] = "C";
static const char __pyx_k_G[] = "G";
static const char __pyx_k_I[] = "I";
static const char __pyx_k_T[] = "T";
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_i[] = "i";
static const char __pyx_k_n[] = "n";
static const char __pyx_k_r[] = "r";
static const char __pyx_k_s[] = " (%s)";
static const char __pyx_k_w[] = "w";
static const char __pyx_k_2b[] = ".2b";
static const char __pyx_k_2f[] = ".2f";
static const char __pyx_k_65[] = "(.{65})";
static const char __pyx_k_II[] = "II";
static const char __pyx_k_No[] = "No";
static const char __pyx_k__2[] = "";
static const char __pyx_k__3[] = ":";
static const char __pyx_k__4[] = "..";
static const char __pyx_k__5[] = " (";
static const char __pyx_k__6[] = "+";
static const char __pyx_k__7[] = "-";
static const char __pyx_k__8[] = ")";
static const char __pyx_k__9[] = "/";
static const char __pyx_k_bp[] = " bp)";
static const char __pyx_k_cw[] = "cw";
static const char __pyx_k_fa[] = ".fa";
static const char __pyx_k_ng[] = "ng";
static const char __pyx_k_nt[] = " nt)";
static const char __pyx_k_rb[] = "rb";
static const char __pyx_k_re[] = "re";
static const char __pyx_k_IID[] = "IID";
static const char __pyx_k_Yes[] = "Yes";
static const char __pyx_k__10[] = ", ";
static const char __pyx_k__11[] = " + ";
static const char __pyx_k__12[] = " [";
static const char __pyx_k__13[] = "]";
static const char __pyx_k__16[] = " ";
static const char __pyx_k__17[] = "_";
static const char __pyx_k__19[] = "\n";
static const char __pyx_k_blk[] = "blk";
static const char __pyx_k_chr[] = "chr";
static const char __pyx_k_doc[] = "__doc__";
static const char __pyx_k_end[] = "end";
static const char __pyx_k_fIn[] = "fIn";
static const char __pyx_k_key[] = "key";
static const char __pyx_k_lst[] = "lst";
static const char __pyx_k_max[] = "max";
static const char __pyx_k_min[] = "min";
static const char __pyx_k_new[] = "__new__";
static const char __pyx_k_nnt[] = "nnt";
static const char __pyx_k_seq[] = "seq";
static const char __pyx_k_sig[] = "sig";
static const char __pyx_k_src[] = "src";
static const char __pyx_k_str[] = "__str__";
static const char __pyx_k_sub[] = "sub";
static const char __pyx_k_sum[] = "sum";
static const char __pyx_k_ver[] = "ver";
static const char __pyx_k_zip[] = "zip";
static const char __pyx_k_2bit[] = ".2bit";
static const char __pyx_k_IIII[] = "IIII";
static const char __pyx_k_Name[] = "Name";
static const char __pyx_k_None[] = "None";
static const char __pyx_k_Seed[] = "; Seed: ";
static const char __pyx_k_args[] = "args";
static const char __pyx_k_bstr[] = "bstr";
static const char __pyx_k_cbuf[] = "cbuf";
static const char __pyx_k_cseq[] = "cseq";
static const char __pyx_k_dict[] = "__dict__";
static const char __pyx_k_exit[] = "__exit__";
static const char __pyx_k_gzip[] = "gzip";
static const char __pyx_k_init[] = "__init__";
static const char __pyx_k_isGZ[] = "isGZ";
static const char __pyx_k_iseq[] = "iseq";
static const char __pyx_k_iter[] = "__iter__";
static const char __pyx_k_keys[] = "keys";
static const char __pyx_k_line[] = "line";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_name[] = "name";
static const char __pyx_k_nblk[] = "nblk";
static const char __pyx_k_nseq[] = "nseq";
static const char __pyx_k_open[] = "open";
static const char __pyx_k_path[] = "path";
static const char __pyx_k_read[] = "read";
static const char __pyx_k_repr[] = "__repr__";
static const char __pyx_k_rset[] = "rset";
static const char __pyx_k_seed[] = "seed";
static const char __pyx_k_seek[] = "seek";
static const char __pyx_k_self[] = "self";
static const char __pyx_k_send[] = "send";
static const char __pyx_k_seqs[] = "seqs";
static const char __pyx_k_size[] = "size";
static const char __pyx_k_step[] = "step";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_Model[] = "; Model: ";
static const char __pyx_k_bsize[] = "bsize";
static const char __pyx_k_close[] = "close";
static const char __pyx_k_enter[] = "__enter__";
static const char __pyx_k_fa_gz[] = ".fa.gz";
static const char __pyx_k_fasta[] = ".fasta";
static const char __pyx_k_fetch[] = "fetch";
static const char __pyx_k_label[] = "label";
static const char __pyx_k_lower[] = "lower";
static const char __pyx_k_maxnt[] = "maxnt";
static const char __pyx_k_model[] = "model";
static const char __pyx_k_nmask[] = "nmask";
static const char __pyx_k_print[] = "print";
static const char __pyx_k_range[] = "range";
static const char __pyx_k_ratio[] = "ratio";
static const char __pyx_k_seq_2[] = " seq.)";
static const char __pyx_k_sname[] = "sname";
static const char __pyx_k_split[] = "split";
static const char __pyx_k_start[] = "start";
static const char __pyx_k_strip[] = "strip";
static const char __pyx_k_table[] = "table";
static const char __pyx_k_throw[] = "throw";
static const char __pyx_k_utf_8[] = "utf-8";
static const char __pyx_k_value[] = "value";
static const char __pyx_k_wantN[] = "wantN";
static const char __pyx_k_write[] = "write";
static const char __pyx_k_DOTALL[] = "DOTALL";
static const char __pyx_k_Labels[] = "Labels";
static const char __pyx_k_Length[] = "Length";
static const char __pyx_k_bstart[] = "bstart";
static const char __pyx_k_choice[] = "choice";
static const char __pyx_k_common[] = "common";
static const char __pyx_k_cstart[] = "cstart";
static const char __pyx_k_decode[] = "decode";
static const char __pyx_k_degree[] = "degree";
static const char __pyx_k_genome[] = "genome";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_labels[] = "labels";
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_nt_max[] = " nt - max.: ";
static const char __pyx_k_nt_min[] = " nt (min.: ";
static const char __pyx_k_number[] = "number";
static const char __pyx_k_offset[] = "offset";
static const char __pyx_k_pickle[] = "pickle";
static const char __pyx_k_random[] = "random";
static const char __pyx_k_reduce[] = "__reduce__";
static const char __pyx_k_seed_2[] = " (seed = ";
static const char __pyx_k_sorted[] = "sorted";
static const char __pyx_k_strand[] = "strand";
static const char __pyx_k_stream[] = "stream";
static const char __pyx_k_struct[] = "struct";
static const char __pyx_k_unpack[] = "unpack";
static const char __pyx_k_update[] = "update";
static const char __pyx_k_Model_2[] = ", Model: ";
static const char __pyx_k_Nblocks[] = "Nblocks";
static const char __pyx_k_bp_step[] = " bp; step: ";
static const char __pyx_k_choices[] = "choices";
static const char __pyx_k_dropChr[] = "dropChr";
static const char __pyx_k_fstream[] = "fstream";
static const char __pyx_k_genexpr[] = "genexpr";
static const char __pyx_k_ioputil[] = "ioputil";
static const char __pyx_k_lineSrc[] = "lineSrc";
static const char __pyx_k_namelen[] = "namelen";
static const char __pyx_k_nctable[] = "nctable";
static const char __pyx_k_prepare[] = "_prepare";
static const char __pyx_k_randint[] = "randint";
static const char __pyx_k_replace[] = "replace";
static const char __pyx_k_seqInfo[] = "seqInfo";
static const char __pyx_k_shuffle[] = "shuffle";
static const char __pyx_k_split_A[] = " (split A)";
static const char __pyx_k_split_B[] = " (split B)";
static const char __pyx_k_value_2[] = "; value = ";
static const char __pyx_k_windows[] = " windows(";
static const char __pyx_k_Negative[] = "Negative";
static const char __pyx_k_Positive[] = "Positive";
static const char __pyx_k_Sequence[] = "Sequence";
static const char __pyx_k_blkSizes[] = "blkSizes";
static const char __pyx_k_endswith[] = "endswith";
static const char __pyx_k_fasta_gz[] = ".fasta.gz";
static const char __pyx_k_generate[] = "generate";
static const char __pyx_k_getstate[] = "__getstate__";
static const char __pyx_k_negative[] = "negative";
static const char __pyx_k_pathName[] = "pathName";
static const char __pyx_k_positive[] = "positive";
static const char __pyx_k_pyx_type[] = "__pyx_type";
static const char __pyx_k_qualname[] = "__qualname__";
static const char __pyx_k_reserved[] = "reserved";
static const char __pyx_k_sequence[] = "sequence";
static const char __pyx_k_setstate[] = "__setstate__";
static const char __pyx_k_wantSize[] = "wantSize";
static const char __pyx_k_Sequences[] = "Sequences: ";
static const char __pyx_k_blkStarts[] = "blkStarts";
static const char __pyx_k_enumerate[] = "enumerate";
static const char __pyx_k_loadFASTA[] = "loadFASTA";
static const char __pyx_k_maskSizes[] = "maskSizes";
static const char __pyx_k_metaclass[] = "__metaclass__";
static const char __pyx_k_namebytes[] = "namebytes";
static const char __pyx_k_prepare_2[] = "prepare";
static const char __pyx_k_prepare_3[] = "__prepare__";
static const char __pyx_k_pyx_state[] = "__pyx_state";
static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
static const char __pyx_k_repr_html[] = "_repr_html_";
static const char __pyx_k_seqStream[] = "seqStream";
static const char __pyx_k_sequences[] = "sequences";
static const char __pyx_k_FASTA_file[] = "FASTA file: ";
static const char __pyx_k_Sequence_s[] = "Sequence<%s>";
static const char __pyx_k_annotation[] = "annotation";
static const char __pyx_k_maskStarts[] = "maskStarts";
static const char __pyx_k_pyx_result[] = "__pyx_result";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_seqLengths[] = "seqLengths";
static const char __pyx_k_spacePrune[] = "spacePrune";
static const char __pyx_k_startswith[] = "startswith";
static const char __pyx_k_windowSize[] = "windowSize";
static const char __pyx_k_windowStep[] = "windowStep";
static const char __pyx_k_Length_each[] = "; Length each: ";
static const char __pyx_k_MarkovChain[] = "MarkovChain";
static const char __pyx_k_Mean_length[] = " - Mean length: ";
static const char __pyx_k_PickleError[] = "PickleError";
static const char __pyx_k_Sequences_d[] = " - Sequences: %d";
static const char __pyx_k_initialSort[] = "initialSort";
static const char __pyx_k_loadFASTAGZ[] = "loadFASTAGZ";
static const char __pyx_k_nucleotides[] = "nucleotides";
static const char __pyx_k_Pseudocounts[] = "; Pseudocounts: ";
static const char __pyx_k_Training_set[] = "; Training set: ";
static const char __pyx_k_bp_step_size[] = " bp; step size: ";
static const char __pyx_k_pseudoCounts[] = "pseudoCounts";
static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
static const char __pyx_k_sourceRegion[] = "sourceRegion";
static const char __pyx_k_stringsource[] = "stringsource";
static const char __pyx_k_windows_size[] = " (windows - size: ";
static const char __pyx_k_Source_region[] = "Source region";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_sequenceLabel[] = "sequenceLabel";
static const char __pyx_k_stream2bitSeq[] = "stream2bitSeq";
static const char __pyx_k_wantBlockSize[] = "wantBlockSize";
static const char __pyx_k_Sequence_label[] = "Sequence label<";
static const char __pyx_k_addComplements[] = "addComplements";
static const char __pyx_k_sequenceStream[] = "sequenceStream";
static const char __pyx_k_streamFASTASeq[] = "streamFASTASeq";
static const char __pyx_k_Add_complements[] = "; Add complements: ";
static const char __pyx_k_From_FASTA_file[] = "From FASTA file ";
static const char __pyx_k_Random_sequence[] = "Random sequence ";
static const char __pyx_k_Sequence_list_s[] = "Sequence list<%s>";
static const char __pyx_k_ensureAllLabels[] = "ensureAllLabels";
static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
static const char __pyx_k_sequenceLengths[] = "sequenceLengths";
static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
static const char __pyx_k_IID_Pseudocounts[] = "IID<Pseudocounts: ";
static const char __pyx_k_gnocis_sequences[] = "gnocis.sequences";
static const char __pyx_k_pyx_unpickle_IID[] = "__pyx_unpickle_IID";
static const char __pyx_k_stream2bitNBlock[] = "stream2bitNBlock";
static const char __pyx_k_trainOnSequences[] = "_trainOnSequences";
static const char __pyx_k_Total_length_d_nt[] = " - Total length: %d nt";
static const char __pyx_k_kSpectrumIndex2NT[] = "kSpectrumIndex2NT";
static const char __pyx_k_kSpectrumNT2Index[] = "kSpectrumNT2Index";
static const char __pyx_k_sequenceGenerator[] = "sequenceGenerator";
static const char __pyx_k_trainingSequences[] = "trainingSequences";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_includeCroppedEnds[] = "includeCroppedEnds";
static const char __pyx_k_sequenceStream2bit[] = "sequenceStream2bit";
static const char __pyx_k_Markov_Chain_Degree[] = "Markov Chain<Degree: ";
static const char __pyx_k_Windows_Window_size[] = "Windows (Window size: ";
static const char __pyx_k_bootstrap_sample_of[] = " (bootstrap sample of ";
static const char __pyx_k_restrictToSequences[] = "restrictToSequences";
static const char __pyx_k_sequenceStreamFASTA[] = "sequenceStreamFASTA";
static const char __pyx_k_streamFullSequences[] = "streamFullSequences";
static const char __pyx_k_FASTA_sequence_error[] = "FASTA sequence error";
static const char __pyx_k_gnocis_sequences_pyx[] = "gnocis/sequences.pyx";
static const char __pyx_k_sequenceStream_fetch[] = "sequenceStream.fetch";
static const char __pyx_k_stream2bitSeq_stream[] = "stream2bitSeq.stream";
static const char __pyx_k_table_locals_genexpr[] = "table.<locals>.genexpr";
static const char __pyx_k_weightedRandomChoice[] = "weightedRandomChoice";
static const char __pyx_k_addReverseComplements[] = "addReverseComplements";
static const char __pyx_k_labels_locals_genexpr[] = "labels.<locals>.genexpr";
static const char __pyx_k_pyx_unpickle_sequence[] = "__pyx_unpickle_sequence";
static const char __pyx_k_streamFASTASeq_stream[] = "streamFASTASeq.stream";
static const char __pyx_k_streamSequenceWindows[] = "streamSequenceWindows";
static const char __pyx_k_trainOnSequenceStream[] = "_trainOnSequenceStream";
static const char __pyx_k_2bit_sequence_stream_s[] = "2bit sequence stream<%s>";
static const char __pyx_k_prepare_locals_genexpr[] = "_prepare.<locals>.genexpr";
static const char __pyx_k_pyx_unpickle_sequences[] = "__pyx_unpickle_sequences";
static const char __pyx_k_Add_reverse_complements[] = "; Add reverse complements: ";
static const char __pyx_k_FASTA_file_syntax_error[] = "FASTA file syntax error";
static const char __pyx_k_FASTA_sequence_stream_s[] = "FASTA sequence stream<%s>";
static const char __pyx_k_Generated_set_Sequences[] = "Generated set <Sequences: ";
static const char __pyx_k_Sequence_set_statistics[] = "Sequence set statistics - ";
static const char __pyx_k_generate_locals_genexpr[] = "generate.<locals>.genexpr";
static const char __pyx_k_sequenceStreamGenerator[] = "sequenceStreamGenerator";
static const char __pyx_k_complementaryNucleotides[] = "complementaryNucleotides";
static const char __pyx_k_getSequenceWindowRegions[] = "getSequenceWindowRegions";
static const char __pyx_k_pyx_unpickle_MarkovChain[] = "__pyx_unpickle_MarkovChain";
static const char __pyx_k_sequenceStream2bit___str[] = "sequenceStream2bit.__str__";
static const char __pyx_k_withLabel_locals_genexpr[] = "withLabel.<locals>.genexpr";
static const char __pyx_k_Generated_sequence_Length[] = "Generated sequence <Length: ";
static const char __pyx_k_sequenceStream2bit___init[] = "sequenceStream2bit.__init__";
static const char __pyx_k_sequenceStream2bit___iter[] = "sequenceStream2bit.__iter__";
static const char __pyx_k_sequenceStream2bit___repr[] = "sequenceStream2bit.__repr__";
static const char __pyx_k_sequenceStreamFASTA___str[] = "sequenceStreamFASTA.__str__";
static const char __pyx_k_loadFASTAGZ_locals_genexpr[] = "loadFASTAGZ.<locals>.genexpr";
static const char __pyx_k_pyx_unpickle_sequenceLabel[] = "__pyx_unpickle_sequenceLabel";
static const char __pyx_k_pyx_unpickle_stream2bitSeq[] = "__pyx_unpickle_stream2bitSeq";
static const char __pyx_k_sequenceStreamFASTA___init[] = "sequenceStreamFASTA.__init__";
static const char __pyx_k_sequenceStreamFASTA___iter[] = "sequenceStreamFASTA.__iter__";
static const char __pyx_k_sequenceStreamFASTA___repr[] = "sequenceStreamFASTA.__repr__";
static const char __pyx_k_Generator_sequence_stream_s[] = "Generator sequence stream<%s>";
static const char __pyx_k_pyx_unpickle_sequenceStream[] = "__pyx_unpickle_sequenceStream";
static const char __pyx_k_pyx_unpickle_streamFASTASeq[] = "__pyx_unpickle_streamFASTASeq";
static const char __pyx_k_Unrecognized_sequence_format[] = "Unrecognized sequence format";
static const char __pyx_k_pyx_unpickle_stream2bitNBlock[] = "__pyx_unpickle_stream2bitNBlock";
static const char __pyx_k_sequenceStreamGenerator___str[] = "sequenceStreamGenerator.__str__";
static const char __pyx_k_Streams_a_2bit_file_param_path[] = "\n\tStreams a 2bit file.\n\t\n\t:param path: Path to the input file.\n\t:param wantBlockSize: Desired block size.\n\t:param spacePrune: Whether or not to prune sequence name spaces.\n\t:param dropChr: Whether or not to prune sequence name \"chr\"-prefixes.\n\t:param restrictToSequences: List of sequence names to restrict to/focus on.\n\t\n\t:type path: str\n\t:type wantBlockSize: int\n\t:type spacePrune: bool\n\t:type dropChr: bool\n\t:type restrictToSequences: list\n\t";
static const char __pyx_k_printStatistics_locals_genexpr[] = "printStatistics.<locals>.genexpr";
static const char __pyx_k_pyx_unpickle_sequenceGenerator[] = "__pyx_unpickle_sequenceGenerator";
static const char __pyx_k_sequenceLengths_locals_genexpr[] = "sequenceLengths.<locals>.genexpr";
static const char __pyx_k_sequenceStreamGenerator___init[] = "sequenceStreamGenerator.__init__";
static const char __pyx_k_sequenceStreamGenerator___iter[] = "sequenceStreamGenerator.__iter__";
static const char __pyx_k_sequenceStreamGenerator___repr[] = "sequenceStreamGenerator.__repr__";
static const char __pyx_k_No_sequences_with_the_requested[] = "No sequences with the requested label were found";
static const char __pyx_k_Streams_a_FASTA_file_param_path[] = "\n\tStreams a FASTA file.\n\t\n\t:param path: Path to the input file.\n\t:param wantBlockSize: Desired block size.\n\t:param spacePrune: Whether or not to prune sequence name spaces.\n\t:param dropChr: Whether or not to prune sequence name \"chr\"-prefixes.\n\t:param restrictToSequences: List of sequence names to restrict to/focus on.\n\t:param isGZ: Whether or not the input file is GZipped.\n\t\n\t:type path: str\n\t:type wantBlockSize: int\n\t:type spacePrune: bool\n\t:type dropChr: bool\n\t:type restrictToSequences: list\n\t:type isGZ: bool\n\t";
static const char __pyx_k_sequenceStreamGeneratorSequence[] = "sequenceStreamGeneratorSequence.stream";
static const char __pyx_k_Choice_weights_sum_up_to_more_th[] = "Choice weights sum up to more than 1.0";
static const char __pyx_k_Generator_sequence_stream_sequen[] = "Generator sequence stream sequence<";
static const char __pyx_k_Incompatible_checksums_s_vs_0x34[] = "Incompatible checksums (%s vs 0x3439456 = (size, start))";
static const char __pyx_k_Incompatible_checksums_s_vs_0x53[] = "Incompatible checksums (%s vs 0x53333f8 = (addComplements, nGenerated, ntDistribution, prepared, pseudoCounts, spectrum, trainingSequences))";
static const char __pyx_k_Incompatible_checksums_s_vs_0x65[] = "Incompatible checksums (%s vs 0x656a346 = (fstream, lastLine, name, parsingCompleted, wantBlockSize))";
static const char __pyx_k_Incompatible_checksums_s_vs_0x95[] = "Incompatible checksums (%s vs 0x958e205 = (Nblocks, fstream, name, nnt, wantBlockSize))";
static const char __pyx_k_Incompatible_checksums_s_vs_0xac[] = "Incompatible checksums (%s vs 0xac23688 = (annotation, cbytes, cbytesIndexed, labels, name, path, seq, sourceRegion))";
static const char __pyx_k_Incompatible_checksums_s_vs_0xb3[] = "Incompatible checksums (%s vs 0xb3d3e1e = (name, sequences))";
static const char __pyx_k_Incompatible_checksums_s_vs_0xc6[] = "Incompatible checksums (%s vs 0xc6df6e2 = (addReverseComplements, comparableSpectrum, degree, initialDistribution, nGenerated, prepared, probspectrum, pseudoCounts, spectrum, trainingSequences))";
static const char __pyx_k_Incompatible_checksums_s_vs_0xd4[] = "Incompatible checksums (%s vs 0xd41d8cd = ())";
static const char __pyx_k_Incompatible_checksums_s_vs_0xfa[] = "Incompatible checksums (%s vs 0xfa7a105 = (name, value))";
static const char __pyx_k_Invalid_2bit_sequence_file_Heade[] = "Invalid 2bit sequence file. Header signature was of unexpected value.";
static const char __pyx_k_Not_all_requested_labels_were_fo[] = "Not all requested labels were found among the sequences";
static const char __pyx_k_Tried_to_train_IID_model_that_is[] = "Tried to train IID model that is already prepared for use";
static const char __pyx_k_Tried_to_train_Markov_model_that[] = "Tried to train Markov model that is already prepared for use";
static const char __pyx_k_WARNING_rcursor_rbufsize_1_rcurs[] = "WARNING! rcursor >= rbufsize+1! rcursor = %d";
static const char __pyx_k_getReverseComplementaryDNASequen[] = "getReverseComplementaryDNASequence";
static const char __pyx_k_sequenceStream2bit___iter___loca[] = "sequenceStream2bit.__iter__.<locals>.genexpr";
static const char __pyx_k_sequenceStreamFASTA___iter___loc[] = "sequenceStreamFASTA.__iter__.<locals>.genexpr";
static const char __pyx_k_sequenceStream_streamFullSequenc[] = "sequenceStream.streamFullSequences";
static const char __pyx_k_streamFullSequences_locals_genex[] = "streamFullSequences.<locals>.genexpr";
static const char __pyx_k_sequenceStreamGeneratorSequence_2[] = "sequenceStreamGeneratorSequence";
static const char __pyx_k_sequenceStreamGeneratorSequence_3[] = "sequenceStreamGeneratorSequence.__init__";
static const char __pyx_k_sequenceStreamGeneratorSequence_4[] = "sequenceStreamGeneratorSequence.__iter__";
static const char __pyx_k_sequenceStreamGeneratorSequence_5[] = "sequenceStreamGeneratorSequence.__str__";
static const char __pyx_k_sequenceStreamGeneratorSequence_6[] = "sequenceStreamGeneratorSequence.__repr__";
static const char __pyx_k_sequenceStream2bit___iter___loca_2[] = "sequenceStream2bit.__iter__.<locals>.<lambda>";
static PyObject *__pyx_kp_u_;
static PyObject *__pyx_kp_u_1;
static PyObject *__pyx_kp_u_2b;
static PyObject *__pyx_kp_u_2bit;
static PyObject *__pyx_kp_u_2bit_sequence_stream_s;
static PyObject *__pyx_kp_u_2f;
static PyObject *__pyx_kp_u_65;
static PyObject *__pyx_n_u_A;
static PyObject *__pyx_kp_u_Add_complements;
static PyObject *__pyx_kp_u_Add_reverse_complements;
static PyObject *__pyx_n_u_B;
static PyObject *__pyx_n_u_C;
static PyObject *__pyx_kp_u_Choice_weights_sum_up_to_more_th;
static PyObject *__pyx_n_s_DOTALL;
static PyObject *__pyx_kp_u_FASTA_file;
static PyObject *__pyx_kp_u_FASTA_file_syntax_error;
static PyObject *__pyx_kp_u_FASTA_sequence_error;
static PyObject *__pyx_kp_u_FASTA_sequence_stream_s;
static PyObject *__pyx_kp_u_From_FASTA_file;
static PyObject *__pyx_n_u_G;
static PyObject *__pyx_kp_u_Generated_sequence_Length;
static PyObject *__pyx_kp_u_Generated_set_Sequences;
static PyObject *__pyx_kp_u_Generator_sequence_stream_s;
static PyObject *__pyx_kp_u_Generator_sequence_stream_sequen;
static PyObject *__pyx_n_u_I;
static PyObject *__pyx_n_u_II;
static PyObject *__pyx_n_s_IID;
static PyObject *__pyx_kp_u_IID_Pseudocounts;
static PyObject *__pyx_n_u_IIII;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x34;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x53;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x65;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x95;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xac;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb3;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xc6;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xd4;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xfa;
static PyObject *__pyx_kp_u_Invalid_2bit_sequence_file_Heade;
static PyObject *__pyx_n_u_Labels;
static PyObject *__pyx_n_u_Length;
static PyObject *__pyx_kp_u_Length_each;
static PyObject *__pyx_n_s_MarkovChain;
static PyObject *__pyx_kp_u_Markov_Chain_Degree;
static PyObject *__pyx_kp_u_Mean_length;
static PyObject *__pyx_kp_u_Model;
static PyObject *__pyx_kp_u_Model_2;
static PyObject *__pyx_n_u_Name;
static PyObject *__pyx_n_s_Nblocks;
static PyObject *__pyx_n_u_Negative;
static PyObject *__pyx_n_u_No;
static PyObject *__pyx_kp_u_No_sequences_with_the_requested;
static PyObject *__pyx_kp_u_None;
static PyObject *__pyx_kp_u_Not_all_requested_labels_were_fo;
static PyObject *__pyx_n_s_PickleError;
static PyObject *__pyx_n_u_Positive;
static PyObject *__pyx_kp_u_Pseudocounts;
static PyObject *__pyx_kp_u_Random_sequence;
static PyObject *__pyx_kp_u_Seed;
static PyObject *__pyx_n_u_Sequence;
static PyObject *__pyx_kp_u_Sequence_label;
static PyObject *__pyx_kp_u_Sequence_list_s;
static PyObject *__pyx_kp_u_Sequence_s;
static PyObject *__pyx_kp_u_Sequence_set_statistics;
static PyObject *__pyx_kp_u_Sequences;
static PyObject *__pyx_kp_u_Sequences_d;
static PyObject *__pyx_kp_u_Source_region;
static PyObject *__pyx_kp_s_Streams_a_2bit_file_param_path;
static PyObject *__pyx_kp_s_Streams_a_FASTA_file_param_path;
static PyObject *__pyx_n_u_T;
static PyObject *__pyx_kp_u_Total_length_d_nt;
static PyObject *__pyx_kp_u_Training_set;
static PyObject *__pyx_kp_u_Tried_to_train_IID_model_that_is;
static PyObject *__pyx_kp_u_Tried_to_train_Markov_model_that;
static PyObject *__pyx_kp_u_Unrecognized_sequence_format;
static PyObject *__pyx_kp_u_WARNING_rcursor_rbufsize_1_rcurs;
static PyObject *__pyx_kp_u_Windows_Window_size;
static PyObject *__pyx_n_u_Yes;
static PyObject *__pyx_kp_u__10;
static PyObject *__pyx_kp_u__11;
static PyObject *__pyx_kp_u__12;
static PyObject *__pyx_kp_u__13;
static PyObject *__pyx_kp_u__16;
static PyObject *__pyx_n_u__17;
static PyObject *__pyx_kp_u__19;
static PyObject *__pyx_kp_u__2;
static PyObject *__pyx_kp_u__3;
static PyObject *__pyx_kp_u__4;
static PyObject *__pyx_kp_u__5;
static PyObject *__pyx_kp_u__6;
static PyObject *__pyx_kp_u__7;
static PyObject *__pyx_kp_u__8;
static PyObject *__pyx_kp_u__9;
static PyObject *__pyx_n_s_addComplements;
static PyObject *__pyx_n_s_addReverseComplements;
static PyObject *__pyx_n_s_annotation;
static PyObject *__pyx_n_s_args;
static PyObject *__pyx_n_s_blk;
static PyObject *__pyx_n_s_blkSizes;
static PyObject *__pyx_n_s_blkStarts;
static PyObject *__pyx_kp_u_bootstrap_sample_of;
static PyObject *__pyx_kp_u_bp;
static PyObject *__pyx_kp_u_bp_step;
static PyObject *__pyx_kp_u_bp_step_size;
static PyObject *__pyx_n_s_bsize;
static PyObject *__pyx_n_s_bstart;
static PyObject *__pyx_n_s_bstr;
static PyObject *__pyx_n_s_c;
static PyObject *__pyx_n_s_cbuf;
static PyObject *__pyx_n_s_choice;
static PyObject *__pyx_n_s_choices;
static PyObject *__pyx_n_u_chr;
static PyObject *__pyx_n_s_cline_in_traceback;
static PyObject *__pyx_n_s_close;
static PyObject *__pyx_n_s_common;
static PyObject *__pyx_n_s_complementaryNucleotides;
static PyObject *__pyx_n_s_cseq;
static PyObject *__pyx_n_s_cstart;
static PyObject *__pyx_n_s_cw;
static PyObject *__pyx_n_u_d;
static PyObject *__pyx_n_s_decode;
static PyObject *__pyx_n_s_degree;
static PyObject *__pyx_n_s_dict;
static PyObject *__pyx_n_s_doc;
static PyObject *__pyx_n_s_dropChr;
static PyObject *__pyx_n_s_end;
static PyObject *__pyx_n_s_endswith;
static PyObject *__pyx_n_s_ensureAllLabels;
static PyObject *__pyx_n_s_enter;
static PyObject *__pyx_n_s_enumerate;
static PyObject *__pyx_n_s_exit;
static PyObject *__pyx_n_s_f;
static PyObject *__pyx_n_s_fIn;
static PyObject *__pyx_kp_u_fa;
static PyObject *__pyx_kp_u_fa_gz;
static PyObject *__pyx_kp_u_fasta;
static PyObject *__pyx_kp_u_fasta_gz;
static PyObject *__pyx_n_s_fetch;
static PyObject *__pyx_n_s_fstream;
static PyObject *__pyx_n_s_generate;
static PyObject *__pyx_n_s_generate_locals_genexpr;
static PyObject *__pyx_n_s_genexpr;
static PyObject *__pyx_n_u_genome;
static PyObject *__pyx_n_s_getReverseComplementaryDNASequen;
static PyObject *__pyx_n_s_getSequenceWindowRegions;
static PyObject *__pyx_n_s_getstate;
static PyObject *__pyx_n_s_gnocis_sequences;
static PyObject *__pyx_kp_s_gnocis_sequences_pyx;
static PyObject *__pyx_n_s_gzip;
static PyObject *__pyx_n_s_i;
static PyObject *__pyx_n_s_import;
static PyObject *__pyx_n_s_includeCroppedEnds;
static PyObject *__pyx_n_s_init;
static PyObject *__pyx_n_s_initialSort;
static PyObject *__pyx_n_s_ioputil;
static PyObject *__pyx_n_s_isGZ;
static PyObject *__pyx_n_s_iseq;
static PyObject *__pyx_n_s_iter;
static PyObject *__pyx_n_s_kSpectrumIndex2NT;
static PyObject *__pyx_n_s_kSpectrumNT2Index;
static PyObject *__pyx_n_s_key;
static PyObject *__pyx_n_s_keys;
static PyObject *__pyx_n_s_label;
static PyObject *__pyx_n_s_labels;
static PyObject *__pyx_n_s_labels_locals_genexpr;
static PyObject *__pyx_n_s_length;
static PyObject *__pyx_n_s_line;
static PyObject *__pyx_n_s_lineSrc;
static PyObject *__pyx_n_s_loadFASTA;
static PyObject *__pyx_n_s_loadFASTAGZ;
static PyObject *__pyx_n_s_loadFASTAGZ_locals_genexpr;
static PyObject *__pyx_n_s_lower;
static PyObject *__pyx_n_s_lst;
static PyObject *__pyx_n_s_main;
static PyObject *__pyx_n_s_maskSizes;
static PyObject *__pyx_n_s_maskStarts;
static PyObject *__pyx_n_s_max;
static PyObject *__pyx_n_s_maxnt;
static PyObject *__pyx_n_s_metaclass;
static PyObject *__pyx_n_s_min;
static PyObject *__pyx_n_s_model;
static PyObject *__pyx_n_s_module;
static PyObject *__pyx_n_s_n;
static PyObject *__pyx_n_s_name;
static PyObject *__pyx_n_u_name;
static PyObject *__pyx_n_s_name_2;
static PyObject *__pyx_n_s_namebytes;
static PyObject *__pyx_n_s_namelen;
static PyObject *__pyx_n_s_nblk;
static PyObject *__pyx_n_s_nctable;
static PyObject *__pyx_n_s_negative;
static PyObject *__pyx_n_s_new;
static PyObject *__pyx_n_s_ng;
static PyObject *__pyx_n_s_nmask;
static PyObject *__pyx_n_s_nnt;
static PyObject *__pyx_n_s_nseq;
static PyObject *__pyx_kp_u_nt;
static PyObject *__pyx_kp_u_nt_max;
static PyObject *__pyx_kp_u_nt_min;
static PyObject *__pyx_n_s_nucleotides;
static PyObject *__pyx_n_s_number;
static PyObject *__pyx_n_s_offset;
static PyObject *__pyx_n_u_offset;
static PyObject *__pyx_n_s_open;
static PyObject *__pyx_n_s_path;
static PyObject *__pyx_n_s_pathName;
static PyObject *__pyx_n_s_pickle;
static PyObject *__pyx_n_s_positive;
static PyObject *__pyx_n_s_prepare;
static PyObject *__pyx_n_s_prepare_2;
static PyObject *__pyx_n_s_prepare_3;
static PyObject *__pyx_n_s_prepare_locals_genexpr;
static PyObject *__pyx_n_s_print;
static PyObject *__pyx_n_s_printStatistics_locals_genexpr;
static PyObject *__pyx_n_s_pseudoCounts;
static PyObject *__pyx_n_s_pyx_PickleError;
static PyObject *__pyx_n_s_pyx_checksum;
static PyObject *__pyx_n_s_pyx_result;
static PyObject *__pyx_n_s_pyx_state;
static PyObject *__pyx_n_s_pyx_type;
static PyObject *__pyx_n_s_pyx_unpickle_IID;
static PyObject *__pyx_n_s_pyx_unpickle_MarkovChain;
static PyObject *__pyx_n_s_pyx_unpickle_sequence;
static PyObject *__pyx_n_s_pyx_unpickle_sequenceGenerator;
static PyObject *__pyx_n_s_pyx_unpickle_sequenceLabel;
static PyObject *__pyx_n_s_pyx_unpickle_sequenceStream;
static PyObject *__pyx_n_s_pyx_unpickle_sequences;
static PyObject *__pyx_n_s_pyx_unpickle_stream2bitNBlock;
static PyObject *__pyx_n_s_pyx_unpickle_stream2bitSeq;
static PyObject *__pyx_n_s_pyx_unpickle_streamFASTASeq;
static PyObject *__pyx_n_s_pyx_vtable;
static PyObject *__pyx_n_s_qualname;
static PyObject *__pyx_n_s_r;
static PyObject *__pyx_n_u_r;
static PyObject *__pyx_n_s_randint;
static PyObject *__pyx_n_s_random;
static PyObject *__pyx_n_s_range;
static PyObject *__pyx_n_s_ratio;
static PyObject *__pyx_n_u_rb;
static PyObject *__pyx_n_s_re;
static PyObject *__pyx_n_s_read;
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_replace;
static PyObject *__pyx_n_s_repr;
static PyObject *__pyx_n_s_repr_html;
static PyObject *__pyx_n_s_reserved;
static PyObject *__pyx_n_s_restrictToSequences;
static PyObject *__pyx_n_s_rset;
static PyObject *__pyx_kp_u_s;
static PyObject *__pyx_n_s_seed;
static PyObject *__pyx_kp_u_seed_2;
static PyObject *__pyx_n_s_seek;
static PyObject *__pyx_n_s_self;
static PyObject *__pyx_n_s_send;
static PyObject *__pyx_n_s_seq;
static PyObject *__pyx_n_s_seqInfo;
static PyObject *__pyx_n_s_seqLengths;
static PyObject *__pyx_n_s_seqStream;
static PyObject *__pyx_kp_u_seq_2;
static PyObject *__pyx_n_s_seqs;
static PyObject *__pyx_n_s_sequence;
static PyObject *__pyx_n_s_sequenceGenerator;
static PyObject *__pyx_n_s_sequenceLabel;
static PyObject *__pyx_n_s_sequenceLengths;
static PyObject *__pyx_n_s_sequenceLengths_locals_genexpr;
static PyObject *__pyx_n_s_sequenceStream;
static PyObject *__pyx_n_s_sequenceStream2bit;
static PyObject *__pyx_n_s_latin1_sequenceStream2bit;
static PyObject *__pyx_n_s_sequenceStream2bit___init;
static PyObject *__pyx_n_s_sequenceStream2bit___iter;
static PyObject *__pyx_n_s_sequenceStream2bit___iter___loca;
static PyObject *__pyx_n_s_sequenceStream2bit___iter___loca_2;
static PyObject *__pyx_n_s_sequenceStream2bit___repr;
static PyObject *__pyx_n_s_sequenceStream2bit___str;
static PyObject *__pyx_n_s_sequenceStreamFASTA;
static PyObject *__pyx_n_s_latin1_sequenceStreamFASTA;
static PyObject *__pyx_n_s_sequenceStreamFASTA___init;
static PyObject *__pyx_n_s_sequenceStreamFASTA___iter;
static PyObject *__pyx_n_s_sequenceStreamFASTA___iter___loc;
static PyObject *__pyx_n_s_sequenceStreamFASTA___repr;
static PyObject *__pyx_n_s_sequenceStreamFASTA___str;
static PyObject *__pyx_n_s_sequenceStreamGenerator;
static PyObject *__pyx_n_s_latin1_sequenceStreamGenerator;
static PyObject *__pyx_n_s_sequenceStreamGeneratorSequence;
static PyObject *__pyx_n_s_sequenceStreamGeneratorSequence_2;
static PyObject *__pyx_n_s_latin1_sequenceStreamGeneratorSequence_2;
static PyObject *__pyx_n_s_sequenceStreamGeneratorSequence_3;
static PyObject *__pyx_n_s_sequenceStreamGeneratorSequence_4;
static PyObject *__pyx_n_s_sequenceStreamGeneratorSequence_5;
static PyObject *__pyx_n_s_sequenceStreamGeneratorSequence_6;
static PyObject *__pyx_n_s_sequenceStreamGenerator___init;
static PyObject *__pyx_n_s_sequenceStreamGenerator___iter;
static PyObject *__pyx_n_s_sequenceStreamGenerator___repr;
static PyObject *__pyx_n_s_sequenceStreamGenerator___str;
static PyObject *__pyx_n_s_sequenceStream_fetch;
static PyObject *__pyx_n_s_sequenceStream_streamFullSequenc;
static PyObject *__pyx_n_s_sequences;
static PyObject *__pyx_n_s_setstate;
static PyObject *__pyx_n_s_setstate_cython;
static PyObject *__pyx_n_s_shuffle;
static PyObject *__pyx_n_s_sig;
static PyObject *__pyx_n_s_size;
static PyObject *__pyx_n_s_sname;
static PyObject *__pyx_n_s_sorted;
static PyObject *__pyx_n_s_sourceRegion;
static PyObject *__pyx_n_s_spacePrune;
static PyObject *__pyx_n_s_split;
static PyObject *__pyx_kp_u_split_A;
static PyObject *__pyx_kp_u_split_B;
static PyObject *__pyx_n_s_src;
static PyObject *__pyx_n_s_start;
static PyObject *__pyx_n_s_startswith;
static PyObject *__pyx_n_s_step;
static PyObject *__pyx_n_s_str;
static PyObject *__pyx_n_s_strand;
static PyObject *__pyx_n_s_stream;
static PyObject *__pyx_n_s_stream2bitNBlock;
static PyObject *__pyx_n_s_stream2bitSeq;
static PyObject *__pyx_n_s_stream2bitSeq_stream;
static PyObject *__pyx_n_s_streamFASTASeq;
static PyObject *__pyx_n_s_streamFASTASeq_stream;
static PyObject *__pyx_n_s_streamFullSequences;
static PyObject *__pyx_n_s_streamFullSequences_locals_genex;
static PyObject *__pyx_n_s_streamSequenceWindows;
static PyObject *__pyx_kp_s_stringsource;
static PyObject *__pyx_n_s_strip;
static PyObject *__pyx_n_s_struct;
static PyObject *__pyx_n_s_sub;
static PyObject *__pyx_n_s_sum;
static PyObject *__pyx_n_s_table;
static PyObject *__pyx_n_s_table_locals_genexpr;
static PyObject *__pyx_n_s_test;
static PyObject *__pyx_n_s_throw;
static PyObject *__pyx_n_s_trainOnSequenceStream;
static PyObject *__pyx_n_s_trainOnSequences;
static PyObject *__pyx_n_s_trainingSequences;
static PyObject *__pyx_n_s_unpack;
static PyObject *__pyx_n_s_update;
static PyObject *__pyx_kp_u_utf_8;
static PyObject *__pyx_n_s_value;
static PyObject *__pyx_kp_u_value_2;
static PyObject *__pyx_n_s_ver;
static PyObject *__pyx_n_s_w;
static PyObject *__pyx_n_u_w;
static PyObject *__pyx_n_s_wantBlockSize;
static PyObject *__pyx_n_s_wantN;
static PyObject *__pyx_n_s_wantSize;
static PyObject *__pyx_n_s_weightedRandomChoice;
static PyObject *__pyx_n_s_windowSize;
static PyObject *__pyx_n_s_windowStep;
static PyObject *__pyx_kp_u_windows;
static PyObject *__pyx_kp_u_windows_size;
static PyObject *__pyx_n_s_withLabel_locals_genexpr;
static PyObject *__pyx_n_s_write;
static PyObject *__pyx_n_s_zip;
static int __pyx_pf_6gnocis_9sequences_13sequenceLabel___init__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_2__str__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_4__eq__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v_o); /* proto */
static Py_hash_t __pyx_pf_6gnocis_9sequences_13sequenceLabel_6__hash__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_8__repr__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_4name___get__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_13sequenceLabel_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_13sequenceLabel_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_5value___get__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_13sequenceLabel_5value_2__set__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_10__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_12__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence___init__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_seq, PyObject *__pyx_v_path, PyObject *__pyx_v_sourceRegion, PyObject *__pyx_v_annotation, PyObject *__pyx_v_labels); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_2__eq__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static Py_hash_t __pyx_pf_6gnocis_9sequences_8sequence_4__hash__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static Py_ssize_t __pyx_pf_6gnocis_9sequences_8sequence_6__len__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_8__str__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_10__repr__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_12label(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_label); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_14windows(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, int __pyx_v_size, int __pyx_v_step, bool __pyx_v_includeCroppedEnds); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_4name___get__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_3seq___get__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_3seq_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_3seq_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_4path___get__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_4path_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_4path_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_10annotation___get__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_10annotation_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_10annotation_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_12sourceRegion___get__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_12sourceRegion_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_12sourceRegion_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_6labels___get__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_6labels_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_8sequence_6labels_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_16__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_18__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_6gnocis_9sequences_9sequences___init__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_seq); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_2__iter__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_4__getitem__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
static Py_ssize_t __pyx_pf_6gnocis_9sequences_9sequences_6__len__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_8__str__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_5table_8genexpr1_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_10table(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_12_repr_html_(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_14__repr__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_16__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_18split(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_20randomSplit(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_ratio); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_22sample(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_24rename(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_newname); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_26windows(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_step); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_28windowRegions(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_step); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_30sourceRegions(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_32label(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_label); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_9withLabel_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_34withLabel(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_labels, PyObject *__pyx_v_ensureAllLabels); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_6labels_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_36labels(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_38saveFASTA(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_path); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_40sequenceLengths(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_3genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_6genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_9genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_42printStatistics(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_4name___get__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_9sequences_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_9sequences_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_9sequences___get__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_9sequences_9sequences_2__set__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_9sequences_9sequences_4__del__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_44__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_46__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_loadFASTA(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11loadFASTAGZ_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_2loadFASTAGZ(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path); /* proto */
static int __pyx_pf_6gnocis_9sequences_14sequenceStream___init__(CYTHON_UNUSED struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_2fetch(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_n, PyObject *__pyx_v_maxnt); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_19streamFullSequences_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_5streamFullSequences(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_15sequenceLengths_9genexpr18_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_8sequenceLengths(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_10windows(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_step); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_12windowRegions(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_step); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_14__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_16__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq___init__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_fstream, PyObject *__pyx_v_wantBlockSize); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_2__iter__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_4__str__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_6__repr__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_8stream(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_4name___get__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_8lastLine___get__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_8lastLine_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_8lastLine_4__del__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize___get__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted___get__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_7fstream___get__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_7fstream_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_7fstream_4__del__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_11__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_13__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences, PyObject *__pyx_v_isGZ); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_8__iter___genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_5__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_7__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_4streamFASTA(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_6streamFASTAGZ(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences); /* proto */
static int __pyx_pf_6gnocis_9sequences_16stream2bitNBlock___init__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_size); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_16stream2bitNBlock_5start___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_5start_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4size___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4size_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_16stream2bitNBlock_2__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq___init__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_fstream, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_Nblocks, PyObject *__pyx_v_nnt); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_2stream(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_5__iter__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_7__str__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_9__repr__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_4name___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_7fstream___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7fstream_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7fstream_4__del__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_3nnt___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_3nnt_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_7Nblocks___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7Nblocks_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7Nblocks_4__del__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_11__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_13__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___3genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___6genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___9genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_lambda_funcdef_lambda15(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_5__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_7__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_8stream2bit(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_10getSequenceStreamFromPath(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_12streamSequenceWindows(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_src, int __pyx_v_windowSize, int __pyx_v_windowStep); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_15getSequenceWindowRegions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_src, int __pyx_v_windowSize, int __pyx_v_windowStep); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_model, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_wantSize, PyObject *__pyx_v_number, PyObject *__pyx_v_seed); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_4__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_8stream(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_model, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_wantN, PyObject *__pyx_v_wantSize); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator_5__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator_7__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_17weightedRandomChoice(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_choices); /* proto */
static int __pyx_pf_6gnocis_9sequences_17sequenceGenerator___init__(CYTHON_UNUSED struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_2generateSet(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_length); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_4generateStream(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_length, PyObject *__pyx_v_wantBlockSize); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_6generateFASTA(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self, PyObject *__pyx_v_path, int __pyx_v_n, int __pyx_v_length); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_8__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_10__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain___init__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_trainingSequences, PyObject *__pyx_v_degree, PyObject *__pyx_v_pseudoCounts, PyObject *__pyx_v_addReverseComplements); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_2__str__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_4__repr__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8_prepare_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8_prepare_3genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_6_prepare(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8_trainOnSequences(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_trainingSequences); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_10_trainOnSequenceStream(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_trainingSequences); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8generate_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_12generate(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, int __pyx_v_length); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_6degree___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_6degree_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_12pseudoCounts___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_12pseudoCounts_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_10nGenerated___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_10nGenerated_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_21addReverseComplements___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_21addReverseComplements_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8prepared___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_8prepared_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_17trainingSequences___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_17trainingSequences_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_17trainingSequences_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8spectrum___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_8spectrum_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_8spectrum_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_19initialDistribution___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_19initialDistribution_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_19initialDistribution_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_12probspectrum___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_12probspectrum_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_12probspectrum_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_18comparableSpectrum___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_14__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_16__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID___init__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_trainingSequences, PyObject *__pyx_v_pseudoCounts, PyObject *__pyx_v_addComplements); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_2__str__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_4__repr__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_6_trainOnSequences(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_trainingSequences); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8_trainOnSequenceStream(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_trainingSequences); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8_prepare_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_10_prepare(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8generate_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_12generate(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_length); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_12pseudoCounts___get__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_12pseudoCounts_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_10nGenerated___get__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_10nGenerated_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_14addComplements___get__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_14addComplements_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8prepared___get__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_8prepared_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_17trainingSequences___get__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_17trainingSequences_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_17trainingSequences_4__del__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8spectrum___get__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_8spectrum_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_8spectrum_4__del__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_14ntDistribution___get__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_14ntDistribution_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6gnocis_9sequences_3IID_14ntDistribution_4__del__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_14__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_3IID_16__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_19__pyx_unpickle_sequenceLabel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_21__pyx_unpickle_sequence(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_23__pyx_unpickle_sequences(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_25__pyx_unpickle_sequenceStream(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_27__pyx_unpickle_streamFASTASeq(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_29__pyx_unpickle_stream2bitNBlock(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_31__pyx_unpickle_stream2bitSeq(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_33__pyx_unpickle_sequenceGenerator(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_35__pyx_unpickle_MarkovChain(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6gnocis_9sequences_37__pyx_unpickle_IID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_tp_new_6gnocis_9sequences_sequenceLabel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_sequence(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_sequences(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_sequenceStream(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_sequenceGenerator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_MarkovChain(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_IID(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_streamFASTASeq(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_stream2bitNBlock(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences_stream2bitSeq(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct__table(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_1_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_2_withLabel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_3_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_4_labels(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_5_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_6_printStatistics(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_7_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_8_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_9_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_10_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_12_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_13_fetch(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_15_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_17_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_18_stream(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_19___iter__(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_20_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_21_stream(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_22___iter__(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_23_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_24_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_25_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_26_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_28_stream(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_29___iter__(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_30__prepare(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_31_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_32_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_33_generate(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_34_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_35__prepare(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_36_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_37_generate(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_38_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_keys = {0, &__pyx_n_s_keys, 0, 0, 0};
static __Pyx_CachedCFunction __pyx_umethod_PyUnicode_Type_strip = {0, &__pyx_n_s_strip, 0, 0, 0};
static PyObject *__pyx_float_0_0;
static PyObject *__pyx_float_0_5;
static PyObject *__pyx_float_1_0;
static PyObject *__pyx_float_neg_1_0;
static PyObject *__pyx_int_0;
static PyObject *__pyx_int_1;
static PyObject *__pyx_int_2;
static PyObject *__pyx_int_3;
static PyObject *__pyx_int_4;
static PyObject *__pyx_int_6;
static PyObject *__pyx_int_8;
static PyObject *__pyx_int_16;
static PyObject *__pyx_int_5000;
static PyObject *__pyx_int_54760534;
static PyObject *__pyx_int_87241720;
static PyObject *__pyx_int_106341190;
static PyObject *__pyx_int_156819973;
static PyObject *__pyx_int_180500104;
static PyObject *__pyx_int_188562974;
static PyObject *__pyx_int_208533218;
static PyObject *__pyx_int_222419149;
static PyObject *__pyx_int_262643973;
static PyObject *__pyx_int_4294967295;
static PyObject *__pyx_int_neg_1;
static PyObject *__pyx_slice__21;
static PyObject *__pyx_tuple__14;
static PyObject *__pyx_tuple__15;
static PyObject *__pyx_tuple__18;
static PyObject *__pyx_tuple__20;
static PyObject *__pyx_tuple__22;
static PyObject *__pyx_tuple__24;
static PyObject *__pyx_tuple__26;
static PyObject *__pyx_tuple__27;
static PyObject *__pyx_tuple__31;
static PyObject *__pyx_tuple__32;
static PyObject *__pyx_tuple__33;
static PyObject *__pyx_tuple__34;
static PyObject *__pyx_tuple__35;
static PyObject *__pyx_tuple__36;
static PyObject *__pyx_tuple__37;
static PyObject *__pyx_tuple__38;
static PyObject *__pyx_tuple__40;
static PyObject *__pyx_tuple__42;
static PyObject *__pyx_tuple__44;
static PyObject *__pyx_tuple__45;
static PyObject *__pyx_tuple__46;
static PyObject *__pyx_tuple__48;
static PyObject *__pyx_tuple__50;
static PyObject *__pyx_tuple__52;
static PyObject *__pyx_tuple__53;
static PyObject *__pyx_tuple__55;
static PyObject *__pyx_tuple__57;
static PyObject *__pyx_tuple__58;
static PyObject *__pyx_tuple__60;
static PyObject *__pyx_tuple__62;
static PyObject *__pyx_tuple__64;
static PyObject *__pyx_tuple__66;
static PyObject *__pyx_tuple__68;
static PyObject *__pyx_tuple__69;
static PyObject *__pyx_tuple__71;
static PyObject *__pyx_tuple__72;
static PyObject *__pyx_tuple__74;
static PyObject *__pyx_tuple__76;
static PyObject *__pyx_tuple__78;
static PyObject *__pyx_tuple__80;
static PyObject *__pyx_tuple__82;
static PyObject *__pyx_tuple__84;
static PyObject *__pyx_tuple__86;
static PyObject *__pyx_tuple__88;
static PyObject *__pyx_tuple__90;
static PyObject *__pyx_tuple__92;
static PyObject *__pyx_tuple__94;
static PyObject *__pyx_tuple__96;
static PyObject *__pyx_codeobj__23;
static PyObject *__pyx_codeobj__25;
static PyObject *__pyx_codeobj__28;
static PyObject *__pyx_codeobj__29;
static PyObject *__pyx_codeobj__30;
static PyObject *__pyx_codeobj__39;
static PyObject *__pyx_codeobj__41;
static PyObject *__pyx_codeobj__43;
static PyObject *__pyx_codeobj__47;
static PyObject *__pyx_codeobj__49;
static PyObject *__pyx_codeobj__51;
static PyObject *__pyx_codeobj__54;
static PyObject *__pyx_codeobj__56;
static PyObject *__pyx_codeobj__59;
static PyObject *__pyx_codeobj__61;
static PyObject *__pyx_codeobj__63;
static PyObject *__pyx_codeobj__65;
static PyObject *__pyx_codeobj__67;
static PyObject *__pyx_codeobj__70;
static PyObject *__pyx_codeobj__73;
static PyObject *__pyx_codeobj__75;
static PyObject *__pyx_codeobj__77;
static PyObject *__pyx_codeobj__79;
static PyObject *__pyx_codeobj__81;
static PyObject *__pyx_codeobj__83;
static PyObject *__pyx_codeobj__85;
static PyObject *__pyx_codeobj__87;
static PyObject *__pyx_codeobj__89;
static PyObject *__pyx_codeobj__91;
static PyObject *__pyx_codeobj__93;
static PyObject *__pyx_codeobj__95;
static PyObject *__pyx_codeobj__97;
/* Late includes */

/* "gnocis/sequences.pyx":39
 * 	"""
 * 
 * 	def __init__(self, name, value):             # <<<<<<<<<<<<<<
 * 		self.name, self.value = name, value
 * 
 */

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13sequenceLabel_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13sequenceLabel_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_value = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 39, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 39, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_name = values[0];
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 39, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel___init__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self), __pyx_v_name, __pyx_v_value);

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

static int __pyx_pf_6gnocis_9sequences_13sequenceLabel___init__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  float __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "gnocis/sequences.pyx":40
 * 
 * 	def __init__(self, name, value):
 * 		self.name, self.value = name, value             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
  if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 40, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_name;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_self->value = __pyx_t_2;

  /* "gnocis/sequences.pyx":39
 * 	"""
 * 
 * 	def __init__(self, name, value):             # <<<<<<<<<<<<<<
 * 		self.name, self.value = name, value
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":42
 * 		self.name, self.value = name, value
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Sequence label<%s; value = %s>'%(self.name, str(self.value))
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_3__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_3__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_2__str__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_2__str__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__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("__str__", 0);

  /* "gnocis/sequences.pyx":43
 * 
 * 	def __str__(self):
 * 		return 'Sequence label<%s; value = %s>'%(self.name, str(self.value))             # <<<<<<<<<<<<<<
 * 
 * 	def __eq__(self, o):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_Sequence_label);
  __pyx_t_2 += 15;
  __Pyx_GIVEREF(__pyx_kp_u_Sequence_label);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Sequence_label);
  __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_self->name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __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, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_value_2);
  __pyx_t_2 += 10;
  __Pyx_GIVEREF(__pyx_kp_u_value_2);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_value_2);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 43, __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, 3, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u_);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_);
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":42
 * 		self.name, self.value = name, value
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Sequence label<%s; value = %s>'%(self.name, str(self.value))
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":45
 * 		return 'Sequence label<%s; value = %s>'%(self.name, str(self.value))
 * 
 * 	def __eq__(self, o):             # <<<<<<<<<<<<<<
 * 		return self.value == o.value
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_o); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_o) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_4__eq__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self), ((PyObject *)__pyx_v_o));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_4__eq__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v_o) {
  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("__eq__", 0);

  /* "gnocis/sequences.pyx":46
 * 
 * 	def __eq__(self, o):
 * 		return self.value == o.value             # <<<<<<<<<<<<<<
 * 
 * 	def __hash__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":45
 * 		return 'Sequence label<%s; value = %s>'%(self.name, str(self.value))
 * 
 * 	def __eq__(self, o):             # <<<<<<<<<<<<<<
 * 		return self.value == o.value
 * 
 */

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

/* "gnocis/sequences.pyx":48
 * 		return self.value == o.value
 * 
 * 	def __hash__(self):             # <<<<<<<<<<<<<<
 * 		return hash(self.value)
 * 
 */

/* Python wrapper */
static Py_hash_t __pyx_pw_6gnocis_9sequences_13sequenceLabel_7__hash__(PyObject *__pyx_v_self); /*proto*/
static Py_hash_t __pyx_pw_6gnocis_9sequences_13sequenceLabel_7__hash__(PyObject *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_6__hash__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self));

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

static Py_hash_t __pyx_pf_6gnocis_9sequences_13sequenceLabel_6__hash__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__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);

  /* "gnocis/sequences.pyx":49
 * 
 * 	def __hash__(self):
 * 		return hash(self.value)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":48
 * 		return self.value == o.value
 * 
 * 	def __hash__(self):             # <<<<<<<<<<<<<<
 * 		return hash(self.value)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.__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;
}

/* "gnocis/sequences.pyx":51
 * 		return hash(self.value)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_9__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_9__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_8__repr__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_8__repr__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "gnocis/sequences.pyx":52
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * positive = sequenceLabel('Positive', 1.0)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __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;

  /* "gnocis/sequences.pyx":51
 * 		return hash(self.value)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":19
 * cdef class sequenceLabel:
 * 
 * 	cdef public str name             # <<<<<<<<<<<<<<
 * 	cdef public float value
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_4name___get__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_4name_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_13sequenceLabel_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 19, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_4name_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_13sequenceLabel_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)Py_None);

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

/* "gnocis/sequences.pxd":20
 * 
 * 	cdef public str name
 * 	cdef public float value             # <<<<<<<<<<<<<<
 * 
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_5value_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_5value___get__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_5value___get__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__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 = PyFloat_FromDouble(__pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 20, __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("gnocis.sequences.sequenceLabel.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13sequenceLabel_5value_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13sequenceLabel_5value_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_5value_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_13sequenceLabel_5value_2__set__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  float __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 20, __pyx_L1_error)
  __pyx_v_self->value = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.value.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_10__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_10__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.name, self.value)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.name, self.value)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v__dict = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":7
 *     state = (self.name, self.value)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict);
    __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.name is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.name, self.value)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.name is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, None), state
 */
  /*else*/ {
    __pyx_t_4 = (__pyx_v_self->name != ((PyObject*)Py_None));
    __pyx_v_use_setstate = __pyx_t_4;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.name is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, None), state
 *     else:
 */
  __pyx_t_4 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_4) {

    /* "(tree fragment)":13
 *         use_setstate = self.name is not None
 *     if use_setstate:
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_sequenceLabel); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_262643973);
    __Pyx_GIVEREF(__pyx_int_262643973);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_262643973);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None);
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
    __pyx_t_1 = 0;
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.name is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, None), state
 *     else:
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequenceLabel__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_sequenceLabel); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_262643973);
    __Pyx_GIVEREF(__pyx_int_262643973);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_262643973);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __pyx_t_5 = 0;
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequenceLabel__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13sequenceLabel_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13sequenceLabel_12__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13sequenceLabel_12__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequenceLabel__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceLabel__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequenceLabel, (type(self), 0xfa7a105, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequenceLabel__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequenceLabel.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":83
 * 	#__slots__ = 'name', 'seq', 'path'
 * 
 * 	def __init__(self, name, seq, path = '', sourceRegion = None, annotation = None, labels = None):             # <<<<<<<<<<<<<<
 * 		self.name, self.seq, self.path = name, seq, path
 * 		self.sourceRegion = sourceRegion
 */

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_seq = 0;
  PyObject *__pyx_v_path = 0;
  PyObject *__pyx_v_sourceRegion = 0;
  PyObject *__pyx_v_annotation = 0;
  PyObject *__pyx_v_labels = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_seq,&__pyx_n_s_path,&__pyx_n_s_sourceRegion,&__pyx_n_s_annotation,&__pyx_n_s_labels,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[2] = ((PyObject *)__pyx_kp_u__2);
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_seq)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, 1); __PYX_ERR(0, 83, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sourceRegion);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_annotation);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_labels);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 83, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_name = values[0];
    __pyx_v_seq = values[1];
    __pyx_v_path = values[2];
    __pyx_v_sourceRegion = values[3];
    __pyx_v_annotation = values[4];
    __pyx_v_labels = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 83, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequence.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence___init__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), __pyx_v_name, __pyx_v_seq, __pyx_v_path, __pyx_v_sourceRegion, __pyx_v_annotation, __pyx_v_labels);

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

static int __pyx_pf_6gnocis_9sequences_8sequence___init__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_seq, PyObject *__pyx_v_path, PyObject *__pyx_v_sourceRegion, PyObject *__pyx_v_annotation, PyObject *__pyx_v_labels) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  Py_UCS4 __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "gnocis/sequences.pyx":84
 * 
 * 	def __init__(self, name, seq, path = '', sourceRegion = None, annotation = None, labels = None):
 * 		self.name, self.seq, self.path = name, seq, path             # <<<<<<<<<<<<<<
 * 		self.sourceRegion = sourceRegion
 * 		self.annotation = annotation
 */
  if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 84, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_name;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_seq))||((__pyx_v_seq) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_seq)->tp_name), 0))) __PYX_ERR(0, 84, __pyx_L1_error)
  __pyx_t_2 = __pyx_v_seq;
  __Pyx_INCREF(__pyx_t_2);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_path))||((__pyx_v_path) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_path)->tp_name), 0))) __PYX_ERR(0, 84, __pyx_L1_error)
  __pyx_t_3 = __pyx_v_path;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->seq);
  __Pyx_DECREF(__pyx_v_self->seq);
  __pyx_v_self->seq = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->path);
  __Pyx_DECREF(__pyx_v_self->path);
  __pyx_v_self->path = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":85
 * 	def __init__(self, name, seq, path = '', sourceRegion = None, annotation = None, labels = None):
 * 		self.name, self.seq, self.path = name, seq, path
 * 		self.sourceRegion = sourceRegion             # <<<<<<<<<<<<<<
 * 		self.annotation = annotation
 * 		self.labels = set() if labels is None else labels
 */
  if (!(likely(((__pyx_v_sourceRegion) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_sourceRegion, __pyx_ptype_6gnocis_7regions_region))))) __PYX_ERR(0, 85, __pyx_L1_error)
  __pyx_t_3 = __pyx_v_sourceRegion;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->sourceRegion);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->sourceRegion));
  __pyx_v_self->sourceRegion = ((struct __pyx_obj_6gnocis_7regions_region *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":86
 * 		self.name, self.seq, self.path = name, seq, path
 * 		self.sourceRegion = sourceRegion
 * 		self.annotation = annotation             # <<<<<<<<<<<<<<
 * 		self.labels = set() if labels is None else labels
 * 		if name == None and sourceRegion != None:
 */
  if (!(likely(PyUnicode_CheckExact(__pyx_v_annotation))||((__pyx_v_annotation) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_annotation)->tp_name), 0))) __PYX_ERR(0, 86, __pyx_L1_error)
  __pyx_t_3 = __pyx_v_annotation;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->annotation);
  __Pyx_DECREF(__pyx_v_self->annotation);
  __pyx_v_self->annotation = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":87
 * 		self.sourceRegion = sourceRegion
 * 		self.annotation = annotation
 * 		self.labels = set() if labels is None else labels             # <<<<<<<<<<<<<<
 * 		if name == None and sourceRegion != None:
 * 			self.name = '%s:%d..%d (%s)'%(sourceRegion.seq, sourceRegion.start, sourceRegion.end, '+' if sourceRegion.strand else '-')
 */
  __pyx_t_4 = (__pyx_v_labels == Py_None);
  if ((__pyx_t_4 != 0)) {
    __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    if (!(likely(PySet_CheckExact(__pyx_v_labels))||((__pyx_v_labels) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_labels)->tp_name), 0))) __PYX_ERR(0, 87, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_labels);
    __pyx_t_3 = __pyx_v_labels;
  }
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->labels);
  __Pyx_DECREF(__pyx_v_self->labels);
  __pyx_v_self->labels = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":88
 * 		self.annotation = annotation
 * 		self.labels = set() if labels is None else labels
 * 		if name == None and sourceRegion != None:             # <<<<<<<<<<<<<<
 * 			self.name = '%s:%d..%d (%s)'%(sourceRegion.seq, sourceRegion.start, sourceRegion.end, '+' if sourceRegion.strand else '-')
 * 
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_name, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_sourceRegion, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_4) {

    /* "gnocis/sequences.pyx":89
 * 		self.labels = set() if labels is None else labels
 * 		if name == None and sourceRegion != None:
 * 			self.name = '%s:%d..%d (%s)'%(sourceRegion.seq, sourceRegion.start, sourceRegion.end, '+' if sourceRegion.strand else '-')             # <<<<<<<<<<<<<<
 * 
 * 	def __eq__(self, other):
 */
    __pyx_t_3 = PyTuple_New(8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = 0;
    __pyx_t_7 = 127;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sourceRegion, __pyx_n_s_seq); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_2), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u__3);
    __pyx_t_6 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__3);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sourceRegion, __pyx_n_s_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_1), __pyx_n_u_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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_3, 2, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u__4);
    __pyx_t_6 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__4);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_kp_u__4);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sourceRegion, __pyx_n_s_end); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_2), __pyx_n_u_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u__5);
    __pyx_t_6 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__5);
    PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_kp_u__5);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sourceRegion, __pyx_n_s_strand); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_4) {
      __Pyx_INCREF(__pyx_kp_u__6);
      __pyx_t_1 = __pyx_kp_u__6;
    } else {
      __Pyx_INCREF(__pyx_kp_u__7);
      __pyx_t_1 = __pyx_kp_u__7;
    }
    __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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_3, 6, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u__8);
    __pyx_t_6 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__8);
    PyTuple_SET_ITEM(__pyx_t_3, 7, __pyx_kp_u__8);
    __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 8, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->name);
    __Pyx_DECREF(__pyx_v_self->name);
    __pyx_v_self->name = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":88
 * 		self.annotation = annotation
 * 		self.labels = set() if labels is None else labels
 * 		if name == None and sourceRegion != None:             # <<<<<<<<<<<<<<
 * 			self.name = '%s:%d..%d (%s)'%(sourceRegion.seq, sourceRegion.start, sourceRegion.end, '+' if sourceRegion.strand else '-')
 * 
 */
  }

  /* "gnocis/sequences.pyx":83
 * 	#__slots__ = 'name', 'seq', 'path'
 * 
 * 	def __init__(self, name, seq, path = '', sourceRegion = None, annotation = None, labels = None):             # <<<<<<<<<<<<<<
 * 		self.name, self.seq, self.path = name, seq, path
 * 		self.sourceRegion = sourceRegion
 */

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

/* "gnocis/sequences.pyx":91
 * 			self.name = '%s:%d..%d (%s)'%(sourceRegion.seq, sourceRegion.start, sourceRegion.end, '+' if sourceRegion.strand else '-')
 * 
 * 	def __eq__(self, other):             # <<<<<<<<<<<<<<
 * 		if other is None or not isinstance(other, sequence): return False
 * 		return self.seq == other.seq
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_2__eq__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_2__eq__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_other) {
  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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "gnocis/sequences.pyx":92
 * 
 * 	def __eq__(self, other):
 * 		if other is None or not isinstance(other, sequence): return False             # <<<<<<<<<<<<<<
 * 		return self.seq == other.seq
 * 
 */
  __pyx_t_2 = (__pyx_v_other == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6gnocis_9sequences_sequence); 
  __pyx_t_2 = ((!(__pyx_t_3 != 0)) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
  }

  /* "gnocis/sequences.pyx":93
 * 	def __eq__(self, other):
 * 		if other is None or not isinstance(other, sequence): return False
 * 		return self.seq == other.seq             # <<<<<<<<<<<<<<
 * 
 * 	def __hash__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_seq); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_self->seq, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":91
 * 			self.name = '%s:%d..%d (%s)'%(sourceRegion.seq, sourceRegion.start, sourceRegion.end, '+' if sourceRegion.strand else '-')
 * 
 * 	def __eq__(self, other):             # <<<<<<<<<<<<<<
 * 		if other is None or not isinstance(other, sequence): return False
 * 		return self.seq == other.seq
 */

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

/* "gnocis/sequences.pyx":95
 * 		return self.seq == other.seq
 * 
 * 	def __hash__(self):             # <<<<<<<<<<<<<<
 * 		return hash(self.seq)
 * 
 */

/* Python wrapper */
static Py_hash_t __pyx_pw_6gnocis_9sequences_8sequence_5__hash__(PyObject *__pyx_v_self); /*proto*/
static Py_hash_t __pyx_pw_6gnocis_9sequences_8sequence_5__hash__(PyObject *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_4__hash__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static Py_hash_t __pyx_pf_6gnocis_9sequences_8sequence_4__hash__(struct __pyx_obj_6gnocis_9sequences_sequence *__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);

  /* "gnocis/sequences.pyx":96
 * 
 * 	def __hash__(self):
 * 		return hash(self.seq)             # <<<<<<<<<<<<<<
 * 
 * 	def __len__(self):
 */
  __pyx_t_1 = __pyx_v_self->seq;
  __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, 96, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":95
 * 		return self.seq == other.seq
 * 
 * 	def __hash__(self):             # <<<<<<<<<<<<<<
 * 		return hash(self.seq)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequence.__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;
}

/* "gnocis/sequences.pyx":98
 * 		return hash(self.seq)
 * 
 * 	def __len__(self):             # <<<<<<<<<<<<<<
 * 		return len(self.seq)
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6gnocis_9sequences_8sequence_7__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6gnocis_9sequences_8sequence_7__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_6__len__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_6gnocis_9sequences_8sequence_6__len__(struct __pyx_obj_6gnocis_9sequences_sequence *__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);

  /* "gnocis/sequences.pyx":99
 * 
 * 	def __len__(self):
 * 		return len(self.seq)             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
  __pyx_t_1 = __pyx_v_self->seq;
  __Pyx_INCREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 99, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":98
 * 		return hash(self.seq)
 * 
 * 	def __len__(self):             # <<<<<<<<<<<<<<
 * 		return len(self.seq)
 * 
 */

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

/* "gnocis/sequences.pyx":101
 * 		return len(self.seq)
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Sequence<%s>'%(self.name + (' (%s)'%self.annotation if self.annotation != None else ''))
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_9__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_9__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_8__str__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_8__str__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__str__", 0);

  /* "gnocis/sequences.pyx":102
 * 
 * 	def __str__(self):
 * 		return 'Sequence<%s>'%(self.name + (' (%s)'%self.annotation if self.annotation != None else ''))             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->annotation, Py_None, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 102, __pyx_L1_error)
  if (__pyx_t_2) {
    __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_s, __pyx_v_self->annotation); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(__pyx_kp_u__2);
    __pyx_t_1 = __pyx_kp_u__2;
  }
  __pyx_t_3 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_self->name, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_Sequence_s, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":101
 * 		return len(self.seq)
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Sequence<%s>'%(self.name + (' (%s)'%self.annotation if self.annotation != None else ''))
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequence.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":104
 * 		return 'Sequence<%s>'%(self.name + (' (%s)'%self.annotation if self.annotation != None else ''))
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_11__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_11__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_10__repr__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_10__repr__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "gnocis/sequences.pyx":105
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * 	def label(self, label):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __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;

  /* "gnocis/sequences.pyx":104
 * 		return 'Sequence<%s>'%(self.name + (' (%s)'%self.annotation if self.annotation != None else ''))
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequence.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":107
 * 		return self.__str__()
 * 
 * 	def label(self, label):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param label: Label to add.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_13label(PyObject *__pyx_v_self, PyObject *__pyx_v_label); /*proto*/
static char __pyx_doc_6gnocis_9sequences_8sequence_12label[] = "\n\t\t:param label: Label to add.\n\t\t:type label: sequenceLabel\n\t\t\n\t\t:return: Returns a labelled sequence.\n\t\t:rtype: sequence\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_13label(PyObject *__pyx_v_self, PyObject *__pyx_v_label) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("label (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_12label(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_label));

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

static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_12label(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_label) {
  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("label", 0);

  /* "gnocis/sequences.pyx":115
 * 		:rtype: sequence
 * 		"""
 * 		return sequence(name = self.name, seq = self.seq, path = self.path, sourceRegion = self.sourceRegion, annotation = self.annotation, labels = self.labels | set([label]))             # <<<<<<<<<<<<<<
 * 
 * 	# Extracts sequence windows with a desired size and step size.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_name, __pyx_v_self->name) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_seq, __pyx_v_self->seq) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_path, __pyx_v_self->path) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_sourceRegion, ((PyObject *)__pyx_v_self->sourceRegion)) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_annotation, __pyx_v_self->annotation) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PySet_Add(__pyx_t_2, __pyx_v_label) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
  __pyx_t_3 = PyNumber_Or(__pyx_v_self->labels, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_labels, __pyx_t_3) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":107
 * 		return self.__str__()
 * 
 * 	def label(self, label):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param label: Label to add.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequence.label", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":118
 * 
 * 	# Extracts sequence windows with a desired size and step size.
 * 	def windows(self, int size, int step, bool includeCroppedEnds = False):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param size: Window size.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_15windows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_8sequence_14windows[] = "\n\t\t:param size: Window size.\n\t\t:param step: Window step size.\n\t\t:param includeCroppedEnds: Whether or not to include cropped windows on ends of sequence. Default is `False`.\n\t\t:type size: int\n\t\t:type step: int\n\t\t:type includeCroppedEnds: bool, optional\n\t\t\n\t\t:return: Returns a sequence set of sliding window sequences over the sequence.\n\t\t:rtype: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_15windows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_size;
  int __pyx_v_step;
  bool __pyx_v_includeCroppedEnds;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("windows (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_step,&__pyx_n_s_includeCroppedEnds,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_step)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("windows", 0, 2, 3, 1); __PYX_ERR(0, 118, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_includeCroppedEnds);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "windows") < 0)) __PYX_ERR(0, 118, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 118, __pyx_L3_error)
    __pyx_v_step = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_step == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 118, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_includeCroppedEnds = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_includeCroppedEnds == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 118, __pyx_L3_error)
    } else {
      __pyx_v_includeCroppedEnds = ((bool)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("windows", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 118, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequence.windows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_14windows(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), __pyx_v_size, __pyx_v_step, __pyx_v_includeCroppedEnds);

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

static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_14windows(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, int __pyx_v_size, int __pyx_v_step, bool __pyx_v_includeCroppedEnds) {
  PyObject *__pyx_v_windows = 0;
  struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_wsequences = 0;
  PY_LONG_LONG __pyx_v_wA;
  PY_LONG_LONG __pyx_v_wB;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
  Py_UCS4 __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("windows", 0);

  /* "gnocis/sequences.pyx":133
 * 		cdef sequences wsequences
 * 		cdef long long wA, wB
 * 		windows = []             # <<<<<<<<<<<<<<
 * 		wA = 0
 * 		while True:
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_windows = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":134
 * 		cdef long long wA, wB
 * 		windows = []
 * 		wA = 0             # <<<<<<<<<<<<<<
 * 		while True:
 * 			wB = wA + size
 */
  __pyx_v_wA = 0;

  /* "gnocis/sequences.pyx":135
 * 		windows = []
 * 		wA = 0
 * 		while True:             # <<<<<<<<<<<<<<
 * 			wB = wA + size
 * 			if wB > len(self.seq):
 */
  while (1) {

    /* "gnocis/sequences.pyx":136
 * 		wA = 0
 * 		while True:
 * 			wB = wA + size             # <<<<<<<<<<<<<<
 * 			if wB > len(self.seq):
 * 				if includeCroppedEnds:
 */
    __pyx_v_wB = (__pyx_v_wA + __pyx_v_size);

    /* "gnocis/sequences.pyx":137
 * 		while True:
 * 			wB = wA + size
 * 			if wB > len(self.seq):             # <<<<<<<<<<<<<<
 * 				if includeCroppedEnds:
 * 					windows.append( sequence('%s:%d..%d'%(self.name, wA, len(self.seq)), self.seq[wA:], self.path, sourceRegion = region(self.name, wA, len(self.seq)), labels = self.labels) )
 */
    __pyx_t_1 = __pyx_v_self->seq;
    __Pyx_INCREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 137, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = ((__pyx_v_wB > __pyx_t_2) != 0);
    if (__pyx_t_3) {

      /* "gnocis/sequences.pyx":138
 * 			wB = wA + size
 * 			if wB > len(self.seq):
 * 				if includeCroppedEnds:             # <<<<<<<<<<<<<<
 * 					windows.append( sequence('%s:%d..%d'%(self.name, wA, len(self.seq)), self.seq[wA:], self.path, sourceRegion = region(self.name, wA, len(self.seq)), labels = self.labels) )
 * 				break
 */
      __pyx_t_3 = (__pyx_v_includeCroppedEnds != 0);
      if (__pyx_t_3) {

        /* "gnocis/sequences.pyx":139
 * 			if wB > len(self.seq):
 * 				if includeCroppedEnds:
 * 					windows.append( sequence('%s:%d..%d'%(self.name, wA, len(self.seq)), self.seq[wA:], self.path, sourceRegion = region(self.name, wA, len(self.seq)), labels = self.labels) )             # <<<<<<<<<<<<<<
 * 				break
 * 			windows.append( sequence('%s:%d..%d'%(self.name, wA, wB), self.seq[wA:wB], self.path, sourceRegion = region(self.name, wA, wB), labels = self.labels) )
 */
        __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = 0;
        __pyx_t_4 = 127;
        __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_self->name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
        __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_INCREF(__pyx_kp_u__3);
        __pyx_t_2 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__3);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__3);
        __pyx_t_5 = __Pyx_PyUnicode_From_PY_LONG_LONG(__pyx_v_wA, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_INCREF(__pyx_kp_u__4);
        __pyx_t_2 += 2;
        __Pyx_GIVEREF(__pyx_kp_u__4);
        PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_kp_u__4);
        __pyx_t_5 = __pyx_v_self->seq;
        __Pyx_INCREF(__pyx_t_5);
        if (unlikely(__pyx_t_5 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
          __PYX_ERR(0, 139, __pyx_L1_error)
        }
        __pyx_t_6 = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(__pyx_v_self->seq == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 139, __pyx_L1_error)
        }
        __pyx_t_1 = __Pyx_PyUnicode_Substring(__pyx_v_self->seq, __pyx_v_wA, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
        __Pyx_INCREF(__pyx_v_self->path);
        __Pyx_GIVEREF(__pyx_v_self->path);
        PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_self->path);
        __pyx_t_5 = 0;
        __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = __Pyx_PyInt_From_PY_LONG_LONG(__pyx_v_wA); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_8 = __pyx_v_self->seq;
        __Pyx_INCREF(__pyx_t_8);
        if (unlikely(__pyx_t_8 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
          __PYX_ERR(0, 139, __pyx_L1_error)
        }
        __pyx_t_2 = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_v_self->name);
        __Pyx_GIVEREF(__pyx_v_self->name);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_self->name);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
        __pyx_t_5 = 0;
        __pyx_t_8 = 0;
        __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_region), __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_sourceRegion, __pyx_t_8) < 0) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_labels, __pyx_v_self->labels) < 0) __PYX_ERR(0, 139, __pyx_L1_error)
        __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_windows, __pyx_t_8); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 139, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

        /* "gnocis/sequences.pyx":138
 * 			wB = wA + size
 * 			if wB > len(self.seq):
 * 				if includeCroppedEnds:             # <<<<<<<<<<<<<<
 * 					windows.append( sequence('%s:%d..%d'%(self.name, wA, len(self.seq)), self.seq[wA:], self.path, sourceRegion = region(self.name, wA, len(self.seq)), labels = self.labels) )
 * 				break
 */
      }

      /* "gnocis/sequences.pyx":140
 * 				if includeCroppedEnds:
 * 					windows.append( sequence('%s:%d..%d'%(self.name, wA, len(self.seq)), self.seq[wA:], self.path, sourceRegion = region(self.name, wA, len(self.seq)), labels = self.labels) )
 * 				break             # <<<<<<<<<<<<<<
 * 			windows.append( sequence('%s:%d..%d'%(self.name, wA, wB), self.seq[wA:wB], self.path, sourceRegion = region(self.name, wA, wB), labels = self.labels) )
 * 			wA += step
 */
      goto __pyx_L4_break;

      /* "gnocis/sequences.pyx":137
 * 		while True:
 * 			wB = wA + size
 * 			if wB > len(self.seq):             # <<<<<<<<<<<<<<
 * 				if includeCroppedEnds:
 * 					windows.append( sequence('%s:%d..%d'%(self.name, wA, len(self.seq)), self.seq[wA:], self.path, sourceRegion = region(self.name, wA, len(self.seq)), labels = self.labels) )
 */
    }

    /* "gnocis/sequences.pyx":141
 * 					windows.append( sequence('%s:%d..%d'%(self.name, wA, len(self.seq)), self.seq[wA:], self.path, sourceRegion = region(self.name, wA, len(self.seq)), labels = self.labels) )
 * 				break
 * 			windows.append( sequence('%s:%d..%d'%(self.name, wA, wB), self.seq[wA:wB], self.path, sourceRegion = region(self.name, wA, wB), labels = self.labels) )             # <<<<<<<<<<<<<<
 * 			wA += step
 * 		wsequences = sequences('%s windows(%d/%d)'%(self.name, size, step), windows)
 */
    __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = 0;
    __pyx_t_4 = 127;
    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_4;
    __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u__3);
    __pyx_t_2 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__3);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_kp_u__3);
    __pyx_t_1 = __Pyx_PyUnicode_From_PY_LONG_LONG(__pyx_v_wA, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u__4);
    __pyx_t_2 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__4);
    PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_kp_u__4);
    __pyx_t_1 = __Pyx_PyUnicode_From_PY_LONG_LONG(__pyx_v_wB, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_8, 5, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__pyx_v_self->seq == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 141, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_PyUnicode_Substring(__pyx_v_self->seq, __pyx_v_wA, __pyx_v_wB); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8);
    __Pyx_INCREF(__pyx_v_self->path);
    __Pyx_GIVEREF(__pyx_v_self->path);
    PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_self->path);
    __pyx_t_1 = 0;
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = __Pyx_PyInt_From_PY_LONG_LONG(__pyx_v_wA); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = __Pyx_PyInt_From_PY_LONG_LONG(__pyx_v_wB); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_self->name);
    __Pyx_GIVEREF(__pyx_v_self->name);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_self->name);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_9);
    __pyx_t_1 = 0;
    __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_region), __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_sourceRegion, __pyx_t_9) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_labels, __pyx_v_self->labels) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_windows, __pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 141, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "gnocis/sequences.pyx":142
 * 				break
 * 			windows.append( sequence('%s:%d..%d'%(self.name, wA, wB), self.seq[wA:wB], self.path, sourceRegion = region(self.name, wA, wB), labels = self.labels) )
 * 			wA += step             # <<<<<<<<<<<<<<
 * 		wsequences = sequences('%s windows(%d/%d)'%(self.name, size, step), windows)
 * 		return wsequences
 */
    __pyx_v_wA = (__pyx_v_wA + __pyx_v_step);
  }
  __pyx_L4_break:;

  /* "gnocis/sequences.pyx":143
 * 			windows.append( sequence('%s:%d..%d'%(self.name, wA, wB), self.seq[wA:wB], self.path, sourceRegion = region(self.name, wA, wB), labels = self.labels) )
 * 			wA += step
 * 		wsequences = sequences('%s windows(%d/%d)'%(self.name, size, step), windows)             # <<<<<<<<<<<<<<
 * 		return wsequences
 * 
 */
  __pyx_t_9 = PyTuple_New(6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = 0;
  __pyx_t_4 = 127;
  __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_self->name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_4;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
  __pyx_t_8 = 0;
  __Pyx_INCREF(__pyx_kp_u_windows);
  __pyx_t_2 += 9;
  __Pyx_GIVEREF(__pyx_kp_u_windows);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_kp_u_windows);
  __pyx_t_8 = __Pyx_PyUnicode_From_int(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
  __pyx_t_8 = 0;
  __Pyx_INCREF(__pyx_kp_u__9);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__9);
  PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_kp_u__9);
  __pyx_t_8 = __Pyx_PyUnicode_From_int(__pyx_v_step, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 4, __pyx_t_8);
  __pyx_t_8 = 0;
  __Pyx_INCREF(__pyx_kp_u__8);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__8);
  PyTuple_SET_ITEM(__pyx_t_9, 5, __pyx_kp_u__8);
  __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_9, 6, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
  __Pyx_INCREF(__pyx_v_windows);
  __Pyx_GIVEREF(__pyx_v_windows);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_windows);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_wsequences = ((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_t_8);
  __pyx_t_8 = 0;

  /* "gnocis/sequences.pyx":144
 * 			wA += step
 * 		wsequences = sequences('%s windows(%d/%d)'%(self.name, size, step), windows)
 * 		return wsequences             # <<<<<<<<<<<<<<
 * 
 * 	cdef public bytes getBytes(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_wsequences));
  __pyx_r = ((PyObject *)__pyx_v_wsequences);
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":118
 * 
 * 	# Extracts sequence windows with a desired size and step size.
 * 	def windows(self, int size, int step, bool includeCroppedEnds = False):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param size: Window size.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("gnocis.sequences.sequence.windows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_windows);
  __Pyx_XDECREF((PyObject *)__pyx_v_wsequences);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":146
 * 		return wsequences
 * 
 * 	cdef public bytes getBytes(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns the bytes of the sequence.
 */

PyObject *__pyx_f_6gnocis_9sequences_8sequence_getBytes(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getBytes", 0);

  /* "gnocis/sequences.pyx":151
 * 		:rtype: bytes
 * 		"""
 * 		if not self.cbytes:             # <<<<<<<<<<<<<<
 * 			self.cbytes = <bytes> self.seq.encode('UTF-8')
 * 		return self.cbytes
 */
  __pyx_t_1 = (__pyx_v_self->cbytes != Py_None)&&(PyBytes_GET_SIZE(__pyx_v_self->cbytes) != 0);
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {

    /* "gnocis/sequences.pyx":152
 * 		"""
 * 		if not self.cbytes:
 * 			self.cbytes = <bytes> self.seq.encode('UTF-8')             # <<<<<<<<<<<<<<
 * 		return self.cbytes
 * 
 */
    if (unlikely(__pyx_v_self->seq == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode");
      __PYX_ERR(0, 152, __pyx_L1_error)
    }
    __pyx_t_3 = PyUnicode_AsUTF8String(__pyx_v_self->seq); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_t_3;
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GIVEREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_v_self->cbytes);
    __Pyx_DECREF(__pyx_v_self->cbytes);
    __pyx_v_self->cbytes = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;

    /* "gnocis/sequences.pyx":151
 * 		:rtype: bytes
 * 		"""
 * 		if not self.cbytes:             # <<<<<<<<<<<<<<
 * 			self.cbytes = <bytes> self.seq.encode('UTF-8')
 * 		return self.cbytes
 */
  }

  /* "gnocis/sequences.pyx":153
 * 		if not self.cbytes:
 * 			self.cbytes = <bytes> self.seq.encode('UTF-8')
 * 		return self.cbytes             # <<<<<<<<<<<<<<
 * 
 * 	cdef public bytes getBytesIndexed(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->cbytes);
  __pyx_r = __pyx_v_self->cbytes;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":146
 * 		return wsequences
 * 
 * 	cdef public bytes getBytes(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns the bytes of the sequence.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gnocis.sequences.sequence.getBytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":155
 * 		return self.cbytes
 * 
 * 	cdef public bytes getBytesIndexed(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns the indexed bytes of the sequence.
 */

PyObject *__pyx_f_6gnocis_9sequences_8sequence_getBytesIndexed(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  PyObject *__pyx_v_cbytes = 0;
  struct __pyx_obj_6gnocis_6common__PyMEAPrivateData *__pyx_v_gdat = 0;
  unsigned char *__pyx_v_ltbl;
  Py_ssize_t __pyx_7genexpr__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  unsigned char *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  Py_ssize_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getBytesIndexed", 0);

  /* "gnocis/sequences.pyx":163
 * 		cdef _PyMEAPrivateData gdat
 * 		cdef unsigned char* ltbl
 * 		if not self.cbytesIndexed:             # <<<<<<<<<<<<<<
 * 			cbytes = self.getBytes()
 * 			gdat = getGlobalData()
 */
  __pyx_t_1 = (__pyx_v_self->cbytesIndexed != Py_None)&&(PyBytes_GET_SIZE(__pyx_v_self->cbytesIndexed) != 0);
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {

    /* "gnocis/sequences.pyx":164
 * 		cdef unsigned char* ltbl
 * 		if not self.cbytesIndexed:
 * 			cbytes = self.getBytes()             # <<<<<<<<<<<<<<
 * 			gdat = getGlobalData()
 * 			ltbl = gdat.charNTIndexTable
 */
    __pyx_t_3 = ((struct __pyx_vtabstruct_6gnocis_9sequences_sequence *)__pyx_v_self->__pyx_vtab)->getBytes(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_cbytes = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":165
 * 		if not self.cbytesIndexed:
 * 			cbytes = self.getBytes()
 * 			gdat = getGlobalData()             # <<<<<<<<<<<<<<
 * 			ltbl = gdat.charNTIndexTable
 * 			self.cbytesIndexed = bytes([ ltbl[cbytes[i]] for i in range(len(self.seq)) ])
 */
    __pyx_t_3 = ((PyObject *)__pyx_f_6gnocis_6common_getGlobalData()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_gdat = ((struct __pyx_obj_6gnocis_6common__PyMEAPrivateData *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":166
 * 			cbytes = self.getBytes()
 * 			gdat = getGlobalData()
 * 			ltbl = gdat.charNTIndexTable             # <<<<<<<<<<<<<<
 * 			self.cbytesIndexed = bytes([ ltbl[cbytes[i]] for i in range(len(self.seq)) ])
 * 		return self.cbytesIndexed
 */
    __pyx_t_4 = __pyx_v_gdat->charNTIndexTable;
    __pyx_v_ltbl = __pyx_t_4;

    /* "gnocis/sequences.pyx":167
 * 			gdat = getGlobalData()
 * 			ltbl = gdat.charNTIndexTable
 * 			self.cbytesIndexed = bytes([ ltbl[cbytes[i]] for i in range(len(self.seq)) ])             # <<<<<<<<<<<<<<
 * 		return self.cbytesIndexed
 * 
 */
    { /* enter inner scope */
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __pyx_v_self->seq;
      __Pyx_INCREF(__pyx_t_5);
      if (unlikely(__pyx_t_5 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(0, 167, __pyx_L1_error)
      }
      __pyx_t_6 = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 167, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = __pyx_t_6;
      for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
        __pyx_7genexpr__pyx_v_i = __pyx_t_8;
        __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_cbytes, __pyx_7genexpr__pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 167, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyInt_From_unsigned_char((__pyx_v_ltbl[__pyx_t_9])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 167, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 167, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
    } /* exit inner scope */
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GIVEREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_v_self->cbytesIndexed);
    __Pyx_DECREF(__pyx_v_self->cbytesIndexed);
    __pyx_v_self->cbytesIndexed = ((PyObject*)__pyx_t_5);
    __pyx_t_5 = 0;

    /* "gnocis/sequences.pyx":163
 * 		cdef _PyMEAPrivateData gdat
 * 		cdef unsigned char* ltbl
 * 		if not self.cbytesIndexed:             # <<<<<<<<<<<<<<
 * 			cbytes = self.getBytes()
 * 			gdat = getGlobalData()
 */
  }

  /* "gnocis/sequences.pyx":168
 * 			ltbl = gdat.charNTIndexTable
 * 			self.cbytesIndexed = bytes([ ltbl[cbytes[i]] for i in range(len(self.seq)) ])
 * 		return self.cbytesIndexed             # <<<<<<<<<<<<<<
 * 
 * # Represents a set of DNA sequences.
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->cbytesIndexed);
  __pyx_r = __pyx_v_self->cbytesIndexed;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":155
 * 		return self.cbytes
 * 
 * 	cdef public bytes getBytesIndexed(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns the indexed bytes of the sequence.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.sequence.getBytesIndexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cbytes);
  __Pyx_XDECREF((PyObject *)__pyx_v_gdat);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":29
 * cdef class sequence:
 * 
 * 	cdef public str name, seq, path, annotation             # <<<<<<<<<<<<<<
 * 	cdef public region sourceRegion
 * 	cdef bytes cbytes, cbytesIndexed
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_4name___get__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_4name_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 29, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequence.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_4name_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_4name_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)Py_None);

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

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_3seq_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_3seq_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_3seq___get__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_3seq_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_3seq_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_3seq_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_3seq_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 29, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->seq);
  __Pyx_DECREF(__pyx_v_self->seq);
  __pyx_v_self->seq = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequence.seq.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_3seq_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_3seq_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_3seq_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_3seq_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->seq);
  __Pyx_DECREF(__pyx_v_self->seq);
  __pyx_v_self->seq = ((PyObject*)Py_None);

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

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_4path_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_4path_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_4path___get__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_4path_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_4path_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_4path_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_4path_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 29, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->path);
  __Pyx_DECREF(__pyx_v_self->path);
  __pyx_v_self->path = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequence.path.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_4path_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_4path_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_4path_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_4path_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->path);
  __Pyx_DECREF(__pyx_v_self->path);
  __pyx_v_self->path = ((PyObject*)Py_None);

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

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_10annotation_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_10annotation_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_10annotation___get__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_10annotation_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_10annotation_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_10annotation_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_10annotation_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 29, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->annotation);
  __Pyx_DECREF(__pyx_v_self->annotation);
  __pyx_v_self->annotation = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequence.annotation.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_10annotation_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_10annotation_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_10annotation_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_10annotation_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->annotation);
  __Pyx_DECREF(__pyx_v_self->annotation);
  __pyx_v_self->annotation = ((PyObject*)Py_None);

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

/* "gnocis/sequences.pxd":30
 * 
 * 	cdef public str name, seq, path, annotation
 * 	cdef public region sourceRegion             # <<<<<<<<<<<<<<
 * 	cdef bytes cbytes, cbytesIndexed
 * 	cdef public bytes getBytes(self)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_12sourceRegion___get__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_12sourceRegion_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_12sourceRegion_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_6gnocis_7regions_region))))) __PYX_ERR(1, 30, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->sourceRegion);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->sourceRegion));
  __pyx_v_self->sourceRegion = ((struct __pyx_obj_6gnocis_7regions_region *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequence.sourceRegion.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_12sourceRegion_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_12sourceRegion_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->sourceRegion);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->sourceRegion));
  __pyx_v_self->sourceRegion = ((struct __pyx_obj_6gnocis_7regions_region *)Py_None);

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

/* "gnocis/sequences.pxd":34
 * 	cdef public bytes getBytes(self)
 * 	cdef public bytes getBytesIndexed(self)
 * 	cdef public set labels             # <<<<<<<<<<<<<<
 * 
 * # Represents a set of DNA sequences.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_6labels_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_6labels_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_6labels___get__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_6labels_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_6labels_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_6labels_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_6labels_2__set__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 34, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->labels);
  __Pyx_DECREF(__pyx_v_self->labels);
  __pyx_v_self->labels = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequence.labels.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_8sequence_6labels_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_8sequence_6labels_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_6labels_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_8sequence_6labels_4__del__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->labels);
  __Pyx_DECREF(__pyx_v_self->labels);
  __pyx_v_self->labels = ((PyObject*)Py_None);

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_17__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_17__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_16__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_16__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.annotation, self.cbytes, self.cbytesIndexed, self.labels, self.name, self.path, self.seq, self.sourceRegion)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = PyTuple_New(8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_self->annotation);
  __Pyx_GIVEREF(__pyx_v_self->annotation);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->annotation);
  __Pyx_INCREF(__pyx_v_self->cbytes);
  __Pyx_GIVEREF(__pyx_v_self->cbytes);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->cbytes);
  __Pyx_INCREF(__pyx_v_self->cbytesIndexed);
  __Pyx_GIVEREF(__pyx_v_self->cbytesIndexed);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_self->cbytesIndexed);
  __Pyx_INCREF(__pyx_v_self->labels);
  __Pyx_GIVEREF(__pyx_v_self->labels);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_self->labels);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_self->name);
  __Pyx_INCREF(__pyx_v_self->path);
  __Pyx_GIVEREF(__pyx_v_self->path);
  PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_self->path);
  __Pyx_INCREF(__pyx_v_self->seq);
  __Pyx_GIVEREF(__pyx_v_self->seq);
  PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_v_self->seq);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->sourceRegion));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->sourceRegion));
  PyTuple_SET_ITEM(__pyx_t_1, 7, ((PyObject *)__pyx_v_self->sourceRegion));
  __pyx_v_state = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.annotation, self.cbytes, self.cbytesIndexed, self.labels, self.name, self.path, self.seq, self.sourceRegion)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v__dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "(tree fragment)":7
 *     state = (self.annotation, self.cbytes, self.cbytesIndexed, self.labels, self.name, self.path, self.seq, self.sourceRegion)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_2 = (__pyx_v__dict != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.annotation is not None or self.cbytes is not None or self.cbytesIndexed is not None or self.labels is not None or self.name is not None or self.path is not None or self.seq is not None or self.sourceRegion is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.annotation, self.cbytes, self.cbytesIndexed, self.labels, self.name, self.path, self.seq, self.sourceRegion)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.annotation is not None or self.cbytes is not None or self.cbytesIndexed is not None or self.labels is not None or self.name is not None or self.path is not None or self.seq is not None or self.sourceRegion is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, None), state
 */
  /*else*/ {
    __pyx_t_2 = (__pyx_v_self->annotation != ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_2 != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_5 = (__pyx_v_self->cbytes != ((PyObject*)Py_None));
    __pyx_t_2 = (__pyx_t_5 != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_self->cbytesIndexed != ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_2 != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_5 = (__pyx_v_self->labels != ((PyObject*)Py_None));
    __pyx_t_2 = (__pyx_t_5 != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_self->name != ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_2 != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_5 = (__pyx_v_self->path != ((PyObject*)Py_None));
    __pyx_t_2 = (__pyx_t_5 != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_self->seq != ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_2 != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_5 = (((PyObject *)__pyx_v_self->sourceRegion) != Py_None);
    __pyx_t_2 = (__pyx_t_5 != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L4_bool_binop_done:;
    __pyx_v_use_setstate = __pyx_t_3;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.annotation is not None or self.cbytes is not None or self.cbytesIndexed is not None or self.labels is not None or self.name is not None or self.path is not None or self.seq is not None or self.sourceRegion is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, None), state
 *     else:
 */
  __pyx_t_3 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":13
 *         use_setstate = self.annotation is not None or self.cbytes is not None or self.cbytesIndexed is not None or self.labels is not None or self.name is not None or self.path is not None or self.seq is not None or self.sourceRegion is not None
 *     if use_setstate:
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_sequence); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_180500104);
    __Pyx_GIVEREF(__pyx_int_180500104);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_180500104);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.annotation is not None or self.cbytes is not None or self.cbytesIndexed is not None or self.labels is not None or self.name is not None or self.path is not None or self.seq is not None or self.sourceRegion is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, None), state
 *     else:
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequence__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_sequence); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_180500104);
    __Pyx_GIVEREF(__pyx_int_180500104);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_180500104);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
    __pyx_t_6 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("gnocis.sequences.sequence.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequence__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_19__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_8sequence_19__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_8sequence_18__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_8sequence_18__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequence__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequence__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequence, (type(self), 0xac23688, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequence__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequence.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":186
 * 	#__slots__ = 'name', 'sequences'
 * 
 * 	def __init__(self, name, seq):             # <<<<<<<<<<<<<<
 * 		self.name = name
 * 		self.sequences = seq
 */

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_9sequences_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gnocis_9sequences_9sequences_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_seq = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_seq,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_seq)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 186, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 186, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_name = values[0];
    __pyx_v_seq = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 186, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences___init__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), __pyx_v_name, __pyx_v_seq);

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

static int __pyx_pf_6gnocis_9sequences_9sequences___init__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_seq) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "gnocis/sequences.pyx":187
 * 
 * 	def __init__(self, name, seq):
 * 		self.name = name             # <<<<<<<<<<<<<<
 * 		self.sequences = seq
 * 
 */
  if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 187, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_name;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":188
 * 	def __init__(self, name, seq):
 * 		self.name = name
 * 		self.sequences = seq             # <<<<<<<<<<<<<<
 * 
 * 	def __iter__(self):
 */
  if (!(likely(PyList_CheckExact(__pyx_v_seq))||((__pyx_v_seq) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_seq)->tp_name), 0))) __PYX_ERR(0, 188, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_seq;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->sequences);
  __Pyx_DECREF(__pyx_v_self->sequences);
  __pyx_v_self->sequences = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":186
 * 	#__slots__ = 'name', 'sequences'
 * 
 * 	def __init__(self, name, seq):             # <<<<<<<<<<<<<<
 * 		self.name = name
 * 		self.sequences = seq
 */

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

/* "gnocis/sequences.pyx":190
 * 		self.sequences = seq
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.sequences.__iter__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_3__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_3__iter__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_2__iter__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_2__iter__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "gnocis/sequences.pyx":191
 * 
 * 	def __iter__(self):
 * 		return self.sequences.__iter__()             # <<<<<<<<<<<<<<
 * 
 * 	def __getitem__(self, i):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->sequences, __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __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;

  /* "gnocis/sequences.pyx":190
 * 		self.sequences = seq
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.sequences.__iter__()
 * 
 */

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

/* "gnocis/sequences.pyx":193
 * 		return self.sequences.__iter__()
 * 
 * 	def __getitem__(self, i):             # <<<<<<<<<<<<<<
 * 		return self.sequences[i]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_4__getitem__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), ((PyObject *)__pyx_v_i));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_4__getitem__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_i) {
  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);

  /* "gnocis/sequences.pyx":194
 * 
 * 	def __getitem__(self, i):
 * 		return self.sequences[i]             # <<<<<<<<<<<<<<
 * 
 * 	def __len__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(__pyx_v_self->sequences == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 194, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_self->sequences, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":193
 * 		return self.sequences.__iter__()
 * 
 * 	def __getitem__(self, i):             # <<<<<<<<<<<<<<
 * 		return self.sequences[i]
 * 
 */

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

/* "gnocis/sequences.pyx":196
 * 		return self.sequences[i]
 * 
 * 	def __len__(self):             # <<<<<<<<<<<<<<
 * 		return len(self.sequences)
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6gnocis_9sequences_9sequences_7__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6gnocis_9sequences_9sequences_7__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_6__len__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_6gnocis_9sequences_9sequences_6__len__(struct __pyx_obj_6gnocis_9sequences_sequences *__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);

  /* "gnocis/sequences.pyx":197
 * 
 * 	def __len__(self):
 * 		return len(self.sequences)             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
  __pyx_t_1 = __pyx_v_self->sequences;
  __Pyx_INCREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 197, __pyx_L1_error)
  }
  __pyx_t_2 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 197, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":196
 * 		return self.sequences[i]
 * 
 * 	def __len__(self):             # <<<<<<<<<<<<<<
 * 		return len(self.sequences)
 * 
 */

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

/* "gnocis/sequences.pyx":199
 * 		return len(self.sequences)
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Sequence list<%s>'%(self.name)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_9__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_9__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_8__str__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_8__str__(struct __pyx_obj_6gnocis_9sequences_sequences *__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);

  /* "gnocis/sequences.pyx":200
 * 
 * 	def __str__(self):
 * 		return 'Sequence list<%s>'%(self.name)             # <<<<<<<<<<<<<<
 * 
 * 	def table(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_Sequence_list_s, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":199
 * 		return len(self.sequences)
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Sequence list<%s>'%(self.name)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequences.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":202
 * 		return 'Sequence list<%s>'%(self.name)
 * 
 * 	def table(self):             # <<<<<<<<<<<<<<
 * 		return nctable(
 * 			'Sequences: ' + self.name,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_11table(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_11table(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("table (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_10table(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_9sequences_5table_8genexpr1_2generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":208
 * 				{
 * 					'Name': s.name,
 * 					'Labels': ', '.join(l.name for l in s.labels),             # <<<<<<<<<<<<<<
 * 					'Length': len(s.seq),
 * 					'Source region': '' if s.sourceRegion is None else s.sourceRegion.bstr(),
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_5table_8genexpr1_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_1_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_1_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 208, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_9sequences_5table_8genexpr1_2generator9, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_table_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 208, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.table.genexpr", __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_6gnocis_9sequences_9sequences_5table_8genexpr1_2generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 208, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_8genexpr1__pyx_v_s)) { __Pyx_RaiseClosureNameError("s"); __PYX_ERR(0, 208, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_8genexpr1__pyx_v_s, __pyx_n_s_labels); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __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, 208, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __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, 208, __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, 208, __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, 208, __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, 208, __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, 208, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_l);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_l, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_l, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 208, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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;
}

/* "gnocis/sequences.pyx":202
 * 		return 'Sequence list<%s>'%(self.name)
 * 
 * 	def table(self):             # <<<<<<<<<<<<<<
 * 		return nctable(
 * 			'Sequences: ' + self.name,
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_10table(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *__pyx_cur_scope;
  PyObject *__pyx_8genexpr1__pyx_v_0 = 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;
  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 = NULL;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("table", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct__table(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct__table, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 202, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }

  /* "gnocis/sequences.pyx":203
 * 
 * 	def table(self):
 * 		return nctable(             # <<<<<<<<<<<<<<
 * 			'Sequences: ' + self.name,
 * 			[
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_nctable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "gnocis/sequences.pyx":204
 * 	def table(self):
 * 		return nctable(
 * 			'Sequences: ' + self.name,             # <<<<<<<<<<<<<<
 * 			[
 * 				{
 */
  __pyx_t_3 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_Sequences, __pyx_v_self->name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  { /* enter inner scope */

    /* "gnocis/sequences.pyx":205
 * 		return nctable(
 * 			'Sequences: ' + self.name,
 * 			[             # <<<<<<<<<<<<<<
 * 				{
 * 					'Name': s.name,
 */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);

    /* "gnocis/sequences.pyx":213
 * 					'Sequence': s.seq,
 * 				}
 * 				for s in self             # <<<<<<<<<<<<<<
 * 			],
 * 		)
 */
    if (likely(PyList_CheckExact(((PyObject *)__pyx_v_self))) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
      __pyx_t_5 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 213, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 213, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 213, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 213, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        }
      } else {
        __pyx_t_8 = __pyx_t_7(__pyx_t_5);
        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, 213, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_s);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_s, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      __pyx_t_8 = 0;

      /* "gnocis/sequences.pyx":207
 * 			[
 * 				{
 * 					'Name': s.name,             # <<<<<<<<<<<<<<
 * 					'Labels': ', '.join(l.name for l in s.labels),
 * 					'Length': len(s.seq),
 */
      __pyx_t_8 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 207, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_s, __pyx_n_s_name); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 207, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_Name, __pyx_t_9) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "gnocis/sequences.pyx":208
 * 				{
 * 					'Name': s.name,
 * 					'Labels': ', '.join(l.name for l in s.labels),             # <<<<<<<<<<<<<<
 * 					'Length': len(s.seq),
 * 					'Source region': '' if s.sourceRegion is None else s.sourceRegion.bstr(),
 */
      __pyx_t_9 = __pyx_pf_6gnocis_9sequences_9sequences_5table_8genexpr1_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_Generator_Next(__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyUnicode_Join(__pyx_kp_u__10, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_Labels, __pyx_t_9) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "gnocis/sequences.pyx":209
 * 					'Name': s.name,
 * 					'Labels': ', '.join(l.name for l in s.labels),
 * 					'Length': len(s.seq),             # <<<<<<<<<<<<<<
 * 					'Source region': '' if s.sourceRegion is None else s.sourceRegion.bstr(),
 * 					'Sequence': s.seq,
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_s, __pyx_n_s_seq); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_11 = PyObject_Length(__pyx_t_9); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 209, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_Length, __pyx_t_9) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "gnocis/sequences.pyx":210
 * 					'Labels': ', '.join(l.name for l in s.labels),
 * 					'Length': len(s.seq),
 * 					'Source region': '' if s.sourceRegion is None else s.sourceRegion.bstr(),             # <<<<<<<<<<<<<<
 * 					'Sequence': s.seq,
 * 				}
 */
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_s, __pyx_n_s_sourceRegion); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 210, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_12 = (__pyx_t_10 == Py_None);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if ((__pyx_t_12 != 0)) {
        __Pyx_INCREF(__pyx_kp_u__2);
        __pyx_t_9 = __pyx_kp_u__2;
      } else {
        __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_s, __pyx_n_s_sourceRegion); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 210, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_bstr); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 210, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
          __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
          if (likely(__pyx_t_13)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
            __Pyx_INCREF(__pyx_t_13);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_14, function);
          }
        }
        __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_14);
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 210, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_9 = __pyx_t_10;
        __pyx_t_10 = 0;
      }
      if (PyDict_SetItem(__pyx_t_8, __pyx_kp_u_Source_region, __pyx_t_9) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "gnocis/sequences.pyx":211
 * 					'Length': len(s.seq),
 * 					'Source region': '' if s.sourceRegion is None else s.sourceRegion.bstr(),
 * 					'Sequence': s.seq,             # <<<<<<<<<<<<<<
 * 				}
 * 				for s in self
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_8genexpr1__pyx_v_s, __pyx_n_s_seq); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_Sequence, __pyx_t_9) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 205, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "gnocis/sequences.pyx":213
 * 					'Sequence': s.seq,
 * 				}
 * 				for s in self             # <<<<<<<<<<<<<<
 * 			],
 * 		)
 */
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } /* exit inner scope */
  __pyx_t_5 = NULL;
  __pyx_t_15 = 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_15 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 203, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_15, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_15, __pyx_t_4);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":202
 * 		return 'Sequence list<%s>'%(self.name)
 * 
 * 	def table(self):             # <<<<<<<<<<<<<<
 * 		return nctable(
 * 			'Sequences: ' + self.name,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("gnocis.sequences.sequences.table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_0);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":217
 * 		)
 * 
 * 	def _repr_html_(self):             # <<<<<<<<<<<<<<
 * 		return self.table()._repr_html_()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_13_repr_html_(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_13_repr_html_(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_repr_html_ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_12_repr_html_(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_12_repr_html_(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_repr_html_", 0);

  /* "gnocis/sequences.pyx":218
 * 
 * 	def _repr_html_(self):
 * 		return self.table()._repr_html_()             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_table); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __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_repr_html); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":217
 * 		)
 * 
 * 	def _repr_html_(self):             # <<<<<<<<<<<<<<
 * 		return self.table()._repr_html_()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gnocis.sequences.sequences._repr_html_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":220
 * 		return self.table()._repr_html_()
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.table().__repr__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_15__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_15__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_14__repr__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":221
 * 
 * 	def __repr__(self):
 * 		return self.table().__repr__()             # <<<<<<<<<<<<<<
 * 
 * 	def __add__(self, other):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_table); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __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_repr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":220
 * 		return self.table()._repr_html_()
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.table().__repr__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gnocis.sequences.sequences.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":223
 * 		return self.table().__repr__()
 * 
 * 	def __add__(self, other):             # <<<<<<<<<<<<<<
 * 		return sequences('%s + %s'%(self.name, other.name), self.sequences + other.sequences)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_17__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_17__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__add__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_16__add__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_16__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  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;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__add__", 0);

  /* "gnocis/sequences.pyx":224
 * 
 * 	def __add__(self, other):
 * 		return sequences('%s + %s'%(self.name, other.name), self.sequences + other.sequences)             # <<<<<<<<<<<<<<
 * 
 * 	# Returns n split sequence sets
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_4), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 224, __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, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u__11);
  __pyx_t_2 += 3;
  __Pyx_GIVEREF(__pyx_kp_u__11);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__11);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_5), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __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, 2, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_sequences); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
  __pyx_t_4 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 224, __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;

  /* "gnocis/sequences.pyx":223
 * 		return self.table().__repr__()
 * 
 * 	def __add__(self, other):             # <<<<<<<<<<<<<<
 * 		return sequences('%s + %s'%(self.name, other.name), self.sequences + other.sequences)
 * 
 */

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

/* "gnocis/sequences.pyx":227
 * 
 * 	# Returns n split sequence sets
 * 	def split(self, n):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param n: Number of sets to split into.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_19split(PyObject *__pyx_v_self, PyObject *__pyx_v_n); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_18split[] = "\n\t\t:param n: Number of sets to split into.\n\t\t:type n: int\n\t\t\n\t\t:return: Returns a list of `n` independent splits of the sequence set, without shuffling.\n\t\t:rtype: list\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_19split(PyObject *__pyx_v_self, PyObject *__pyx_v_n) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("split (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_18split(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), ((PyObject *)__pyx_v_n));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_18split(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_n) {
  PyObject *__pyx_v_cA = NULL;
  PyObject *__pyx_v_ret = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_cB = 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 *);
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  Py_UCS4 __pyx_t_9;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("split", 0);

  /* "gnocis/sequences.pyx":235
 * 		:rtype: list
 * 		"""
 * 		cA = 0             # <<<<<<<<<<<<<<
 * 		ret = []
 * 		for i in range(n):
 */
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_cA = __pyx_int_0;

  /* "gnocis/sequences.pyx":236
 * 		"""
 * 		cA = 0
 * 		ret = []             # <<<<<<<<<<<<<<
 * 		for i in range(n):
 * 			cB = int( ( len(self.sequences) * (i+1) / n ) )
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ret = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":237
 * 		cA = 0
 * 		ret = []
 * 		for i in range(n):             # <<<<<<<<<<<<<<
 * 			cB = int( ( len(self.sequences) * (i+1) / n ) )
 * 			if cA == cB: continue
 */
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 237, __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, 237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 237, __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, 237, __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, 237, __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, 237, __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, 237, __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, 237, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "gnocis/sequences.pyx":238
 * 		ret = []
 * 		for i in range(n):
 * 			cB = int( ( len(self.sequences) * (i+1) / n ) )             # <<<<<<<<<<<<<<
 * 			if cA == cB: continue
 * 			ret.append( sequences(self.name + ' [%d:%d]'%(cA, cB), self.sequences[ cA : cB ]) )
 */
    __pyx_t_1 = __pyx_v_self->sequences;
    __Pyx_INCREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 238, __pyx_L1_error)
    }
    __pyx_t_5 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 238, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyNumber_Multiply(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_v_n); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_cB, __pyx_t_7);
    __pyx_t_7 = 0;

    /* "gnocis/sequences.pyx":239
 * 		for i in range(n):
 * 			cB = int( ( len(self.sequences) * (i+1) / n ) )
 * 			if cA == cB: continue             # <<<<<<<<<<<<<<
 * 			ret.append( sequences(self.name + ' [%d:%d]'%(cA, cB), self.sequences[ cA : cB ]) )
 * 			cA = cB
 */
    __pyx_t_7 = PyObject_RichCompare(__pyx_v_cA, __pyx_v_cB, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 239, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 239, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_8) {
      goto __pyx_L3_continue;
    }

    /* "gnocis/sequences.pyx":240
 * 			cB = int( ( len(self.sequences) * (i+1) / n ) )
 * 			if cA == cB: continue
 * 			ret.append( sequences(self.name + ' [%d:%d]'%(cA, cB), self.sequences[ cA : cB ]) )             # <<<<<<<<<<<<<<
 * 			cA = cB
 * 		return ret
 */
    __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u__12);
    __pyx_t_5 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__12);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u__12);
    __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_cA), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_9;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u__3);
    __pyx_t_5 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__3);
    PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u__3);
    __pyx_t_6 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_cB), __pyx_n_u_d); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_9;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u__13);
    __pyx_t_5 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__13);
    PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_kp_u__13);
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_7, 5, __pyx_t_5, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_self->name, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__pyx_v_self->sequences == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 240, __pyx_L1_error)
    }
    __Pyx_INCREF(__pyx_v_cA);
    __pyx_t_6 = __pyx_v_cA;
    __pyx_t_8 = (__pyx_t_6 == Py_None);
    if (__pyx_t_8) {
      __pyx_t_5 = 0;
    } else {
      __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error)
      __pyx_t_5 = __pyx_t_10;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_v_cB);
    __pyx_t_6 = __pyx_v_cB;
    __pyx_t_8 = (__pyx_t_6 == Py_None);
    if (__pyx_t_8) {
      __pyx_t_10 = PY_SSIZE_T_MAX;
    } else {
      __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L1_error)
      __pyx_t_10 = __pyx_t_11;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyList_GetSlice(__pyx_v_self->sequences, __pyx_t_5, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6);
    __pyx_t_7 = 0;
    __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_ret, __pyx_t_6); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 240, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "gnocis/sequences.pyx":241
 * 			if cA == cB: continue
 * 			ret.append( sequences(self.name + ' [%d:%d]'%(cA, cB), self.sequences[ cA : cB ]) )
 * 			cA = cB             # <<<<<<<<<<<<<<
 * 		return ret
 * 
 */
    __Pyx_INCREF(__pyx_v_cB);
    __Pyx_DECREF_SET(__pyx_v_cA, __pyx_v_cB);

    /* "gnocis/sequences.pyx":237
 * 		cA = 0
 * 		ret = []
 * 		for i in range(n):             # <<<<<<<<<<<<<<
 * 			cB = int( ( len(self.sequences) * (i+1) / n ) )
 * 			if cA == cB: continue
 */
    __pyx_L3_continue:;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":242
 * 			ret.append( sequences(self.name + ' [%d:%d]'%(cA, cB), self.sequences[ cA : cB ]) )
 * 			cA = cB
 * 		return ret             # <<<<<<<<<<<<<<
 * 
 * 	# Returns a random division of the sequences
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ret);
  __pyx_r = __pyx_v_ret;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":227
 * 
 * 	# Returns n split sequence sets
 * 	def split(self, n):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param n: Number of sets to split into.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("gnocis.sequences.sequences.split", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cA);
  __Pyx_XDECREF(__pyx_v_ret);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_cB);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":245
 * 
 * 	# Returns a random division of the sequences
 * 	def randomSplit(self, ratio = 0.5):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param ratio: Ratio for the split, between 0 and 1. For the return touple, `(A, B)`, a ratio of 0 means all the sequences are in `B`, and opposite for a ratio of 1.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_21randomSplit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_20randomSplit[] = "\n\t\t:param ratio: Ratio for the split, between 0 and 1. For the return touple, `(A, B)`, a ratio of 0 means all the sequences are in `B`, and opposite for a ratio of 1.\n\t\t:type ratio: float\n\t\t\n\t\t:return: Returns a random split of the sequences into two independent sets, with the given ratio.\n\t\t:rtype: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_21randomSplit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_ratio = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("randomSplit (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ratio,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)__pyx_float_0_5);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ratio);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "randomSplit") < 0)) __PYX_ERR(0, 245, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ratio = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("randomSplit", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 245, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.randomSplit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_20randomSplit(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), __pyx_v_ratio);

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_20randomSplit(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_ratio) {
  PyObject *__pyx_v_seqs = NULL;
  PyObject *__pyx_v_isplit = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("randomSplit", 0);

  /* "gnocis/sequences.pyx":253
 * 		:rtype: sequences
 * 		"""
 * 		seqs = self.sequences[:]             # <<<<<<<<<<<<<<
 * 		isplit = int(len(seqs)*ratio)
 * 		random.shuffle(seqs)
 */
  if (unlikely(__pyx_v_self->sequences == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 253, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_self->sequences, 0, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_seqs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":254
 * 		"""
 * 		seqs = self.sequences[:]
 * 		isplit = int(len(seqs)*ratio)             # <<<<<<<<<<<<<<
 * 		random.shuffle(seqs)
 * 		return sequences(self.name + ' (split A)', seqs[:isplit]),\
 */
  __pyx_t_2 = PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 254, __pyx_L1_error)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_v_ratio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_isplit = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":255
 * 		seqs = self.sequences[:]
 * 		isplit = int(len(seqs)*ratio)
 * 		random.shuffle(seqs)             # <<<<<<<<<<<<<<
 * 		return sequences(self.name + ' (split A)', seqs[:isplit]),\
 * 		       sequences(self.name + ' (split B)', seqs[isplit:])
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shuffle); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_seqs) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_seqs);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":256
 * 		isplit = int(len(seqs)*ratio)
 * 		random.shuffle(seqs)
 * 		return sequences(self.name + ' (split A)', seqs[:isplit]),\             # <<<<<<<<<<<<<<
 * 		       sequences(self.name + ' (split B)', seqs[isplit:])
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_self->name, __pyx_kp_u_split_A); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_isplit);
  __pyx_t_4 = __pyx_v_isplit;
  __pyx_t_5 = (__pyx_t_4 == Py_None);
  if (__pyx_t_5) {
    __pyx_t_2 = PY_SSIZE_T_MAX;
  } else {
    __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 256, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_6;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyList_GetSlice(__pyx_v_seqs, 0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":257
 * 		random.shuffle(seqs)
 * 		return sequences(self.name + ' (split A)', seqs[:isplit]),\
 * 		       sequences(self.name + ' (split B)', seqs[isplit:])             # <<<<<<<<<<<<<<
 * 
 * 	# Returns a random sample of the sequences
 */
  __pyx_t_3 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_self->name, __pyx_kp_u_split_B); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_isplit);
  __pyx_t_1 = __pyx_v_isplit;
  __pyx_t_5 = (__pyx_t_1 == Py_None);
  if (__pyx_t_5) {
    __pyx_t_2 = 0;
  } else {
    __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 257, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_6;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_seqs, __pyx_t_2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
  __pyx_t_3 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "gnocis/sequences.pyx":256
 * 		isplit = int(len(seqs)*ratio)
 * 		random.shuffle(seqs)
 * 		return sequences(self.name + ' (split A)', seqs[:isplit]),\             # <<<<<<<<<<<<<<
 * 		       sequences(self.name + ' (split B)', seqs[isplit:])
 * 
 */
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":245
 * 
 * 	# Returns a random division of the sequences
 * 	def randomSplit(self, ratio = 0.5):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param ratio: Ratio for the split, between 0 and 1. For the return touple, `(A, B)`, a ratio of 0 means all the sequences are in `B`, and opposite for a ratio of 1.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("gnocis.sequences.sequences.randomSplit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seqs);
  __Pyx_XDECREF(__pyx_v_isplit);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":260
 * 
 * 	# Returns a random sample of the sequences
 * 	def sample(self, n = 0):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param n: Number of sequences to pick. If 0, the same number will be selected as are in the full set.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_23sample(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_22sample[] = "\n\t\t:param n: Number of sequences to pick. If 0, the same number will be selected as are in the full set.\n\t\t:type n: int\n\t\t\n\t\t:return: Returns a random sample of the sequences of size n. Sequences are selected with replacement, and the same sequence can occur multiple times.\n\t\t:rtype: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_23sample(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_n = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sample") < 0)) __PYX_ERR(0, 260, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_n = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sample", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 260, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_22sample(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), __pyx_v_n);

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_22sample(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_n) {
  PyObject *__pyx_v_smp = NULL;
  CYTHON_UNUSED PyObject *__pyx_8genexpr3__pyx_v_i = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sample", 0);
  __Pyx_INCREF(__pyx_v_n);

  /* "gnocis/sequences.pyx":268
 * 		:rtype: sequences
 * 		"""
 * 		if n <= 0: n = len(self)             # <<<<<<<<<<<<<<
 * 		smp = [ random.choice(self.sequences) for i in range(n) ]
 * 		return sequences(self.name + ' (bootstrap sample of ' + str(n) + ' seq.)', smp)
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_n, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
    __pyx_t_3 = PyObject_Length(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 268, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_n, __pyx_t_1);
    __pyx_t_1 = 0;
  }

  /* "gnocis/sequences.pyx":269
 * 		"""
 * 		if n <= 0: n = len(self)
 * 		smp = [ random.choice(self.sequences) for i in range(n) ]             # <<<<<<<<<<<<<<
 * 		return sequences(self.name + ' (bootstrap sample of ' + str(n) + ' seq.)', smp)
 * 
 */
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_n); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
      __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_3 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 269, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 269, __pyx_L6_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 269, __pyx_L6_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 269, __pyx_L6_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_6(__pyx_t_5);
        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, 269, __pyx_L6_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_i, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_random); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 269, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_choice); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 269, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_v_self->sequences) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_self->sequences);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 269, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_i); __pyx_8genexpr3__pyx_v_i = 0;
    goto __pyx_L9_exit_scope;
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_i); __pyx_8genexpr3__pyx_v_i = 0;
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __pyx_v_smp = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":270
 * 		if n <= 0: n = len(self)
 * 		smp = [ random.choice(self.sequences) for i in range(n) ]
 * 		return sequences(self.name + ' (bootstrap sample of ' + str(n) + ' seq.)', smp)             # <<<<<<<<<<<<<<
 * 
 * 	# Returns a renamed sequence set
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_self->name, __pyx_kp_u_bootstrap_sample_of); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_t_4, __pyx_kp_u_seq_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_INCREF(__pyx_v_smp);
  __Pyx_GIVEREF(__pyx_v_smp);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_smp);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __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;

  /* "gnocis/sequences.pyx":260
 * 
 * 	# Returns a random sample of the sequences
 * 	def sample(self, n = 0):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param n: Number of sequences to pick. If 0, the same number will be selected as are in the full set.
 */

  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gnocis.sequences.sequences.sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_smp);
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_n);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":273
 * 
 * 	# Returns a renamed sequence set
 * 	def rename(self, newname):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param newname: New name.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_25rename(PyObject *__pyx_v_self, PyObject *__pyx_v_newname); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_24rename[] = "\n\t\t:param newname: New name.\n\t\t:type newname: str\n\t\t\n\t\t:return: Renamed sequence set.\n\t\t:rtype: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_25rename(PyObject *__pyx_v_self, PyObject *__pyx_v_newname) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rename (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_24rename(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), ((PyObject *)__pyx_v_newname));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_24rename(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_newname) {
  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("rename", 0);

  /* "gnocis/sequences.pyx":281
 * 		:rtype: sequences
 * 		"""
 * 		return sequences(newname, self.sequences)             # <<<<<<<<<<<<<<
 * 
 * 	# Gets a sequence set with windows from the sequences
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_newname);
  __Pyx_GIVEREF(__pyx_v_newname);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_newname);
  __Pyx_INCREF(__pyx_v_self->sequences);
  __Pyx_GIVEREF(__pyx_v_self->sequences);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->sequences);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 281, __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;

  /* "gnocis/sequences.pyx":273
 * 
 * 	# Returns a renamed sequence set
 * 	def rename(self, newname):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param newname: New name.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("gnocis.sequences.sequences.rename", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":284
 * 
 * 	# Gets a sequence set with windows from the sequences
 * 	def windows(self, size, step):             # <<<<<<<<<<<<<<
 * 		""" Generates and returns a set of sliding window sequences.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_27windows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_26windows[] = " Generates and returns a set of sliding window sequences.\n\t\t\n\t\t:param size: Window size.\n\t\t:param step: Window step size.\n\t\t:type size: int\n\t\t:type step: int\n\t\t\n\t\t:return: Sequence set of all sliding window sequences across all sequences in the set.\n\t\t:rtype: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_27windows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_step = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("windows (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_step,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_step)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("windows", 1, 2, 2, 1); __PYX_ERR(0, 284, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "windows") < 0)) __PYX_ERR(0, 284, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_size = values[0];
    __pyx_v_step = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("windows", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 284, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.windows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_26windows(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), __pyx_v_size, __pyx_v_step);

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_26windows(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_step) {
  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;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("windows", 0);

  /* "gnocis/sequences.pyx":295
 * 		:rtype: sequences
 * 		"""
 * 		return sequences(self.name + ' (windows - size: %d bp; step: %d bp)'%(size, step), list(streamSequenceWindows( self, size, step )))             # <<<<<<<<<<<<<<
 * 
 * 	# Gets a region set with windows from the sequences
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_windows_size);
  __pyx_t_2 += 18;
  __Pyx_GIVEREF(__pyx_kp_u_windows_size);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_windows_size);
  __pyx_t_4 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_size), __pyx_n_u_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __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, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp_step);
  __pyx_t_2 += 11;
  __Pyx_GIVEREF(__pyx_kp_u_bp_step);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_bp_step);
  __pyx_t_4 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_step), __pyx_n_u_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __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_INCREF(__pyx_kp_u_bp);
  __pyx_t_2 += 4;
  __Pyx_GIVEREF(__pyx_kp_u_bp);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_bp);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_self->name, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_streamSequenceWindows); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 295, __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;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, ((PyObject *)__pyx_v_self), __pyx_v_size, __pyx_v_step};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, ((PyObject *)__pyx_v_self), __pyx_v_size, __pyx_v_step};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_self));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, ((PyObject *)__pyx_v_self));
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_GIVEREF(__pyx_v_size);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_size);
    __Pyx_INCREF(__pyx_v_step);
    __Pyx_GIVEREF(__pyx_v_step);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_v_step);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
  __pyx_t_1 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 295, __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;

  /* "gnocis/sequences.pyx":284
 * 
 * 	# Gets a sequence set with windows from the sequences
 * 	def windows(self, size, step):             # <<<<<<<<<<<<<<
 * 		""" Generates and returns a set of sliding window sequences.
 * 
 */

  /* 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_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gnocis.sequences.sequences.windows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":298
 * 
 * 	# Gets a region set with windows from the sequences
 * 	def windowRegions(self, size, step):             # <<<<<<<<<<<<<<
 * 		""" Generates and returns a set of sliding window regions.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_29windowRegions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_28windowRegions[] = " Generates and returns a set of sliding window regions.\n\t\t\n\t\t:param size: Window size.\n\t\t:param step: Window step size.\n\t\t:type size: int\n\t\t:type step: int\n\t\t\n\t\t:return: Region set of all sliding window regions across all sequences in the set.\n\t\t:rtype: regions\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_29windowRegions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_step = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("windowRegions (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_step,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_step)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("windowRegions", 1, 2, 2, 1); __PYX_ERR(0, 298, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "windowRegions") < 0)) __PYX_ERR(0, 298, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_size = values[0];
    __pyx_v_step = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("windowRegions", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 298, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.windowRegions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_28windowRegions(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), __pyx_v_size, __pyx_v_step);

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_28windowRegions(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_step) {
  PyObject *__pyx_v_seqLengths = NULL;
  PyObject *__pyx_v_rset = NULL;
  PyObject *__pyx_v_cseq = NULL;
  PyObject *__pyx_v_cstart = 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;
  int __pyx_t_7;
  Py_UCS4 __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("windowRegions", 0);

  /* "gnocis/sequences.pyx":309
 * 		:rtype: regions
 * 		"""
 * 		seqLengths = self.sequenceLengths()             # <<<<<<<<<<<<<<
 * 		rset = []
 * 		for cseq in sorted(seqLengths.keys()):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_sequenceLengths); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_seqLengths = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":310
 * 		"""
 * 		seqLengths = self.sequenceLengths()
 * 		rset = []             # <<<<<<<<<<<<<<
 * 		for cseq in sorted(seqLengths.keys()):
 * 			cstart = 0
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rset = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":311
 * 		seqLengths = self.sequenceLengths()
 * 		rset = []
 * 		for cseq in sorted(seqLengths.keys()):             # <<<<<<<<<<<<<<
 * 			cstart = 0
 * 			while cstart + size <= seqLengths[cseq]:
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_seqLengths, __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_5 = PyList_Sort(__pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 311, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 311, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 311, __pyx_L1_error)
    #else
    __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_cseq, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "gnocis/sequences.pyx":312
 * 		rset = []
 * 		for cseq in sorted(seqLengths.keys()):
 * 			cstart = 0             # <<<<<<<<<<<<<<
 * 			while cstart + size <= seqLengths[cseq]:
 * 				rset.append( region(cseq, cstart, cstart+size-1) )
 */
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_XDECREF_SET(__pyx_v_cstart, __pyx_int_0);

    /* "gnocis/sequences.pyx":313
 * 		for cseq in sorted(seqLengths.keys()):
 * 			cstart = 0
 * 			while cstart + size <= seqLengths[cseq]:             # <<<<<<<<<<<<<<
 * 				rset.append( region(cseq, cstart, cstart+size-1) )
 * 				cstart += step
 */
    while (1) {
      __pyx_t_1 = PyNumber_Add(__pyx_v_cstart, __pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_seqLengths, __pyx_v_cseq); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (!__pyx_t_7) break;

      /* "gnocis/sequences.pyx":314
 * 			cstart = 0
 * 			while cstart + size <= seqLengths[cseq]:
 * 				rset.append( region(cseq, cstart, cstart+size-1) )             # <<<<<<<<<<<<<<
 * 				cstart += step
 * 		return regions('Windows (Window size: %d bp; step size: %d bp)'%(size, step), rset, initialSort = False)
 */
      __pyx_t_4 = PyNumber_Add(__pyx_v_cstart, __pyx_v_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 314, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_4, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 314, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_cseq);
      __Pyx_GIVEREF(__pyx_v_cseq);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_cseq);
      __Pyx_INCREF(__pyx_v_cstart);
      __Pyx_GIVEREF(__pyx_v_cstart);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_cstart);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_region), __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_rset, __pyx_t_2); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 314, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "gnocis/sequences.pyx":315
 * 			while cstart + size <= seqLengths[cseq]:
 * 				rset.append( region(cseq, cstart, cstart+size-1) )
 * 				cstart += step             # <<<<<<<<<<<<<<
 * 		return regions('Windows (Window size: %d bp; step size: %d bp)'%(size, step), rset, initialSort = False)
 * 
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_cstart, __pyx_v_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_cstart, __pyx_t_2);
      __pyx_t_2 = 0;
    }

    /* "gnocis/sequences.pyx":311
 * 		seqLengths = self.sequenceLengths()
 * 		rset = []
 * 		for cseq in sorted(seqLengths.keys()):             # <<<<<<<<<<<<<<
 * 			cstart = 0
 * 			while cstart + size <= seqLengths[cseq]:
 */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":316
 * 				rset.append( region(cseq, cstart, cstart+size-1) )
 * 				cstart += step
 * 		return regions('Windows (Window size: %d bp; step size: %d bp)'%(size, step), rset, initialSort = False)             # <<<<<<<<<<<<<<
 * 
 * 	# Gets the regions of origin for the sequences (if set)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = 0;
  __pyx_t_8 = 127;
  __Pyx_INCREF(__pyx_kp_u_Windows_Window_size);
  __pyx_t_6 += 22;
  __Pyx_GIVEREF(__pyx_kp_u_Windows_Window_size);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Windows_Window_size);
  __pyx_t_2 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_size), __pyx_n_u_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8;
  __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp_step_size);
  __pyx_t_6 += 16;
  __Pyx_GIVEREF(__pyx_kp_u_bp_step_size);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_bp_step_size);
  __pyx_t_2 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_step), __pyx_n_u_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8;
  __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp);
  __pyx_t_6 += 4;
  __Pyx_GIVEREF(__pyx_kp_u_bp);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_bp);
  __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __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_rset);
  __Pyx_GIVEREF(__pyx_v_rset);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_rset);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_initialSort, Py_False) < 0) __PYX_ERR(0, 316, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_regions), __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":298
 * 
 * 	# Gets a region set with windows from the sequences
 * 	def windowRegions(self, size, step):             # <<<<<<<<<<<<<<
 * 		""" Generates and returns a set of sliding window regions.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gnocis.sequences.sequences.windowRegions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seqLengths);
  __Pyx_XDECREF(__pyx_v_rset);
  __Pyx_XDECREF(__pyx_v_cseq);
  __Pyx_XDECREF(__pyx_v_cstart);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":319
 * 
 * 	# Gets the regions of origin for the sequences (if set)
 * 	def sourceRegions(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Region set of source regions for all sequences in the set.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_31sourceRegions(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_30sourceRegions[] = "\n\t\t:return: Region set of source regions for all sequences in the set.\n\t\t:rtype: regions\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_31sourceRegions(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sourceRegions (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_30sourceRegions(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_30sourceRegions(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  PyObject *__pyx_8genexpr4__pyx_v_s = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = 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("sourceRegions", 0);

  /* "gnocis/sequences.pyx":324
 * 		:rtype: regions
 * 		"""
 * 		return regions(self.name, [ s.sourceRegion for s in self.sequences if s.sourceRegion != None ])             # <<<<<<<<<<<<<<
 * 
 * 	# Adds a label to sequences
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_self->sequences == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 324, __pyx_L5_error)
    }
    __pyx_t_2 = __pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    for (;;) {
      if (__pyx_t_3 >= 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_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 324, __pyx_L5_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_XDECREF_SET(__pyx_8genexpr4__pyx_v_s, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr4__pyx_v_s, __pyx_n_s_sourceRegion); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 324, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 324, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_6) {
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr4__pyx_v_s, __pyx_n_s_sourceRegion); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 324, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 324, __pyx_L5_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s); __pyx_8genexpr4__pyx_v_s = 0;
    goto __pyx_L9_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s); __pyx_8genexpr4__pyx_v_s = 0;
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_regions), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __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;

  /* "gnocis/sequences.pyx":319
 * 
 * 	# Gets the regions of origin for the sequences (if set)
 * 	def sourceRegions(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Region set of source regions for all sequences in the set.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.sequences.sourceRegions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":327
 * 
 * 	# Adds a label to sequences
 * 	def label(self, label):             # <<<<<<<<<<<<<<
 * 		""" Adds a label to sequences.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_33label(PyObject *__pyx_v_self, PyObject *__pyx_v_label); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_32label[] = " Adds a label to sequences.\n\t\t\n\t\t:param label: Label to add to sequences.\n\t\t:type label: sequenceLabel\n\t\t\n\t\t:return: Sequences with label added.\n\t\t:rtype: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_33label(PyObject *__pyx_v_self, PyObject *__pyx_v_label) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("label (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_32label(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), ((PyObject *)__pyx_v_label));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_32label(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_label) {
  PyObject *__pyx_8genexpr5__pyx_v_s = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  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("label", 0);

  /* "gnocis/sequences.pyx":336
 * 		:rtype: sequences
 * 		"""
 * 		return sequences(self.name, [             # <<<<<<<<<<<<<<
 * 			s.label(label) for s in self.sequences
 * 		])
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);

    /* "gnocis/sequences.pyx":337
 * 		"""
 * 		return sequences(self.name, [
 * 			s.label(label) for s in self.sequences             # <<<<<<<<<<<<<<
 * 		])
 * 
 */
    if (unlikely(__pyx_v_self->sequences == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 337, __pyx_L5_error)
    }
    __pyx_t_2 = __pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    for (;;) {
      if (__pyx_t_3 >= 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_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 337, __pyx_L5_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 337, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_XDECREF_SET(__pyx_8genexpr5__pyx_v_s, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr5__pyx_v_s, __pyx_n_s_label); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 337, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_label) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_label);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 337, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 336, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_s); __pyx_8genexpr5__pyx_v_s = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_s); __pyx_8genexpr5__pyx_v_s = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */

  /* "gnocis/sequences.pyx":336
 * 		:rtype: sequences
 * 		"""
 * 		return sequences(self.name, [             # <<<<<<<<<<<<<<
 * 			s.label(label) for s in self.sequences
 * 		])
 */
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __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;

  /* "gnocis/sequences.pyx":327
 * 
 * 	# Adds a label to sequences
 * 	def label(self, label):             # <<<<<<<<<<<<<<
 * 		""" Adds a label to sequences.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("gnocis.sequences.sequences.label", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":341
 * 
 * 	# Gets sequences with the given label
 * 	def withLabel(self, labels, ensureAllLabels = True):             # <<<<<<<<<<<<<<
 * 		""" Extracts sequences with the given label or labels.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_35withLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_34withLabel[] = " Extracts sequences with the given label or labels.\n\t\t\n\t\t:param labels: List of labels, or single labels, to extract sequences with.\n\t\t:param ensureAllLabels: If true, an exception is raised if no sequences with a label were found. Default true.\n\t\t:type labels: list, sequenceLabel\n\t\t:type ensureAllLabels: bool\n\t\t\n\t\t:return: Single label or list of labels.\n\t\t:rtype: sequences, list\n\t\t\n\t\tIf multiple labels are given, a list of `sequences` instances are returned in the same order as the labels.\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_35withLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_labels = 0;
  PyObject *__pyx_v_ensureAllLabels = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("withLabel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_labels,&__pyx_n_s_ensureAllLabels,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_labels)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ensureAllLabels);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "withLabel") < 0)) __PYX_ERR(0, 341, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_labels = values[0];
    __pyx_v_ensureAllLabels = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("withLabel", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 341, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.withLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_34withLabel(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), __pyx_v_labels, __pyx_v_ensureAllLabels);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_9sequences_9withLabel_2generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":361
 * 				for lbl in labels
 * 			]
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):             # <<<<<<<<<<<<<<
 * 				raise Exception("Not all requested labels were found among the sequences")
 * 			return ret
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_9withLabel_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_3_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_3_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 361, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_9sequences_9withLabel_2generator10, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_withLabel_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 361, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.withLabel.genexpr", __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_6gnocis_9sequences_9sequences_9withLabel_2generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 361, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_ret)) { __Pyx_RaiseClosureNameError("ret"); __PYX_ERR(0, 361, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_ret)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_ret)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_ret; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_ret); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 361, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 361, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 361, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 361, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 361, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 361, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_seqs);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_seqs, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = PyObject_Length(__pyx_cur_scope->__pyx_v_seqs); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 361, __pyx_L1_error)
    __pyx_t_6 = ((__pyx_t_5 == 0) != 0);
    if (__pyx_t_6) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(Py_True);
      __pyx_r = Py_True;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
  }
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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;
}

/* "gnocis/sequences.pyx":341
 * 
 * 	# Gets sequences with the given label
 * 	def withLabel(self, labels, ensureAllLabels = True):             # <<<<<<<<<<<<<<
 * 		""" Extracts sequences with the given label or labels.
 * 
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_34withLabel(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_labels, PyObject *__pyx_v_ensureAllLabels) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *__pyx_cur_scope;
  PyObject *__pyx_8genexpr6__pyx_v_lbl = NULL;
  PyObject *__pyx_8genexpr7__pyx_v_s = NULL;
  PyObject *__pyx_gb_6gnocis_9sequences_9sequences_9withLabel_2generator10 = 0;
  PyObject *__pyx_8genexpr9__pyx_v_s = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  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 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("withLabel", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_2_withLabel(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_2_withLabel, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 341, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }

  /* "gnocis/sequences.pyx":354
 * 		If multiple labels are given, a list of `sequences` instances are returned in the same order as the labels.
 * 		"""
 * 		if isinstance(labels, list):             # <<<<<<<<<<<<<<
 * 			ret = [
 * 				sequences(self.name + ' (%s)'%lbl.name, [
 */
  __pyx_t_1 = PyList_Check(__pyx_v_labels); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "gnocis/sequences.pyx":355
 * 		"""
 * 		if isinstance(labels, list):
 * 			ret = [             # <<<<<<<<<<<<<<
 * 				sequences(self.name + ' (%s)'%lbl.name, [
 * 					s for s in self.sequences if lbl in s.labels
 */
    { /* enter inner scope */
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 355, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_3);

      /* "gnocis/sequences.pyx":359
 * 					s for s in self.sequences if lbl in s.labels
 * 				])
 * 				for lbl in labels             # <<<<<<<<<<<<<<
 * 			]
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):
 */
      if (likely(PyList_CheckExact(__pyx_v_labels)) || PyTuple_CheckExact(__pyx_v_labels)) {
        __pyx_t_4 = __pyx_v_labels; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_labels); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 359, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 359, __pyx_L6_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_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 359, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 359, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          } else {
            if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 359, __pyx_L6_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 359, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          }
        } else {
          __pyx_t_7 = __pyx_t_6(__pyx_t_4);
          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, 359, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_7);
        }
        __Pyx_XDECREF_SET(__pyx_8genexpr6__pyx_v_lbl, __pyx_t_7);
        __pyx_t_7 = 0;

        /* "gnocis/sequences.pyx":356
 * 		if isinstance(labels, list):
 * 			ret = [
 * 				sequences(self.name + ' (%s)'%lbl.name, [             # <<<<<<<<<<<<<<
 * 					s for s in self.sequences if lbl in s.labels
 * 				])
 */
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr6__pyx_v_lbl, __pyx_n_s_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 356, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_s, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 356, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_self->name, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 356, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        { /* enter inner scope */
          __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 356, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_8);

          /* "gnocis/sequences.pyx":357
 * 			ret = [
 * 				sequences(self.name + ' (%s)'%lbl.name, [
 * 					s for s in self.sequences if lbl in s.labels             # <<<<<<<<<<<<<<
 * 				])
 * 				for lbl in labels
 */
          if (unlikely(__pyx_v_self->sequences == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 357, __pyx_L11_error)
          }
          __pyx_t_9 = __pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_9); __pyx_t_10 = 0;
          for (;;) {
            if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_9)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_11 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_11); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 357, __pyx_L11_error)
            #else
            __pyx_t_11 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 357, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_11);
            #endif
            __Pyx_XDECREF_SET(__pyx_8genexpr7__pyx_v_s, __pyx_t_11);
            __pyx_t_11 = 0;
            __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr7__pyx_v_s, __pyx_n_s_labels); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 357, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_8genexpr6__pyx_v_lbl, __pyx_t_11, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 357, __pyx_L11_error)
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_1 = (__pyx_t_2 != 0);
            if (__pyx_t_1) {
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_8genexpr7__pyx_v_s))) __PYX_ERR(0, 356, __pyx_L11_error)
            }
          }
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_s); __pyx_8genexpr7__pyx_v_s = 0;
          goto __pyx_L15_exit_scope;
          __pyx_L11_error:;
          __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_s); __pyx_8genexpr7__pyx_v_s = 0;
          goto __pyx_L6_error;
          __pyx_L15_exit_scope:;
        } /* exit inner scope */

        /* "gnocis/sequences.pyx":356
 * 		if isinstance(labels, list):
 * 			ret = [
 * 				sequences(self.name + ' (%s)'%lbl.name, [             # <<<<<<<<<<<<<<
 * 					s for s in self.sequences if lbl in s.labels
 * 				])
 */
        __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 356, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
        __pyx_t_7 = 0;
        __pyx_t_8 = 0;
        __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 356, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 355, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

        /* "gnocis/sequences.pyx":359
 * 					s for s in self.sequences if lbl in s.labels
 * 				])
 * 				for lbl in labels             # <<<<<<<<<<<<<<
 * 			]
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):
 */
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_lbl); __pyx_8genexpr6__pyx_v_lbl = 0;
      goto __pyx_L16_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_lbl); __pyx_8genexpr6__pyx_v_lbl = 0;
      goto __pyx_L1_error;
      __pyx_L16_exit_scope:;
    } /* exit inner scope */
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_cur_scope->__pyx_v_ret = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":361
 * 				for lbl in labels
 * 			]
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):             # <<<<<<<<<<<<<<
 * 				raise Exception("Not all requested labels were found among the sequences")
 * 			return ret
 */
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ensureAllLabels); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 361, __pyx_L1_error)
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L18_bool_binop_done;
    }
    __pyx_t_3 = __pyx_pf_6gnocis_9sequences_9sequences_9withLabel_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_Generator_Next(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 361, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_2;
    __pyx_L18_bool_binop_done:;
    if (unlikely(__pyx_t_1)) {

      /* "gnocis/sequences.pyx":362
 * 			]
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):
 * 				raise Exception("Not all requested labels were found among the sequences")             # <<<<<<<<<<<<<<
 * 			return ret
 * 		else:
 */
      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 362, __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, 362, __pyx_L1_error)

      /* "gnocis/sequences.pyx":361
 * 				for lbl in labels
 * 			]
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):             # <<<<<<<<<<<<<<
 * 				raise Exception("Not all requested labels were found among the sequences")
 * 			return ret
 */
    }

    /* "gnocis/sequences.pyx":363
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):
 * 				raise Exception("Not all requested labels were found among the sequences")
 * 			return ret             # <<<<<<<<<<<<<<
 * 		else:
 * 			ret = sequences(self.name + ' (%s)'%labels.name, [
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ret);
    __pyx_r = __pyx_cur_scope->__pyx_v_ret;
    goto __pyx_L0;

    /* "gnocis/sequences.pyx":354
 * 		If multiple labels are given, a list of `sequences` instances are returned in the same order as the labels.
 * 		"""
 * 		if isinstance(labels, list):             # <<<<<<<<<<<<<<
 * 			ret = [
 * 				sequences(self.name + ' (%s)'%lbl.name, [
 */
  }

  /* "gnocis/sequences.pyx":365
 * 			return ret
 * 		else:
 * 			ret = sequences(self.name + ' (%s)'%labels.name, [             # <<<<<<<<<<<<<<
 * 				s for s in self.sequences if labels in s.labels
 * 			])
 */
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_labels, __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_s, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_self->name, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    { /* enter inner scope */
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 365, __pyx_L22_error)
      __Pyx_GOTREF(__pyx_t_3);

      /* "gnocis/sequences.pyx":366
 * 		else:
 * 			ret = sequences(self.name + ' (%s)'%labels.name, [
 * 				s for s in self.sequences if labels in s.labels             # <<<<<<<<<<<<<<
 * 			])
 * 			if ensureAllLabels and len(ret) == 0:
 */
      if (unlikely(__pyx_v_self->sequences == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 366, __pyx_L22_error)
      }
      __pyx_t_8 = __pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_8); __pyx_t_5 = 0;
      for (;;) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_8)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_9); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 366, __pyx_L22_error)
        #else
        __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 366, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_9);
        #endif
        __Pyx_XDECREF_SET(__pyx_8genexpr9__pyx_v_s, __pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr9__pyx_v_s, __pyx_n_s_labels); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 366, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_labels, __pyx_t_9, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 366, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_2 = (__pyx_t_1 != 0);
        if (__pyx_t_2) {
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_8genexpr9__pyx_v_s))) __PYX_ERR(0, 365, __pyx_L22_error)
        }
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_s); __pyx_8genexpr9__pyx_v_s = 0;
      goto __pyx_L26_exit_scope;
      __pyx_L22_error:;
      __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_s); __pyx_8genexpr9__pyx_v_s = 0;
      goto __pyx_L1_error;
      __pyx_L26_exit_scope:;
    } /* exit inner scope */

    /* "gnocis/sequences.pyx":365
 * 			return ret
 * 		else:
 * 			ret = sequences(self.name + ' (%s)'%labels.name, [             # <<<<<<<<<<<<<<
 * 				s for s in self.sequences if labels in s.labels
 * 			])
 */
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_cur_scope->__pyx_v_ret = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":368
 * 				s for s in self.sequences if labels in s.labels
 * 			])
 * 			if ensureAllLabels and len(ret) == 0:             # <<<<<<<<<<<<<<
 * 				raise Exception("No sequences with the requested label were found")
 * 			return ret
 */
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_ensureAllLabels); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 368, __pyx_L1_error)
    if (__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L28_bool_binop_done;
    }
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_ret;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_5 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 368, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = ((__pyx_t_5 == 0) != 0);
    __pyx_t_2 = __pyx_t_1;
    __pyx_L28_bool_binop_done:;
    if (unlikely(__pyx_t_2)) {

      /* "gnocis/sequences.pyx":369
 * 			])
 * 			if ensureAllLabels and len(ret) == 0:
 * 				raise Exception("No sequences with the requested label were found")             # <<<<<<<<<<<<<<
 * 			return ret
 * 
 */
      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 369, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 369, __pyx_L1_error)

      /* "gnocis/sequences.pyx":368
 * 				s for s in self.sequences if labels in s.labels
 * 			])
 * 			if ensureAllLabels and len(ret) == 0:             # <<<<<<<<<<<<<<
 * 				raise Exception("No sequences with the requested label were found")
 * 			return ret
 */
    }

    /* "gnocis/sequences.pyx":370
 * 			if ensureAllLabels and len(ret) == 0:
 * 				raise Exception("No sequences with the requested label were found")
 * 			return ret             # <<<<<<<<<<<<<<
 * 
 * 	# Gets labels for sequences
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_ret);
    __pyx_r = __pyx_cur_scope->__pyx_v_ret;
    goto __pyx_L0;
  }

  /* "gnocis/sequences.pyx":341
 * 
 * 	# Gets sequences with the given label
 * 	def withLabel(self, labels, ensureAllLabels = True):             # <<<<<<<<<<<<<<
 * 		""" Extracts sequences with the given label or labels.
 * 
 */

  /* function exit code */
  __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_11);
  __Pyx_AddTraceback("gnocis.sequences.sequences.withLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_lbl);
  __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_s);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_9sequences_9withLabel_2generator10);
  __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_s);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":373
 * 
 * 	# Gets labels for sequences
 * 	def labels(self):             # <<<<<<<<<<<<<<
 * 		""" Gets labels for sequences.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_37labels(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_36labels[] = " Gets labels for sequences.\n\t\t\n\t\t:return: Set of labels.\n\t\t:rtype: set\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_37labels(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("labels (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_36labels(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_9sequences_6labels_2generator11(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":379
 * 		:rtype: set
 * 		"""
 * 		return set(l for s in self.sequences for l in s.labels)             # <<<<<<<<<<<<<<
 * 
 * 	# Saves to FASTA file.
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_6labels_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_5_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_5_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 379, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_9sequences_6labels_2generator11, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_labels_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 379, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.labels.genexpr", __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_6gnocis_9sequences_9sequences_6labels_2generator11(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 379, __pyx_L1_error)
  __pyx_r = PySet_New(NULL); if (unlikely(!__pyx_r)) __PYX_ERR(0, 379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 379, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 379, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 379, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_s);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_s, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_s, __pyx_n_s_labels); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_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, 379, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 379, __pyx_L1_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, 379, __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, 379, __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, 379, __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, 379, __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, 379, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_l);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_l, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;
      if (unlikely(PySet_Add(__pyx_r, (PyObject*)__pyx_cur_scope->__pyx_v_l))) __PYX_ERR(0, 379, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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;
}

/* "gnocis/sequences.pyx":373
 * 
 * 	# Gets labels for sequences
 * 	def labels(self):             # <<<<<<<<<<<<<<
 * 		""" Gets labels for sequences.
 * 
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_36labels(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *__pyx_cur_scope;
  PyObject *__pyx_gb_6gnocis_9sequences_9sequences_6labels_2generator11 = 0;
  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("labels", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_4_labels(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_4_labels, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 373, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);

  /* "gnocis/sequences.pyx":379
 * 		:rtype: set
 * 		"""
 * 		return set(l for s in self.sequences for l in s.labels)             # <<<<<<<<<<<<<<
 * 
 * 	# Saves to FASTA file.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_pf_6gnocis_9sequences_9sequences_6labels_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_Generator_Next(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __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;

  /* "gnocis/sequences.pyx":373
 * 
 * 	# Gets labels for sequences
 * 	def labels(self):             # <<<<<<<<<<<<<<
 * 		""" Gets labels for sequences.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("gnocis.sequences.sequences.labels", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_9sequences_6labels_2generator11);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":382
 * 
 * 	# Saves to FASTA file.
 * 	def saveFASTA(self, path):             # <<<<<<<<<<<<<<
 * 		""" Saves the regions to a FASTA file.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_39saveFASTA(PyObject *__pyx_v_self, PyObject *__pyx_v_path); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_38saveFASTA[] = " Saves the regions to a FASTA file.\n\t\t\n\t\t:param path: Output file path.\n\t\t:type path: str\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_39saveFASTA(PyObject *__pyx_v_self, PyObject *__pyx_v_path) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("saveFASTA (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_38saveFASTA(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), ((PyObject *)__pyx_v_path));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_38saveFASTA(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_path) {
  PyObject *__pyx_v_fOut = NULL;
  PyObject *__pyx_v_seq = 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;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  Py_ssize_t __pyx_t_9;
  Py_ssize_t __pyx_t_10;
  Py_UCS4 __pyx_t_11;
  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;
  int __pyx_t_17;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  int __pyx_t_20;
  int __pyx_t_21;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("saveFASTA", 0);

  /* "gnocis/sequences.pyx":388
 * 		:type path: str
 * 		"""
 * 		with open(path, 'w') as fOut:             # <<<<<<<<<<<<<<
 * 			for seq in self.sequences:
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))
 */
  /*with:*/ {
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_path);
    __Pyx_GIVEREF(__pyx_v_path);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_path);
    __Pyx_INCREF(__pyx_n_u_w);
    __Pyx_GIVEREF(__pyx_n_u_w);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_w);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 388, __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, 388, __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, 388, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __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_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        /*try:*/ {
          __pyx_v_fOut = __pyx_t_4;
          __pyx_t_4 = 0;

          /* "gnocis/sequences.pyx":389
 * 		"""
 * 		with open(path, 'w') as fOut:
 * 			for seq in self.sequences:             # <<<<<<<<<<<<<<
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))
 * 
 */
          if (unlikely(__pyx_v_self->sequences == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(0, 389, __pyx_L7_error)
          }
          __pyx_t_4 = __pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0;
          for (;;) {
            if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 389, __pyx_L7_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
            __Pyx_XDECREF_SET(__pyx_v_seq, __pyx_t_2);
            __pyx_t_2 = 0;

            /* "gnocis/sequences.pyx":390
 * 		with open(path, 'w') as fOut:
 * 			for seq in self.sequences:
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))             # <<<<<<<<<<<<<<
 * 
 * 	# Gets the sequence lengths
 */
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fOut, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_10 = 0;
            __pyx_t_11 = 127;
            __Pyx_INCREF(__pyx_kp_u_);
            __pyx_t_10 += 1;
            __Pyx_GIVEREF(__pyx_kp_u_);
            PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_);
            __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_seq, __pyx_n_s_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_replace); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_12), __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_11;
            __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
            __Pyx_GIVEREF(__pyx_t_13);
            PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_13);
            __pyx_t_13 = 0;
            __Pyx_INCREF(__pyx_kp_u__19);
            __pyx_t_10 += 1;
            __Pyx_GIVEREF(__pyx_kp_u__19);
            PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__19);
            __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_re); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sub); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_seq, __pyx_n_s_seq); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_re); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_DOTALL); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_15 = NULL;
            __pyx_t_17 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
              __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
              if (likely(__pyx_t_15)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
                __Pyx_INCREF(__pyx_t_15);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_14, function);
                __pyx_t_17 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_14)) {
              PyObject *__pyx_temp[6] = {__pyx_t_15, __pyx_kp_u_65, __pyx_kp_u_1, __pyx_t_12, __pyx_int_0, __pyx_t_16};
              __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_17, 5+__pyx_t_17); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 390, __pyx_L7_error)
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
              PyObject *__pyx_temp[6] = {__pyx_t_15, __pyx_kp_u_65, __pyx_kp_u_1, __pyx_t_12, __pyx_int_0, __pyx_t_16};
              __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_17, 5+__pyx_t_17); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 390, __pyx_L7_error)
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            } else
            #endif
            {
              __pyx_t_18 = PyTuple_New(5+__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 390, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_18);
              if (__pyx_t_15) {
                __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_15); __pyx_t_15 = NULL;
              }
              __Pyx_INCREF(__pyx_kp_u_65);
              __Pyx_GIVEREF(__pyx_kp_u_65);
              PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_17, __pyx_kp_u_65);
              __Pyx_INCREF(__pyx_kp_u_1);
              __Pyx_GIVEREF(__pyx_kp_u_1);
              PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_17, __pyx_kp_u_1);
              __Pyx_GIVEREF(__pyx_t_12);
              PyTuple_SET_ITEM(__pyx_t_18, 2+__pyx_t_17, __pyx_t_12);
              __Pyx_INCREF(__pyx_int_0);
              __Pyx_GIVEREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_18, 3+__pyx_t_17, __pyx_int_0);
              __Pyx_GIVEREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_18, 4+__pyx_t_17, __pyx_t_16);
              __pyx_t_12 = 0;
              __pyx_t_16 = 0;
              __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_18, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 390, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            }
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_13), __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_11;
            __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_INCREF(__pyx_kp_u__19);
            __pyx_t_10 += 1;
            __Pyx_GIVEREF(__pyx_kp_u__19);
            PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__19);
            __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = NULL;
            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_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_14) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_14);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 390, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

            /* "gnocis/sequences.pyx":389
 * 		"""
 * 		with open(path, 'w') as fOut:
 * 			for seq in self.sequences:             # <<<<<<<<<<<<<<
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))
 * 
 */
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

          /* "gnocis/sequences.pyx":388
 * 		:type path: str
 * 		"""
 * 		with open(path, 'w') as fOut:             # <<<<<<<<<<<<<<
 * 			for seq in self.sequences:
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))
 */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 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("gnocis.sequences.sequences.saveFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_2, &__pyx_t_1) < 0) __PYX_ERR(0, 388, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_14 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 388, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_14, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 388, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (__pyx_t_20 < 0) __PYX_ERR(0, 388, __pyx_L9_except_error)
          __pyx_t_21 = ((!(__pyx_t_20 != 0)) != 0);
          if (__pyx_t_21) {
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_XGIVEREF(__pyx_t_1);
            __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_2, __pyx_t_1);
            __pyx_t_4 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; 
            __PYX_ERR(0, 388, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_3) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__20, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 388, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L18;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L1_error;
    __pyx_L18:;
  }

  /* "gnocis/sequences.pyx":382
 * 
 * 	# Saves to FASTA file.
 * 	def saveFASTA(self, path):             # <<<<<<<<<<<<<<
 * 		""" Saves the regions to a FASTA file.
 * 
 */

  /* 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_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("gnocis.sequences.sequences.saveFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_fOut);
  __Pyx_XDECREF(__pyx_v_seq);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":393
 * 
 * 	# Gets the sequence lengths
 * 	def sequenceLengths(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns a dictionary of the lengths of all sequences in the set.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_41sequenceLengths(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_40sequenceLengths[] = "\n\t\t:return: Returns a dictionary of the lengths of all sequences in the set.\n\t\t:rtype: dict\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_41sequenceLengths(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sequenceLengths (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_40sequenceLengths(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_40sequenceLengths(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  PyObject *__pyx_9genexpr11__pyx_v_cseq = 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;
  Py_ssize_t __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sequenceLengths", 0);

  /* "gnocis/sequences.pyx":400
 * 		cdef dict ret
 * 		cdef object cseq, blk
 * 		return { cseq.name: len(cseq) for cseq in self }             # <<<<<<<<<<<<<<
 * 
 * 	# Prints basic statistics about the set.
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(((PyObject *)__pyx_v_self))) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
      __pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 400, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 400, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 400, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 400, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 400, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 400, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 400, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_9genexpr11__pyx_v_cseq, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr11__pyx_v_cseq, __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 400, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyObject_Length(__pyx_9genexpr11__pyx_v_cseq); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 400, __pyx_L5_error)
      __pyx_t_7 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 400, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_t_5, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 400, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_9genexpr11__pyx_v_cseq); __pyx_9genexpr11__pyx_v_cseq = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr11__pyx_v_cseq); __pyx_9genexpr11__pyx_v_cseq = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":393
 * 
 * 	# Gets the sequence lengths
 * 	def sequenceLengths(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns a dictionary of the lengths of all sequences in the set.
 */

  /* 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_7);
  __Pyx_AddTraceback("gnocis.sequences.sequences.sequenceLengths", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_9genexpr11__pyx_v_cseq);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":403
 * 
 * 	# Prints basic statistics about the set.
 * 	def printStatistics(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Outputs basic statistics.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_43printStatistics(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gnocis_9sequences_9sequences_42printStatistics[] = "\n\t\tOutputs basic statistics.\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_43printStatistics(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("printStatistics (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_42printStatistics(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_2generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":410
 * 		print(' - Sequences: %d'%len(self.sequences))
 * 		if len(self.sequences) > 0:
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))             # <<<<<<<<<<<<<<
 * 		print(' - Total length: %d nt'%( sum( len(s) for s in self.sequences ) ))
 * 
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_7_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_7_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 410, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_2generator12, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_printStatistics_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.printStatistics.genexpr", __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_6gnocis_9sequences_9sequences_15printStatistics_2generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 410, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 410, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 410, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 410, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_s);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_s, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_4 = PyObject_Length(__pyx_cur_scope->__pyx_v_s); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 410, __pyx_L1_error)
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 410, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("genexpr", __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_6gnocis_9sequences_9sequences_15printStatistics_5generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_3genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_8_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_8_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 410, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_5generator13, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_printStatistics_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.printStatistics.genexpr", __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_6gnocis_9sequences_9sequences_15printStatistics_5generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 410, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 410, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 410, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 410, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_s);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_s, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_4 = PyObject_Length(__pyx_cur_scope->__pyx_v_s); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 410, __pyx_L1_error)
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 410, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("genexpr", __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_6gnocis_9sequences_9sequences_15printStatistics_8generator14(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_6genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_9_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_9_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 410, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_8generator14, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_printStatistics_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.printStatistics.genexpr", __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_6gnocis_9sequences_9sequences_15printStatistics_8generator14(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 410, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 410, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 410, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 410, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_s);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_s, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_4 = PyObject_Length(__pyx_cur_scope->__pyx_v_s); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 410, __pyx_L1_error)
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 410, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("genexpr", __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_6gnocis_9sequences_9sequences_15printStatistics_11generator15(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":411
 * 		if len(self.sequences) > 0:
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))
 * 		print(' - Total length: %d nt'%( sum( len(s) for s in self.sequences ) ))             # <<<<<<<<<<<<<<
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_9genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_10_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_10_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 411, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_11generator15, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_printStatistics_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 411, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequences.printStatistics.genexpr", __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_6gnocis_9sequences_9sequences_15printStatistics_11generator15(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 411, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 411, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 411, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->sequences; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 411, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 411, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_s);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_s, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_4 = PyObject_Length(__pyx_cur_scope->__pyx_v_s); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 411, __pyx_L1_error)
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 411, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 411, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

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

/* "gnocis/sequences.pyx":403
 * 
 * 	# Prints basic statistics about the set.
 * 	def printStatistics(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Outputs basic statistics.
 */

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_42printStatistics(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *__pyx_cur_scope;
  PyObject *__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_2generator12 = 0;
  PyObject *__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_5generator13 = 0;
  PyObject *__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_8generator14 = 0;
  PyObject *__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_11generator15 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  Py_UCS4 __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  Py_ssize_t __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("printStatistics", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_6_printStatistics(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_6_printStatistics, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 403, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);

  /* "gnocis/sequences.pyx":407
 * 		Outputs basic statistics.
 * 		"""
 * 		print('Sequence set statistics - ' + self.name)             # <<<<<<<<<<<<<<
 * 		print(' - Sequences: %d'%len(self.sequences))
 * 		if len(self.sequences) > 0:
 */
  __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_Sequence_set_statistics, __pyx_cur_scope->__pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __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;

  /* "gnocis/sequences.pyx":408
 * 		"""
 * 		print('Sequence set statistics - ' + self.name)
 * 		print(' - Sequences: %d'%len(self.sequences))             # <<<<<<<<<<<<<<
 * 		if len(self.sequences) > 0:
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))
 */
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_self->sequences;
  __Pyx_INCREF(__pyx_t_2);
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 408, __pyx_L1_error)
  }
  __pyx_t_3 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_Sequences_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __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, 408, __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;

  /* "gnocis/sequences.pyx":409
 * 		print('Sequence set statistics - ' + self.name)
 * 		print(' - Sequences: %d'%len(self.sequences))
 * 		if len(self.sequences) > 0:             # <<<<<<<<<<<<<<
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))
 * 		print(' - Total length: %d nt'%( sum( len(s) for s in self.sequences ) ))
 */
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_self->sequences;
  __Pyx_INCREF(__pyx_t_2);
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 409, __pyx_L1_error)
  }
  __pyx_t_3 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 409, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = ((__pyx_t_3 > 0) != 0);
  if (__pyx_t_4) {

    /* "gnocis/sequences.pyx":410
 * 		print(' - Sequences: %d'%len(self.sequences))
 * 		if len(self.sequences) > 0:
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))             # <<<<<<<<<<<<<<
 * 		print(' - Total length: %d nt'%( sum( len(s) for s in self.sequences ) ))
 * 
 */
    __pyx_t_2 = PyTuple_New(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Mean_length);
    __pyx_t_3 += 16;
    __Pyx_GIVEREF(__pyx_kp_u_Mean_length);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Mean_length);
    __pyx_t_1 = __pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->sequences;
    __Pyx_INCREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 410, __pyx_L1_error)
    }
    __pyx_t_7 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Format(__pyx_t_8, __pyx_kp_u_2f); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5;
    __pyx_t_3 += __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_nt_min);
    __pyx_t_3 += 11;
    __Pyx_GIVEREF(__pyx_kp_u_nt_min);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_nt_min);
    __pyx_t_1 = __pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_3genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_min, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_8), __pyx_n_u_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5;
    __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_nt_max);
    __pyx_t_3 += 12;
    __Pyx_GIVEREF(__pyx_kp_u_nt_max);
    PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_nt_max);
    __pyx_t_1 = __pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_6genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_max, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_8), __pyx_n_u_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5;
    __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_nt);
    __pyx_t_3 += 4;
    __Pyx_GIVEREF(__pyx_kp_u_nt);
    PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_kp_u_nt);
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 7, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __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, 410, __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;

    /* "gnocis/sequences.pyx":409
 * 		print('Sequence set statistics - ' + self.name)
 * 		print(' - Sequences: %d'%len(self.sequences))
 * 		if len(self.sequences) > 0:             # <<<<<<<<<<<<<<
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))
 * 		print(' - Total length: %d nt'%( sum( len(s) for s in self.sequences ) ))
 */
  }

  /* "gnocis/sequences.pyx":411
 * 		if len(self.sequences) > 0:
 * 			print(' - Mean length: %.2f nt (min.: %d nt - max.: %d nt)'%( sum( len(s) for s in self.sequences ) / len(self.sequences), min( len(s) for s in self.sequences), max( len(s) for s in self.sequences) ))
 * 		print(' - Total length: %d nt'%( sum( len(s) for s in self.sequences ) ))             # <<<<<<<<<<<<<<
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 */
  __pyx_t_2 = __pyx_pf_6gnocis_9sequences_9sequences_15printStatistics_9genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Total_length_d_nt, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __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_print, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __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;

  /* "gnocis/sequences.pyx":403
 * 
 * 	# Prints basic statistics about the set.
 * 	def printStatistics(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Outputs basic statistics.
 */

  /* 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_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gnocis.sequences.sequences.printStatistics", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_2generator12);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_5generator13);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_8generator14);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_9sequences_15printStatistics_11generator15);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":39
 * cdef class sequences:
 * 
 * 	cdef public str name             # <<<<<<<<<<<<<<
 * 	cdef public list sequences
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_4name___get__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_9sequences_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_9sequences_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_4name_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_9sequences_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 39, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequences.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_9sequences_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_9sequences_4name_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_4name_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_9sequences_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)Py_None);

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

/* "gnocis/sequences.pxd":40
 * 
 * 	cdef public str name
 * 	cdef public list sequences             # <<<<<<<<<<<<<<
 * 
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_9sequences_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_9sequences_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_9sequences___get__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_9sequences_9sequences_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_9sequences_9sequences_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_9sequences_2__set__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_9sequences_9sequences_2__set__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 40, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->sequences);
  __Pyx_DECREF(__pyx_v_self->sequences);
  __pyx_v_self->sequences = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequences.sequences.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_9sequences_9sequences_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_9sequences_9sequences_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_9sequences_4__del__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_9sequences_9sequences_4__del__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->sequences);
  __Pyx_DECREF(__pyx_v_self->sequences);
  __pyx_v_self->sequences = ((PyObject*)Py_None);

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_45__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_45__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_44__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_44__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.name, self.sequences)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name);
  __Pyx_INCREF(__pyx_v_self->sequences);
  __Pyx_GIVEREF(__pyx_v_self->sequences);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->sequences);
  __pyx_v_state = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.name, self.sequences)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v__dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "(tree fragment)":7
 *     state = (self.name, self.sequences)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_2 = (__pyx_v__dict != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.name is not None or self.sequences is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.name, self.sequences)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.name is not None or self.sequences is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, None), state
 */
  /*else*/ {
    __pyx_t_2 = (__pyx_v_self->name != ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_2 != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_5 = (__pyx_v_self->sequences != ((PyObject*)Py_None));
    __pyx_t_2 = (__pyx_t_5 != 0);
    __pyx_t_3 = __pyx_t_2;
    __pyx_L4_bool_binop_done:;
    __pyx_v_use_setstate = __pyx_t_3;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.name is not None or self.sequences is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, None), state
 *     else:
 */
  __pyx_t_3 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":13
 *         use_setstate = self.name is not None or self.sequences is not None
 *     if use_setstate:
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_sequences); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_188562974);
    __Pyx_GIVEREF(__pyx_int_188562974);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_188562974);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.name is not None or self.sequences is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, None), state
 *     else:
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequences__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_sequences); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_188562974);
    __Pyx_GIVEREF(__pyx_int_188562974);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_188562974);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
    __pyx_t_6 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("gnocis.sequences.sequences.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequences__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_47__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_9sequences_47__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_9sequences_46__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_9sequences_46__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequences__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequences__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequences, (type(self), 0xb3d3e1e, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequences__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequences.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":414
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTA(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a FASTA file.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_1loadFASTA(PyObject *__pyx_self, PyObject *__pyx_v_path); /*proto*/
static char __pyx_doc_6gnocis_9sequences_loadFASTA[] = " Loads sequences from a FASTA file.\n\t\n\t:param path: Path to the input file.\n\t:type path: str\n\t\n\t:return: Loaded sequences.\n\t:rtype: sequences\n\t";
static PyMethodDef __pyx_mdef_6gnocis_9sequences_1loadFASTA = {"loadFASTA", (PyCFunction)__pyx_pw_6gnocis_9sequences_1loadFASTA, METH_O, __pyx_doc_6gnocis_9sequences_loadFASTA};
static PyObject *__pyx_pw_6gnocis_9sequences_1loadFASTA(PyObject *__pyx_self, PyObject *__pyx_v_path) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("loadFASTA (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_loadFASTA(__pyx_self, ((PyObject *)__pyx_v_path));

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

static PyObject *__pyx_pf_6gnocis_9sequences_loadFASTA(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path) {
  PyObject *__pyx_v_lst = NULL;
  PyObject *__pyx_v_pathName = NULL;
  PyObject *__pyx_v_f = NULL;
  PyObject *__pyx_v_line = 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;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  Py_ssize_t __pyx_t_9;
  PyObject *(*__pyx_t_10)(PyObject *);
  int __pyx_t_11;
  int __pyx_t_12;
  Py_ssize_t __pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("loadFASTA", 0);

  /* "gnocis/sequences.pyx":423
 * 	:rtype: sequences
 * 	"""
 * 	lst = []             # <<<<<<<<<<<<<<
 * 	pathName = path.split('/')[-1]
 * 	with open(path, 'r') as f:
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_lst = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":424
 * 	"""
 * 	lst = []
 * 	pathName = path.split('/')[-1]             # <<<<<<<<<<<<<<
 * 	with open(path, 'r') as f:
 * 		for line in f:
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_path, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u__9) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u__9);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_pathName = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":425
 * 	lst = []
 * 	pathName = path.split('/')[-1]
 * 	with open(path, 'r') as f:             # <<<<<<<<<<<<<<
 * 		for line in f:
 * 			line = line.strip()
 */
  /*with:*/ {
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_path);
    __Pyx_GIVEREF(__pyx_v_path);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_path);
    __Pyx_INCREF(__pyx_n_u_r);
    __Pyx_GIVEREF(__pyx_n_u_r);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_u_r);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 425, __pyx_L3_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_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        /*try:*/ {
          __pyx_v_f = __pyx_t_3;
          __pyx_t_3 = 0;

          /* "gnocis/sequences.pyx":426
 * 	pathName = path.split('/')[-1]
 * 	with open(path, 'r') as f:
 * 		for line in f:             # <<<<<<<<<<<<<<
 * 			line = line.strip()
 * 			if line.startswith('>'):
 */
          if (likely(PyList_CheckExact(__pyx_v_f)) || PyTuple_CheckExact(__pyx_v_f)) {
            __pyx_t_3 = __pyx_v_f; __Pyx_INCREF(__pyx_t_3); __pyx_t_9 = 0;
            __pyx_t_10 = NULL;
          } else {
            __pyx_t_9 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_f); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 426, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_10 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 426, __pyx_L7_error)
          }
          for (;;) {
            if (likely(!__pyx_t_10)) {
              if (likely(PyList_CheckExact(__pyx_t_3))) {
                if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_3)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 426, __pyx_L7_error)
                #else
                __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 426, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              } else {
                if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 426, __pyx_L7_error)
                #else
                __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 426, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              }
            } else {
              __pyx_t_1 = __pyx_t_10(__pyx_t_3);
              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, 426, __pyx_L7_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_1);
            }
            __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_1);
            __pyx_t_1 = 0;

            /* "gnocis/sequences.pyx":427
 * 	with open(path, 'r') as f:
 * 		for line in f:
 * 			line = line.strip()             # <<<<<<<<<<<<<<
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 */
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_line, __pyx_n_s_strip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 427, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF_SET(__pyx_v_line, __pyx_t_1);
            __pyx_t_1 = 0;

            /* "gnocis/sequences.pyx":428
 * 		for line in f:
 * 			line = line.strip()
 * 			if line.startswith('>'):             # <<<<<<<<<<<<<<
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:
 */
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_line, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 428, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_kp_u_) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 428, __pyx_L7_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_11) {

              /* "gnocis/sequences.pyx":429
 * 			line = line.strip()
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))             # <<<<<<<<<<<<<<
 * 			elif len(lst) == 0:
 * 				raise Exception('FASTA sequence error')
 */
              __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_line, 1, 0, NULL, NULL, &__pyx_slice__21, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 429, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
              __Pyx_INCREF(__pyx_kp_u__2);
              __Pyx_GIVEREF(__pyx_kp_u__2);
              PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u__2);
              __Pyx_INCREF(__pyx_v_path);
              __Pyx_GIVEREF(__pyx_v_path);
              PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_path);
              __pyx_t_1 = 0;
              __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = PyNumber_Add(__pyx_kp_u_From_FASTA_file, __pyx_v_pathName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 429, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_annotation, __pyx_t_5) < 0) __PYX_ERR(0, 429, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 429, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_lst, __pyx_t_5); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 429, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

              /* "gnocis/sequences.pyx":428
 * 		for line in f:
 * 			line = line.strip()
 * 			if line.startswith('>'):             # <<<<<<<<<<<<<<
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:
 */
              goto __pyx_L15;
            }

            /* "gnocis/sequences.pyx":430
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:             # <<<<<<<<<<<<<<
 * 				raise Exception('FASTA sequence error')
 * 			else:
 */
            __pyx_t_13 = PyList_GET_SIZE(__pyx_v_lst); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 430, __pyx_L7_error)
            __pyx_t_11 = ((__pyx_t_13 == 0) != 0);
            if (unlikely(__pyx_t_11)) {

              /* "gnocis/sequences.pyx":431
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:
 * 				raise Exception('FASTA sequence error')             # <<<<<<<<<<<<<<
 * 			else:
 * 				lst[-1].seq += line
 */
              __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 431, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_Raise(__pyx_t_5, 0, 0, 0);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __PYX_ERR(0, 431, __pyx_L7_error)

              /* "gnocis/sequences.pyx":430
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:             # <<<<<<<<<<<<<<
 * 				raise Exception('FASTA sequence error')
 * 			else:
 */
            }

            /* "gnocis/sequences.pyx":433
 * 				raise Exception('FASTA sequence error')
 * 			else:
 * 				lst[-1].seq += line             # <<<<<<<<<<<<<<
 * 	return sequences('FASTA file: ' + pathName, lst)
 * 
 */
            /*else*/ {
              __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_lst, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 433, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_seq); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_v_line); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 433, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_seq, __pyx_t_2) < 0) __PYX_ERR(0, 433, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            }
            __pyx_L15:;

            /* "gnocis/sequences.pyx":426
 * 	pathName = path.split('/')[-1]
 * 	with open(path, 'r') as f:
 * 		for line in f:             # <<<<<<<<<<<<<<
 * 			line = line.strip()
 * 			if line.startswith('>'):
 */
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

          /* "gnocis/sequences.pyx":425
 * 	lst = []
 * 	pathName = path.split('/')[-1]
 * 	with open(path, 'r') as f:             # <<<<<<<<<<<<<<
 * 		for line in f:
 * 			line = line.strip()
 */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("gnocis.sequences.loadFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_2) < 0) __PYX_ERR(0, 425, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 425, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(0, 425, __pyx_L9_except_error)
          __pyx_t_15 = ((!(__pyx_t_11 != 0)) != 0);
          if (__pyx_t_15) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_2);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_2);
            __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_2 = 0; 
            __PYX_ERR(0, 425, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__20, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 425, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L19;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L19:;
  }

  /* "gnocis/sequences.pyx":434
 * 			else:
 * 				lst[-1].seq += line
 * 	return sequences('FASTA file: ' + pathName, lst)             # <<<<<<<<<<<<<<
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyNumber_Add(__pyx_kp_u_FASTA_file, __pyx_v_pathName); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_lst);
  __Pyx_GIVEREF(__pyx_v_lst);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_lst);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":414
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTA(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a FASTA file.
 * 
 */

  /* 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("gnocis.sequences.loadFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_lst);
  __Pyx_XDECREF(__pyx_v_pathName);
  __Pyx_XDECREF(__pyx_v_f);
  __Pyx_XDECREF(__pyx_v_line);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":437
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTAGZ(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a gzipped FASTA file.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3loadFASTAGZ(PyObject *__pyx_self, PyObject *__pyx_v_path); /*proto*/
static char __pyx_doc_6gnocis_9sequences_2loadFASTAGZ[] = " Loads sequences from a gzipped FASTA file.\n\t\n\t:param path: Path to the input file.\n\t:type path: str\n\t\n\t:return: Loaded sequences.\n\t:rtype: sequences\n\t";
static PyMethodDef __pyx_mdef_6gnocis_9sequences_3loadFASTAGZ = {"loadFASTAGZ", (PyCFunction)__pyx_pw_6gnocis_9sequences_3loadFASTAGZ, METH_O, __pyx_doc_6gnocis_9sequences_2loadFASTAGZ};
static PyObject *__pyx_pw_6gnocis_9sequences_3loadFASTAGZ(PyObject *__pyx_self, PyObject *__pyx_v_path) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("loadFASTAGZ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_2loadFASTAGZ(__pyx_self, ((PyObject *)__pyx_v_path));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_11loadFASTAGZ_2generator16(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":449
 * 	pathName = path.split('/')[-1]
 * 	with gzip.open(path, 'rb') as f:
 * 		for line in (y.decode('utf-8') for y in f):             # <<<<<<<<<<<<<<
 * 			line = line.strip()
 * 			if line.startswith('>'):
 */

static PyObject *__pyx_pf_6gnocis_9sequences_11loadFASTAGZ_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_12_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_12_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 449, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_11loadFASTAGZ_2generator16, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_loadFASTAGZ_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 449, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.loadFASTAGZ.genexpr", __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_6gnocis_9sequences_11loadFASTAGZ_2generator16(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 449, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_f)) { __Pyx_RaiseClosureNameError("f"); __PYX_ERR(0, 449, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_f)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_f)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_f; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_f); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 449, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 449, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 449, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 449, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 449, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 449, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 449, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_y);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_y, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_y, __pyx_n_s_decode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 449, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_kp_u_utf_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_kp_u_utf_8);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 449, __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;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 449, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __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("genexpr", __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;
}

/* "gnocis/sequences.pyx":437
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTAGZ(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a gzipped FASTA file.
 * 
 */

static PyObject *__pyx_pf_6gnocis_9sequences_2loadFASTAGZ(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *__pyx_cur_scope;
  PyObject *__pyx_v_lst = NULL;
  PyObject *__pyx_v_pathName = NULL;
  PyObject *__pyx_v_line = NULL;
  PyObject *__pyx_gb_6gnocis_9sequences_11loadFASTAGZ_2generator16 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  PyObject *(*__pyx_t_11)(PyObject *);
  int __pyx_t_12;
  int __pyx_t_13;
  Py_ssize_t __pyx_t_14;
  PyObject *__pyx_t_15 = NULL;
  int __pyx_t_16;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("loadFASTAGZ", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 437, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }

  /* "gnocis/sequences.pyx":446
 * 	:rtype: sequences
 * 	"""
 * 	lst = []             # <<<<<<<<<<<<<<
 * 	pathName = path.split('/')[-1]
 * 	with gzip.open(path, 'rb') as f:
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_lst = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":447
 * 	"""
 * 	lst = []
 * 	pathName = path.split('/')[-1]             # <<<<<<<<<<<<<<
 * 	with gzip.open(path, 'rb') as f:
 * 		for line in (y.decode('utf-8') for y in f):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_path, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u__9) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u__9);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_pathName = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":448
 * 	lst = []
 * 	pathName = path.split('/')[-1]
 * 	with gzip.open(path, 'rb') as f:             # <<<<<<<<<<<<<<
 * 		for line in (y.decode('utf-8') for y in f):
 * 			line = line.strip()
 */
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_gzip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_open); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __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_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;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_path, __pyx_n_u_rb};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 448, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_path, __pyx_n_u_rb};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 448, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 448, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_path);
      __Pyx_GIVEREF(__pyx_v_path);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_path);
      __Pyx_INCREF(__pyx_n_u_rb);
      __Pyx_GIVEREF(__pyx_n_u_rb);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_n_u_rb);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 448, __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;
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 448, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 448, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __pyx_t_3;
    __pyx_t_3 = 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_GIVEREF(__pyx_t_5);
          __pyx_cur_scope->__pyx_v_f = __pyx_t_5;
          __pyx_t_5 = 0;

          /* "gnocis/sequences.pyx":449
 * 	pathName = path.split('/')[-1]
 * 	with gzip.open(path, 'rb') as f:
 * 		for line in (y.decode('utf-8') for y in f):             # <<<<<<<<<<<<<<
 * 			line = line.strip()
 * 			if line.startswith('>'):
 */
          __pyx_t_5 = __pyx_pf_6gnocis_9sequences_11loadFASTAGZ_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 449, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
            __pyx_t_2 = __pyx_t_5; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
            __pyx_t_11 = NULL;
          } else {
            __pyx_t_10 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 449, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_11 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 449, __pyx_L7_error)
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          for (;;) {
            if (likely(!__pyx_t_11)) {
              if (likely(PyList_CheckExact(__pyx_t_2))) {
                if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 449, __pyx_L7_error)
                #else
                __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 449, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_5);
                #endif
              } else {
                if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 449, __pyx_L7_error)
                #else
                __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 449, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_5);
                #endif
              }
            } else {
              __pyx_t_5 = __pyx_t_11(__pyx_t_2);
              if (unlikely(!__pyx_t_5)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 449, __pyx_L7_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_5);
            }
            __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_5);
            __pyx_t_5 = 0;

            /* "gnocis/sequences.pyx":450
 * 	with gzip.open(path, 'rb') as f:
 * 		for line in (y.decode('utf-8') for y in f):
 * 			line = line.strip()             # <<<<<<<<<<<<<<
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 */
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_line, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 450, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_1 = NULL;
            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_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 450, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF_SET(__pyx_v_line, __pyx_t_5);
            __pyx_t_5 = 0;

            /* "gnocis/sequences.pyx":451
 * 		for line in (y.decode('utf-8') for y in f):
 * 			line = line.strip()
 * 			if line.startswith('>'):             # <<<<<<<<<<<<<<
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:
 */
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_line, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 451, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_1 = NULL;
            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_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_kp_u_) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_);
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 451, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 451, __pyx_L7_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (__pyx_t_12) {

              /* "gnocis/sequences.pyx":452
 * 			line = line.strip()
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))             # <<<<<<<<<<<<<<
 * 			elif len(lst) == 0:
 * 				raise Exception('FASTA sequence error')
 */
              __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_v_line, 1, 0, NULL, NULL, &__pyx_slice__21, 1, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 452, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 452, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
              __Pyx_INCREF(__pyx_kp_u__2);
              __Pyx_GIVEREF(__pyx_kp_u__2);
              PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__2);
              __Pyx_INCREF(__pyx_v_path);
              __Pyx_GIVEREF(__pyx_v_path);
              PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_path);
              __pyx_t_5 = 0;
              __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 452, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_1 = PyNumber_Add(__pyx_kp_u_From_FASTA_file, __pyx_v_pathName); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 452, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_1);
              if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_annotation, __pyx_t_1) < 0) __PYX_ERR(0, 452, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 452, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_lst, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 452, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

              /* "gnocis/sequences.pyx":451
 * 		for line in (y.decode('utf-8') for y in f):
 * 			line = line.strip()
 * 			if line.startswith('>'):             # <<<<<<<<<<<<<<
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:
 */
              goto __pyx_L15;
            }

            /* "gnocis/sequences.pyx":453
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:             # <<<<<<<<<<<<<<
 * 				raise Exception('FASTA sequence error')
 * 			else:
 */
            __pyx_t_14 = PyList_GET_SIZE(__pyx_v_lst); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 453, __pyx_L7_error)
            __pyx_t_12 = ((__pyx_t_14 == 0) != 0);
            if (unlikely(__pyx_t_12)) {

              /* "gnocis/sequences.pyx":454
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:
 * 				raise Exception('FASTA sequence error')             # <<<<<<<<<<<<<<
 * 			else:
 * 				lst[-1].seq += line
 */
              __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 454, __pyx_L7_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, 454, __pyx_L7_error)

              /* "gnocis/sequences.pyx":453
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:             # <<<<<<<<<<<<<<
 * 				raise Exception('FASTA sequence error')
 * 			else:
 */
            }

            /* "gnocis/sequences.pyx":456
 * 				raise Exception('FASTA sequence error')
 * 			else:
 * 				lst[-1].seq += line             # <<<<<<<<<<<<<<
 * 	return sequences('FASTA file: ' + pathName, lst)
 * 
 */
            /*else*/ {
              __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_lst, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 456, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_seq); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 456, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_5, __pyx_v_line); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 456, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (__Pyx_PyObject_SetAttrStr(__pyx_t_1, __pyx_n_s_seq, __pyx_t_3) < 0) __PYX_ERR(0, 456, __pyx_L7_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            }
            __pyx_L15:;

            /* "gnocis/sequences.pyx":449
 * 	pathName = path.split('/')[-1]
 * 	with gzip.open(path, 'rb') as f:
 * 		for line in (y.decode('utf-8') for y in f):             # <<<<<<<<<<<<<<
 * 			line = line.strip()
 * 			if line.startswith('>'):
 */
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

          /* "gnocis/sequences.pyx":448
 * 	lst = []
 * 	pathName = path.split('/')[-1]
 * 	with gzip.open(path, 'rb') as f:             # <<<<<<<<<<<<<<
 * 		for line in (y.decode('utf-8') for y in f):
 * 			line = line.strip()
 */
        }
        __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_L12_try_end;
        __pyx_L7_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_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("gnocis.sequences.loadFASTAGZ", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(0, 448, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 448, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 448, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (__pyx_t_12 < 0) __PYX_ERR(0, 448, __pyx_L9_except_error)
          __pyx_t_16 = ((!(__pyx_t_12 != 0)) != 0);
          if (__pyx_t_16) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_1, __pyx_t_3);
            __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_3 = 0; 
            __PYX_ERR(0, 448, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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_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);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_6) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__20, NULL);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 448, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L19;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L1_error;
    __pyx_L19:;
  }

  /* "gnocis/sequences.pyx":457
 * 			else:
 * 				lst[-1].seq += line
 * 	return sequences('FASTA file: ' + pathName, lst)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyNumber_Add(__pyx_kp_u_FASTA_file, __pyx_v_pathName); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 457, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 457, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __Pyx_INCREF(__pyx_v_lst);
  __Pyx_GIVEREF(__pyx_v_lst);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_lst);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 457, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":437
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTAGZ(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a gzipped FASTA file.
 * 
 */

  /* 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("gnocis.sequences.loadFASTAGZ", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_lst);
  __Pyx_XDECREF(__pyx_v_pathName);
  __Pyx_XDECREF(__pyx_v_line);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_11loadFASTAGZ_2generator16);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":471
 * 	"""
 * 
 * 	def __init__(self):             # <<<<<<<<<<<<<<
 * 		pass
 * 
 */

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

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

static int __pyx_pf_6gnocis_9sequences_14sequenceStream___init__(CYTHON_UNUSED struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_14sequenceStream_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":475
 * 
 * 	# Fetches n sequences (or less, if fewer or none are left)
 * 	def fetch(self, n, maxnt):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Fetches n sequences (or less, if fewer or none are left).
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_3fetch(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_14sequenceStream_2fetch[] = "\n\t\tFetches n sequences (or less, if fewer or none are left).\n\t\t\n\t\t:param n: Number of sequences to fetch.\n\t\t:param maxnt: Maximum number of nucleotides to fetch.\n\t\t:type n: int\n\t\t:type maxnt: int\n\t\t\n\t\t:return Yields sequences.\n\t\t:rtype: sequences (yield)\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_3fetch(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_maxnt = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fetch (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,&__pyx_n_s_maxnt,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxnt)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fetch", 1, 2, 2, 1); __PYX_ERR(0, 475, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fetch") < 0)) __PYX_ERR(0, 475, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_n = values[0];
    __pyx_v_maxnt = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fetch", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 475, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.fetch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_14sequenceStream_2fetch(((struct __pyx_obj_6gnocis_9sequences_sequenceStream *)__pyx_v_self), __pyx_v_n, __pyx_v_maxnt);

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

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_2fetch(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_n, PyObject *__pyx_v_maxnt) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fetch", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_13_fetch(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_13_fetch, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 475, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_n = __pyx_v_n;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_n);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_n);
  __pyx_cur_scope->__pyx_v_maxnt = __pyx_v_maxnt;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_maxnt);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_maxnt);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_14sequenceStream_4generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_fetch, __pyx_n_s_sequenceStream_fetch, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 475, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.fetch", __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_6gnocis_9sequences_14sequenceStream_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  int __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fetch", 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_L9_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, 475, __pyx_L1_error)

  /* "gnocis/sequences.pyx":491
 * 		cdef long long ntFetched
 * 		cdef sequence cseq
 * 		fetched = []             # <<<<<<<<<<<<<<
 * 		i = 0
 * 		ntFetched = 0
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_fetched = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":492
 * 		cdef sequence cseq
 * 		fetched = []
 * 		i = 0             # <<<<<<<<<<<<<<
 * 		ntFetched = 0
 * 		for cseq in self.streamFullSequences():
 */
  __pyx_cur_scope->__pyx_v_i = 0;

  /* "gnocis/sequences.pyx":493
 * 		fetched = []
 * 		i = 0
 * 		ntFetched = 0             # <<<<<<<<<<<<<<
 * 		for cseq in self.streamFullSequences():
 * 			fetched.append(cseq)
 */
  __pyx_cur_scope->__pyx_v_ntFetched = 0;

  /* "gnocis/sequences.pyx":494
 * 		i = 0
 * 		ntFetched = 0
 * 		for cseq in self.streamFullSequences():             # <<<<<<<<<<<<<<
 * 			fetched.append(cseq)
 * 			i += 1
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_streamFullSequences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 494, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 494, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 494, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 494, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_5(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 494, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6gnocis_9sequences_sequence))))) __PYX_ERR(0, 494, __pyx_L1_error)
    __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_cseq));
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cseq, ((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_t_1));
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;

    /* "gnocis/sequences.pyx":495
 * 		ntFetched = 0
 * 		for cseq in self.streamFullSequences():
 * 			fetched.append(cseq)             # <<<<<<<<<<<<<<
 * 			i += 1
 * 			ntFetched += len(fetched[-1])
 */
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_fetched, ((PyObject *)__pyx_cur_scope->__pyx_v_cseq)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 495, __pyx_L1_error)

    /* "gnocis/sequences.pyx":496
 * 		for cseq in self.streamFullSequences():
 * 			fetched.append(cseq)
 * 			i += 1             # <<<<<<<<<<<<<<
 * 			ntFetched += len(fetched[-1])
 * 			#if i >= n or ntFetched >= maxnt:
 */
    __pyx_cur_scope->__pyx_v_i = (__pyx_cur_scope->__pyx_v_i + 1);

    /* "gnocis/sequences.pyx":497
 * 			fetched.append(cseq)
 * 			i += 1
 * 			ntFetched += len(fetched[-1])             # <<<<<<<<<<<<<<
 * 			#if i >= n or ntFetched >= maxnt:
 * 			if ntFetched >= maxnt:
 */
    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_cur_scope->__pyx_v_fetched, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 497, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_cur_scope->__pyx_v_ntFetched = (__pyx_cur_scope->__pyx_v_ntFetched + __pyx_t_7);

    /* "gnocis/sequences.pyx":499
 * 			ntFetched += len(fetched[-1])
 * 			#if i >= n or ntFetched >= maxnt:
 * 			if ntFetched >= maxnt:             # <<<<<<<<<<<<<<
 * 				i = 0
 * 				ntFetched = 0
 */
    __pyx_t_1 = __Pyx_PyInt_From_PY_LONG_LONG(__pyx_cur_scope->__pyx_v_ntFetched); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 499, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_cur_scope->__pyx_v_maxnt, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 499, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 499, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_8) {

      /* "gnocis/sequences.pyx":500
 * 			#if i >= n or ntFetched >= maxnt:
 * 			if ntFetched >= maxnt:
 * 				i = 0             # <<<<<<<<<<<<<<
 * 				ntFetched = 0
 * 				yield sequences(self.name, fetched)
 */
      __pyx_cur_scope->__pyx_v_i = 0;

      /* "gnocis/sequences.pyx":501
 * 			if ntFetched >= maxnt:
 * 				i = 0
 * 				ntFetched = 0             # <<<<<<<<<<<<<<
 * 				yield sequences(self.name, fetched)
 * 				fetched = []
 */
      __pyx_cur_scope->__pyx_v_ntFetched = 0;

      /* "gnocis/sequences.pyx":502
 * 				i = 0
 * 				ntFetched = 0
 * 				yield sequences(self.name, fetched)             # <<<<<<<<<<<<<<
 * 				fetched = []
 * 		if len(fetched) > 0:
 */
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 502, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fetched);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fetched);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_cur_scope->__pyx_v_fetched);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 502, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      __Pyx_XGIVEREF(__pyx_t_2);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_5;
      __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:;
      __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_2);
      __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_5 = __pyx_cur_scope->__pyx_t_2;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 502, __pyx_L1_error)

      /* "gnocis/sequences.pyx":503
 * 				ntFetched = 0
 * 				yield sequences(self.name, fetched)
 * 				fetched = []             # <<<<<<<<<<<<<<
 * 		if len(fetched) > 0:
 * 			yield sequences(self.name, fetched)
 */
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 503, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_fetched);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_fetched, ((PyObject*)__pyx_t_3));
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;

      /* "gnocis/sequences.pyx":499
 * 			ntFetched += len(fetched[-1])
 * 			#if i >= n or ntFetched >= maxnt:
 * 			if ntFetched >= maxnt:             # <<<<<<<<<<<<<<
 * 				i = 0
 * 				ntFetched = 0
 */
    }

    /* "gnocis/sequences.pyx":494
 * 		i = 0
 * 		ntFetched = 0
 * 		for cseq in self.streamFullSequences():             # <<<<<<<<<<<<<<
 * 			fetched.append(cseq)
 * 			i += 1
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":504
 * 				yield sequences(self.name, fetched)
 * 				fetched = []
 * 		if len(fetched) > 0:             # <<<<<<<<<<<<<<
 * 			yield sequences(self.name, fetched)
 * 
 */
  __pyx_t_4 = PyList_GET_SIZE(__pyx_cur_scope->__pyx_v_fetched); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 504, __pyx_L1_error)
  __pyx_t_8 = ((__pyx_t_4 > 0) != 0);
  if (__pyx_t_8) {

    /* "gnocis/sequences.pyx":505
 * 				fetched = []
 * 		if len(fetched) > 0:
 * 			yield sequences(self.name, fetched)             # <<<<<<<<<<<<<<
 * 
 * 	# Outputs a stream of complete sequences by joining sequence blocks
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __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_cur_scope->__pyx_v_fetched);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fetched);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_cur_scope->__pyx_v_fetched);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __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;
    __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_L9_resume_from_yield:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 505, __pyx_L1_error)

    /* "gnocis/sequences.pyx":504
 * 				yield sequences(self.name, fetched)
 * 				fetched = []
 * 		if len(fetched) > 0:             # <<<<<<<<<<<<<<
 * 			yield sequences(self.name, fetched)
 * 
 */
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":475
 * 
 * 	# Fetches n sequences (or less, if fewer or none are left)
 * 	def fetch(self, n, maxnt):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Fetches n sequences (or less, if fewer or none are left).
 */

  /* 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("fetch", __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_6gnocis_9sequences_14sequenceStream_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":508
 * 
 * 	# Outputs a stream of complete sequences by joining sequence blocks
 * 	def streamFullSequences(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Streams and yields whole sequences.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_6streamFullSequences(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gnocis_9sequences_14sequenceStream_5streamFullSequences[] = "\n\t\tStreams and yields whole sequences.\n\t\t\n\t\t:return Yields whole sequence.\n\t\t:rtype: sequence (yield)\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_6streamFullSequences(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("streamFullSequences (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14sequenceStream_5streamFullSequences(((struct __pyx_obj_6gnocis_9sequences_sequenceStream *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_14sequenceStream_19streamFullSequences_2generator17(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":516
 * 		"""
 * 		for cseq in self:
 * 			yield sequence(cseq.name, ''.join(blk for blk in cseq))             # <<<<<<<<<<<<<<
 * 
 * 	# Gets the sequence lengths
 */

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_19streamFullSequences_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_15_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_15_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 516, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_14sequenceStream_19streamFullSequences_2generator17, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_streamFullSequences_locals_genex, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 516, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.streamFullSequences.genexpr", __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_6gnocis_9sequences_14sequenceStream_19streamFullSequences_2generator17(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 516, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_cseq)) { __Pyx_RaiseClosureNameError("cseq"); __PYX_ERR(0, 516, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_cseq)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_cseq)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_cseq; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_cseq); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 516, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 516, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 516, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 516, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 516, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 516, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_blk);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_blk, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_cur_scope->__pyx_v_blk))) __PYX_ERR(0, 516, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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;
}

/* "gnocis/sequences.pyx":508
 * 
 * 	# Outputs a stream of complete sequences by joining sequence blocks
 * 	def streamFullSequences(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Streams and yields whole sequences.
 */

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_5streamFullSequences(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *__pyx_cur_scope;
  PyObject *__pyx_gb_6gnocis_9sequences_14sequenceStream_19streamFullSequences_2generator17 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("streamFullSequences", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 508, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_14sequenceStream_7generator1, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_streamFullSequences, __pyx_n_s_sequenceStream_streamFullSequenc, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 508, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.streamFullSequences", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_14sequenceStream_19streamFullSequences_2generator17);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_6gnocis_9sequences_14sequenceStream_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("streamFullSequences", 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, 508, __pyx_L1_error)

  /* "gnocis/sequences.pyx":515
 * 		:rtype: sequence (yield)
 * 		"""
 * 		for cseq in self:             # <<<<<<<<<<<<<<
 * 			yield sequence(cseq.name, ''.join(blk for blk in cseq))
 * 
 */
  if (likely(PyList_CheckExact(((PyObject *)__pyx_cur_scope->__pyx_v_self))) || PyTuple_CheckExact(((PyObject *)__pyx_cur_scope->__pyx_v_self))) {
    __pyx_t_1 = ((PyObject *)__pyx_cur_scope->__pyx_v_self); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)__pyx_cur_scope->__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 515, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 515, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 515, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 515, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 515, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_cseq);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cseq, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;

    /* "gnocis/sequences.pyx":516
 * 		"""
 * 		for cseq in self:
 * 			yield sequence(cseq.name, ''.join(blk for blk in cseq))             # <<<<<<<<<<<<<<
 * 
 * 	# Gets the sequence lengths
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_cseq, __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __pyx_pf_6gnocis_9sequences_14sequenceStream_19streamFullSequences_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_Generator_Next(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 516, __pyx_L1_error)

    /* "gnocis/sequences.pyx":515
 * 		:rtype: sequence (yield)
 * 		"""
 * 		for cseq in self:             # <<<<<<<<<<<<<<
 * 			yield sequence(cseq.name, ''.join(blk for blk in cseq))
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":508
 * 
 * 	# Outputs a stream of complete sequences by joining sequence blocks
 * 	def streamFullSequences(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Streams and yields whole sequences.
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __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("streamFullSequences", __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;
}

/* "gnocis/sequences.pyx":519
 * 
 * 	# Gets the sequence lengths
 * 	def sequenceLengths(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns a dictionary of the lengths of all sequences in the stream.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_9sequenceLengths(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gnocis_9sequences_14sequenceStream_8sequenceLengths[] = "\n\t\t:return: Returns a dictionary of the lengths of all sequences in the stream.\n\t\t:rtype: dict\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_9sequenceLengths(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sequenceLengths (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14sequenceStream_8sequenceLengths(((struct __pyx_obj_6gnocis_9sequences_sequenceStream *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_14sequenceStream_15sequenceLengths_9genexpr18_2generator18(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":526
 * 		cdef dict ret
 * 		cdef object cseq, blk
 * 		return { cseq.name: sum( len(blk) for blk in cseq ) for cseq in self }             # <<<<<<<<<<<<<<
 * 
 * 	# Gets a sequence set with windows from the sequences
 */

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_15sequenceLengths_9genexpr18_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_17_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_17_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 526, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_14sequenceStream_15sequenceLengths_9genexpr18_2generator18, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_sequenceLengths_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.sequenceLengths.genexpr", __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_6gnocis_9sequences_14sequenceStream_15sequenceLengths_9genexpr18_2generator18(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 526, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr18__pyx_v_cseq)) { __Pyx_RaiseClosureNameError("cseq"); __PYX_ERR(0, 526, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr18__pyx_v_cseq)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr18__pyx_v_cseq)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr18__pyx_v_cseq; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_9genexpr18__pyx_v_cseq); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 526, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 526, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 526, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 526, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 526, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 526, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_blk);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_blk, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = PyObject_Length(__pyx_cur_scope->__pyx_v_blk); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 526, __pyx_L1_error)
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 526, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* 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("genexpr", __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;
}

/* "gnocis/sequences.pyx":519
 * 
 * 	# Gets the sequence lengths
 * 	def sequenceLengths(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns a dictionary of the lengths of all sequences in the stream.
 */

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_8sequenceLengths(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *__pyx_cur_scope;
  PyObject *__pyx_9genexpr18__pyx_v_1 = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sequenceLengths", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 519, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }

  /* "gnocis/sequences.pyx":526
 * 		cdef dict ret
 * 		cdef object cseq, blk
 * 		return { cseq.name: sum( len(blk) for blk in cseq ) for cseq in self }             # <<<<<<<<<<<<<<
 * 
 * 	# Gets a sequence set with windows from the sequences
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(((PyObject *)__pyx_v_self))) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
      __pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 526, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 526, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 526, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 526, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 526, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 526, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr18__pyx_v_cseq);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr18__pyx_v_cseq, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr18__pyx_v_cseq, __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __pyx_pf_6gnocis_9sequences_14sequenceStream_15sequenceLengths_9genexpr18_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_t_5, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 526, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":519
 * 
 * 	# Gets the sequence lengths
 * 	def sequenceLengths(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:return: Returns a dictionary of the lengths of all sequences in the stream.
 */

  /* 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("gnocis.sequences.sequenceStream.sequenceLengths", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_9genexpr18__pyx_v_1);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":529
 * 
 * 	# Gets a sequence set with windows from the sequences
 * 	def windows(self, size, step):             # <<<<<<<<<<<<<<
 * 		""" Generates and returns a set of sliding window sequences.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_11windows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_14sequenceStream_10windows[] = " Generates and returns a set of sliding window sequences.\n\t\t\n\t\t:param size: Window size.\n\t\t:param step: Window step size.\n\t\t:type size: int\n\t\t:type step: int\n\t\t\n\t\t:return: Sequence set of all sliding window sequences across all sequences in the stream.\n\t\t:rtype: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_11windows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_step = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("windows (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_step,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_step)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("windows", 1, 2, 2, 1); __PYX_ERR(0, 529, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "windows") < 0)) __PYX_ERR(0, 529, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_size = values[0];
    __pyx_v_step = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("windows", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 529, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.windows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_14sequenceStream_10windows(((struct __pyx_obj_6gnocis_9sequences_sequenceStream *)__pyx_v_self), __pyx_v_size, __pyx_v_step);

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

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_10windows(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_step) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  Py_UCS4 __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("windows", 0);

  /* "gnocis/sequences.pyx":540
 * 		:rtype: sequences
 * 		"""
 * 		return sequences(self.name + ' (windows - size: %d bp; step: %d bp)'%(size, step), list(streamSequenceWindows( self, size, step )))             # <<<<<<<<<<<<<<
 * 
 * 	# Gets a region set with windows from the sequences
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = 0;
  __pyx_t_4 = 127;
  __Pyx_INCREF(__pyx_kp_u_windows_size);
  __pyx_t_3 += 18;
  __Pyx_GIVEREF(__pyx_kp_u_windows_size);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_windows_size);
  __pyx_t_5 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_size), __pyx_n_u_d); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
  __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp_step);
  __pyx_t_3 += 11;
  __Pyx_GIVEREF(__pyx_kp_u_bp_step);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_bp_step);
  __pyx_t_5 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_step), __pyx_n_u_d); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
  __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp);
  __pyx_t_3 += 4;
  __Pyx_GIVEREF(__pyx_kp_u_bp);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_bp);
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_streamSequenceWindows); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, ((PyObject *)__pyx_v_self), __pyx_v_size, __pyx_v_step};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, ((PyObject *)__pyx_v_self), __pyx_v_size, __pyx_v_step};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_self));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, ((PyObject *)__pyx_v_self));
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_GIVEREF(__pyx_v_size);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_size);
    __Pyx_INCREF(__pyx_v_step);
    __Pyx_GIVEREF(__pyx_v_step);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_v_step);
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PySequence_List(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":529
 * 
 * 	# Gets a sequence set with windows from the sequences
 * 	def windows(self, size, step):             # <<<<<<<<<<<<<<
 * 		""" Generates and returns a set of sliding window sequences.
 * 
 */

  /* 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_8);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.windows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":543
 * 
 * 	# Gets a region set with windows from the sequences
 * 	def windowRegions(self, size, step):             # <<<<<<<<<<<<<<
 * 		""" Generates and returns a set of sliding window regions.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_13windowRegions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_14sequenceStream_12windowRegions[] = " Generates and returns a set of sliding window regions.\n\t\t\n\t\t:param size: Window size.\n\t\t:param step: Window step size.\n\t\t:type size: int\n\t\t:type step: int\n\t\t\n\t\t:return: Region set of all sliding window regions across all sequences in the stream.\n\t\t:rtype: regions\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_13windowRegions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_step = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("windowRegions (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_step,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_step)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("windowRegions", 1, 2, 2, 1); __PYX_ERR(0, 543, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "windowRegions") < 0)) __PYX_ERR(0, 543, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_size = values[0];
    __pyx_v_step = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("windowRegions", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 543, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.windowRegions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_14sequenceStream_12windowRegions(((struct __pyx_obj_6gnocis_9sequences_sequenceStream *)__pyx_v_self), __pyx_v_size, __pyx_v_step);

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

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_12windowRegions(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self, PyObject *__pyx_v_size, PyObject *__pyx_v_step) {
  PyObject *__pyx_v_seqLengths = NULL;
  PyObject *__pyx_v_rset = NULL;
  PyObject *__pyx_v_cseq = NULL;
  PyObject *__pyx_v_cstart = 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;
  int __pyx_t_7;
  Py_UCS4 __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("windowRegions", 0);

  /* "gnocis/sequences.pyx":554
 * 		:rtype: regions
 * 		"""
 * 		seqLengths = self.sequenceLengths()             # <<<<<<<<<<<<<<
 * 		rset = []
 * 		for cseq in sorted(seqLengths.keys()):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_sequenceLengths); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_seqLengths = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":555
 * 		"""
 * 		seqLengths = self.sequenceLengths()
 * 		rset = []             # <<<<<<<<<<<<<<
 * 		for cseq in sorted(seqLengths.keys()):
 * 			cstart = 0
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rset = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":556
 * 		seqLengths = self.sequenceLengths()
 * 		rset = []
 * 		for cseq in sorted(seqLengths.keys()):             # <<<<<<<<<<<<<<
 * 			cstart = 0
 * 			while cstart + size <= seqLengths[cseq]:
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_seqLengths, __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_5 = PyList_Sort(__pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 556, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 556, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 556, __pyx_L1_error)
    #else
    __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_cseq, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "gnocis/sequences.pyx":557
 * 		rset = []
 * 		for cseq in sorted(seqLengths.keys()):
 * 			cstart = 0             # <<<<<<<<<<<<<<
 * 			while cstart + size <= seqLengths[cseq]:
 * 				rset.append( region(cseq, cstart, cstart+size-1) )
 */
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_XDECREF_SET(__pyx_v_cstart, __pyx_int_0);

    /* "gnocis/sequences.pyx":558
 * 		for cseq in sorted(seqLengths.keys()):
 * 			cstart = 0
 * 			while cstart + size <= seqLengths[cseq]:             # <<<<<<<<<<<<<<
 * 				rset.append( region(cseq, cstart, cstart+size-1) )
 * 				cstart += step
 */
    while (1) {
      __pyx_t_1 = PyNumber_Add(__pyx_v_cstart, __pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_seqLengths, __pyx_v_cseq); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 558, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 558, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (!__pyx_t_7) break;

      /* "gnocis/sequences.pyx":559
 * 			cstart = 0
 * 			while cstart + size <= seqLengths[cseq]:
 * 				rset.append( region(cseq, cstart, cstart+size-1) )             # <<<<<<<<<<<<<<
 * 				cstart += step
 * 		return regions('Windows (Window size: %d bp; step size: %d bp)'%(size, step), rset, initialSort = False)
 */
      __pyx_t_4 = PyNumber_Add(__pyx_v_cstart, __pyx_v_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_4, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_cseq);
      __Pyx_GIVEREF(__pyx_v_cseq);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_cseq);
      __Pyx_INCREF(__pyx_v_cstart);
      __Pyx_GIVEREF(__pyx_v_cstart);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_cstart);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_region), __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_rset, __pyx_t_2); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 559, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "gnocis/sequences.pyx":560
 * 			while cstart + size <= seqLengths[cseq]:
 * 				rset.append( region(cseq, cstart, cstart+size-1) )
 * 				cstart += step             # <<<<<<<<<<<<<<
 * 		return regions('Windows (Window size: %d bp; step size: %d bp)'%(size, step), rset, initialSort = False)
 * 
 */
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_cstart, __pyx_v_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_cstart, __pyx_t_2);
      __pyx_t_2 = 0;
    }

    /* "gnocis/sequences.pyx":556
 * 		seqLengths = self.sequenceLengths()
 * 		rset = []
 * 		for cseq in sorted(seqLengths.keys()):             # <<<<<<<<<<<<<<
 * 			cstart = 0
 * 			while cstart + size <= seqLengths[cseq]:
 */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":561
 * 				rset.append( region(cseq, cstart, cstart+size-1) )
 * 				cstart += step
 * 		return regions('Windows (Window size: %d bp; step size: %d bp)'%(size, step), rset, initialSort = False)             # <<<<<<<<<<<<<<
 * 
 * # Represents a sequence in a FASTA file
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = 0;
  __pyx_t_8 = 127;
  __Pyx_INCREF(__pyx_kp_u_Windows_Window_size);
  __pyx_t_6 += 22;
  __Pyx_GIVEREF(__pyx_kp_u_Windows_Window_size);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Windows_Window_size);
  __pyx_t_2 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_size), __pyx_n_u_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8;
  __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp_step_size);
  __pyx_t_6 += 16;
  __Pyx_GIVEREF(__pyx_kp_u_bp_step_size);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_bp_step_size);
  __pyx_t_2 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_step), __pyx_n_u_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8;
  __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp);
  __pyx_t_6 += 4;
  __Pyx_GIVEREF(__pyx_kp_u_bp);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_bp);
  __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 561, __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_rset);
  __Pyx_GIVEREF(__pyx_v_rset);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_rset);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_initialSort, Py_False) < 0) __PYX_ERR(0, 561, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_regions), __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":543
 * 
 * 	# Gets a region set with windows from the sequences
 * 	def windowRegions(self, size, step):             # <<<<<<<<<<<<<<
 * 		""" Generates and returns a set of sliding window regions.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.windowRegions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seqLengths);
  __Pyx_XDECREF(__pyx_v_rset);
  __Pyx_XDECREF(__pyx_v_cseq);
  __Pyx_XDECREF(__pyx_v_cstart);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14sequenceStream_14__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_sequenceStream *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_14__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = ()             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __Pyx_INCREF(__pyx_empty_tuple);
  __pyx_v_state = __pyx_empty_tuple;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v__dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "(tree fragment)":7
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_2 = (__pyx_v__dict != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = False
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = False             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, None), state
 */
  /*else*/ {
    __pyx_v_use_setstate = 0;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = False
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, None), state
 *     else:
 */
  __pyx_t_3 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":13
 *         use_setstate = False
 *     if use_setstate:
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_sequenceStream); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_222419149);
    __Pyx_GIVEREF(__pyx_int_222419149);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = False
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, None), state
 *     else:
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequenceStream__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_sequenceStream); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_222419149);
    __Pyx_GIVEREF(__pyx_int_222419149);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequenceStream__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14sequenceStream_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14sequenceStream_16__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_sequenceStream *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14sequenceStream_16__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequenceStream__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceStream__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequenceStream, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequenceStream__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":571
 * 	cdef public object fstream
 * 
 * 	def __init__(self, name, fstream, wantBlockSize):             # <<<<<<<<<<<<<<
 * 		self.name, self.fstream = name, fstream
 * 		self.lastLine = None
 */

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_fstream = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_fstream,&__pyx_n_s_wantBlockSize,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fstream)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 571, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 571, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 571, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_name = values[0];
    __pyx_v_fstream = values[1];
    __pyx_v_wantBlockSize = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 571, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq___init__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self), __pyx_v_name, __pyx_v_fstream, __pyx_v_wantBlockSize);

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq___init__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_fstream, PyObject *__pyx_v_wantBlockSize) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "gnocis/sequences.pyx":572
 * 
 * 	def __init__(self, name, fstream, wantBlockSize):
 * 		self.name, self.fstream = name, fstream             # <<<<<<<<<<<<<<
 * 		self.lastLine = None
 * 		self.wantBlockSize = wantBlockSize
 */
  if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 572, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_name;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_v_fstream;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->fstream);
  __Pyx_DECREF(__pyx_v_self->fstream);
  __pyx_v_self->fstream = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":573
 * 	def __init__(self, name, fstream, wantBlockSize):
 * 		self.name, self.fstream = name, fstream
 * 		self.lastLine = None             # <<<<<<<<<<<<<<
 * 		self.wantBlockSize = wantBlockSize
 * 		self.parsingCompleted = False
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->lastLine);
  __Pyx_DECREF(__pyx_v_self->lastLine);
  __pyx_v_self->lastLine = ((PyObject*)Py_None);

  /* "gnocis/sequences.pyx":574
 * 		self.name, self.fstream = name, fstream
 * 		self.lastLine = None
 * 		self.wantBlockSize = wantBlockSize             # <<<<<<<<<<<<<<
 * 		self.parsingCompleted = False
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_wantBlockSize); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 574, __pyx_L1_error)
  __pyx_v_self->wantBlockSize = __pyx_t_3;

  /* "gnocis/sequences.pyx":575
 * 		self.lastLine = None
 * 		self.wantBlockSize = wantBlockSize
 * 		self.parsingCompleted = False             # <<<<<<<<<<<<<<
 * 
 * 	def __iter__(self):
 */
  __pyx_v_self->parsingCompleted = 0;

  /* "gnocis/sequences.pyx":571
 * 	cdef public object fstream
 * 
 * 	def __init__(self, name, fstream, wantBlockSize):             # <<<<<<<<<<<<<<
 * 		self.name, self.fstream = name, fstream
 * 		self.lastLine = None
 */

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

/* "gnocis/sequences.pyx":577
 * 		self.parsingCompleted = False
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.stream()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_3__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_3__iter__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_2__iter__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_2__iter__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "gnocis/sequences.pyx":578
 * 
 * 	def __iter__(self):
 * 		return self.stream()             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_stream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __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;

  /* "gnocis/sequences.pyx":577
 * 		self.parsingCompleted = False
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.stream()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":580
 * 		return self.stream()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_5__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_5__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_4__str__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_4__str__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__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);

  /* "gnocis/sequences.pyx":581
 * 
 * 	def __str__(self):
 * 		return 'FASTA sequence stream<%s>'%(self.name)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_FASTA_sequence_stream_s, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 581, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":580
 * 		return self.stream()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":583
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_7__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_6__repr__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_6__repr__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "gnocis/sequences.pyx":584
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * 	def stream(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __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;

  /* "gnocis/sequences.pyx":583
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_14streamFASTASeq_10generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":586
 * 		return self.__str__()
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		cdef str cbuf, cl
 * 		cdef int wbs = self.wantBlockSize
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_9stream(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_9stream(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stream (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_8stream(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_8stream(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("stream", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_18_stream(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_18_stream, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 586, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_14streamFASTASeq_10generator2, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_stream, __pyx_n_s_streamFASTASeq_stream, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 586, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.stream", __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_6gnocis_9sequences_14streamFASTASeq_10generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stream", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L9_resume_from_yield;
    case 2: goto __pyx_L12_resume_from_yield;
    case 3: goto __pyx_L15_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, 586, __pyx_L1_error)

  /* "gnocis/sequences.pyx":588
 * 	def stream(self):
 * 		cdef str cbuf, cl
 * 		cdef int wbs = self.wantBlockSize             # <<<<<<<<<<<<<<
 * 		cbuf = ''
 * 		for cl in self.fstream:
 */
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->wantBlockSize;
  __pyx_cur_scope->__pyx_v_wbs = __pyx_t_1;

  /* "gnocis/sequences.pyx":589
 * 		cdef str cbuf, cl
 * 		cdef int wbs = self.wantBlockSize
 * 		cbuf = ''             # <<<<<<<<<<<<<<
 * 		for cl in self.fstream:
 * 			if cl.startswith('>'):
 */
  __Pyx_INCREF(__pyx_kp_u__2);
  __Pyx_GIVEREF(__pyx_kp_u__2);
  __pyx_cur_scope->__pyx_v_cbuf = __pyx_kp_u__2;

  /* "gnocis/sequences.pyx":590
 * 		cdef int wbs = self.wantBlockSize
 * 		cbuf = ''
 * 		for cl in self.fstream:             # <<<<<<<<<<<<<<
 * 			if cl.startswith('>'):
 * 				# Output all that remains in buffer
 */
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_self->fstream)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_self->fstream)) {
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_self->fstream; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_self->fstream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 590, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 590, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 590, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 590, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 590, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 590, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      }
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 590, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 590, __pyx_L1_error)
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_cl);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cl, ((PyObject*)__pyx_t_5));
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;

    /* "gnocis/sequences.pyx":591
 * 		cbuf = ''
 * 		for cl in self.fstream:
 * 			if cl.startswith('>'):             # <<<<<<<<<<<<<<
 * 				# Output all that remains in buffer
 * 				while len(cbuf) > 0:
 */
    if (unlikely(__pyx_cur_scope->__pyx_v_cl == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "startswith");
      __PYX_ERR(0, 591, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyUnicode_Tailmatch(__pyx_cur_scope->__pyx_v_cl, __pyx_kp_u_, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 591, __pyx_L1_error)
    if ((__pyx_t_6 != 0)) {

      /* "gnocis/sequences.pyx":593
 * 			if cl.startswith('>'):
 * 				# Output all that remains in buffer
 * 				while len(cbuf) > 0:             # <<<<<<<<<<<<<<
 * 					yield cbuf[:wbs]
 * 					cbuf = cbuf[wbs:]
 */
      while (1) {
        if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
          __PYX_ERR(0, 593, __pyx_L1_error)
        }
        __pyx_t_7 = __Pyx_PyUnicode_GET_LENGTH(__pyx_cur_scope->__pyx_v_cbuf); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 593, __pyx_L1_error)
        __pyx_t_6 = ((__pyx_t_7 > 0) != 0);
        if (!__pyx_t_6) break;

        /* "gnocis/sequences.pyx":594
 * 				# Output all that remains in buffer
 * 				while len(cbuf) > 0:
 * 					yield cbuf[:wbs]             # <<<<<<<<<<<<<<
 * 					cbuf = cbuf[wbs:]
 * 				# Store last line for continued parsing
 */
        if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 594, __pyx_L1_error)
        }
        __pyx_t_5 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, 0, __pyx_cur_scope->__pyx_v_wbs); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 594, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_r = __pyx_t_5;
        __pyx_t_5 = 0;
        __Pyx_XGIVEREF(__pyx_t_2);
        __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
        __pyx_cur_scope->__pyx_t_1 = __pyx_t_3;
        __pyx_cur_scope->__pyx_t_2 = __pyx_t_4;
        __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_L9_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_3 = __pyx_cur_scope->__pyx_t_1;
        __pyx_t_4 = __pyx_cur_scope->__pyx_t_2;
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 594, __pyx_L1_error)

        /* "gnocis/sequences.pyx":595
 * 				while len(cbuf) > 0:
 * 					yield cbuf[:wbs]
 * 					cbuf = cbuf[wbs:]             # <<<<<<<<<<<<<<
 * 				# Store last line for continued parsing
 * 				self.lastLine = cl
 */
        if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 595, __pyx_L1_error)
        }
        __pyx_t_5 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, __pyx_cur_scope->__pyx_v_wbs, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 595, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_cbuf);
        __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_5));
        __Pyx_GIVEREF(__pyx_t_5);
        __pyx_t_5 = 0;
      }

      /* "gnocis/sequences.pyx":597
 * 					cbuf = cbuf[wbs:]
 * 				# Store last line for continued parsing
 * 				self.lastLine = cl             # <<<<<<<<<<<<<<
 * 				self.parsingCompleted = True
 * 				return None
 */
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_cl);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_cl);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->lastLine);
      __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->lastLine);
      __pyx_cur_scope->__pyx_v_self->lastLine = __pyx_cur_scope->__pyx_v_cl;

      /* "gnocis/sequences.pyx":598
 * 				# Store last line for continued parsing
 * 				self.lastLine = cl
 * 				self.parsingCompleted = True             # <<<<<<<<<<<<<<
 * 				return None
 * 			cbuf += cl.strip()
 */
      __pyx_cur_scope->__pyx_v_self->parsingCompleted = 1;

      /* "gnocis/sequences.pyx":599
 * 				self.lastLine = cl
 * 				self.parsingCompleted = True
 * 				return None             # <<<<<<<<<<<<<<
 * 			cbuf += cl.strip()
 * 			# Output blocks of requested size from buffer
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = NULL;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L0;

      /* "gnocis/sequences.pyx":591
 * 		cbuf = ''
 * 		for cl in self.fstream:
 * 			if cl.startswith('>'):             # <<<<<<<<<<<<<<
 * 				# Output all that remains in buffer
 * 				while len(cbuf) > 0:
 */
    }

    /* "gnocis/sequences.pyx":600
 * 				self.parsingCompleted = True
 * 				return None
 * 			cbuf += cl.strip()             # <<<<<<<<<<<<<<
 * 			# Output blocks of requested size from buffer
 * 			while len(cbuf) >= wbs:
 */
    __pyx_t_5 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyUnicode_Type_strip, __pyx_cur_scope->__pyx_v_cl); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 600, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_cur_scope->__pyx_v_cbuf, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 600, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 600, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_cbuf);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_8));
    __Pyx_GIVEREF(__pyx_t_8);
    __pyx_t_8 = 0;

    /* "gnocis/sequences.pyx":602
 * 			cbuf += cl.strip()
 * 			# Output blocks of requested size from buffer
 * 			while len(cbuf) >= wbs:             # <<<<<<<<<<<<<<
 * 				yield cbuf[:wbs]
 * 				cbuf = cbuf[wbs:]
 */
    while (1) {
      if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(0, 602, __pyx_L1_error)
      }
      __pyx_t_7 = __Pyx_PyUnicode_GET_LENGTH(__pyx_cur_scope->__pyx_v_cbuf); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 602, __pyx_L1_error)
      __pyx_t_6 = ((__pyx_t_7 >= __pyx_cur_scope->__pyx_v_wbs) != 0);
      if (!__pyx_t_6) break;

      /* "gnocis/sequences.pyx":603
 * 			# Output blocks of requested size from buffer
 * 			while len(cbuf) >= wbs:
 * 				yield cbuf[:wbs]             # <<<<<<<<<<<<<<
 * 				cbuf = cbuf[wbs:]
 * 		# Output all that remains in buffer
 */
      if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 603, __pyx_L1_error)
      }
      __pyx_t_8 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, 0, __pyx_cur_scope->__pyx_v_wbs); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 603, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_r = __pyx_t_8;
      __pyx_t_8 = 0;
      __Pyx_XGIVEREF(__pyx_t_2);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_3;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_4;
      __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_L12_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_3 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_4 = __pyx_cur_scope->__pyx_t_2;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 603, __pyx_L1_error)

      /* "gnocis/sequences.pyx":604
 * 			while len(cbuf) >= wbs:
 * 				yield cbuf[:wbs]
 * 				cbuf = cbuf[wbs:]             # <<<<<<<<<<<<<<
 * 		# Output all that remains in buffer
 * 		while len(cbuf) > 0:
 */
      if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 604, __pyx_L1_error)
      }
      __pyx_t_8 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, __pyx_cur_scope->__pyx_v_wbs, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 604, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_cbuf);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_8));
      __Pyx_GIVEREF(__pyx_t_8);
      __pyx_t_8 = 0;
    }

    /* "gnocis/sequences.pyx":590
 * 		cdef int wbs = self.wantBlockSize
 * 		cbuf = ''
 * 		for cl in self.fstream:             # <<<<<<<<<<<<<<
 * 			if cl.startswith('>'):
 * 				# Output all that remains in buffer
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":606
 * 				cbuf = cbuf[wbs:]
 * 		# Output all that remains in buffer
 * 		while len(cbuf) > 0:             # <<<<<<<<<<<<<<
 * 			yield cbuf[:wbs]
 * 			cbuf = cbuf[wbs:]
 */
  while (1) {
    if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 606, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyUnicode_GET_LENGTH(__pyx_cur_scope->__pyx_v_cbuf); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 606, __pyx_L1_error)
    __pyx_t_6 = ((__pyx_t_3 > 0) != 0);
    if (!__pyx_t_6) break;

    /* "gnocis/sequences.pyx":607
 * 		# Output all that remains in buffer
 * 		while len(cbuf) > 0:
 * 			yield cbuf[:wbs]             # <<<<<<<<<<<<<<
 * 			cbuf = cbuf[wbs:]
 * 		self.lastLine = None
 */
    if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 607, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, 0, __pyx_cur_scope->__pyx_v_wbs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 607, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    __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_L15_resume_from_yield:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 607, __pyx_L1_error)

    /* "gnocis/sequences.pyx":608
 * 		while len(cbuf) > 0:
 * 			yield cbuf[:wbs]
 * 			cbuf = cbuf[wbs:]             # <<<<<<<<<<<<<<
 * 		self.lastLine = None
 * 		self.parsingCompleted = True
 */
    if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 608, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, __pyx_cur_scope->__pyx_v_wbs, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_cbuf);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_2));
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
  }

  /* "gnocis/sequences.pyx":609
 * 			yield cbuf[:wbs]
 * 			cbuf = cbuf[wbs:]
 * 		self.lastLine = None             # <<<<<<<<<<<<<<
 * 		self.parsingCompleted = True
 * 
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->lastLine);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->lastLine);
  __pyx_cur_scope->__pyx_v_self->lastLine = ((PyObject*)Py_None);

  /* "gnocis/sequences.pyx":610
 * 			cbuf = cbuf[wbs:]
 * 		self.lastLine = None
 * 		self.parsingCompleted = True             # <<<<<<<<<<<<<<
 * 
 * # Represents stream of FASTA sequences.
 */
  __pyx_cur_scope->__pyx_v_self->parsingCompleted = 1;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":586
 * 		return self.__str__()
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		cdef str cbuf, cl
 * 		cdef int wbs = self.wantBlockSize
 */

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

/* "gnocis/sequences.pyx":566
 * cdef class streamFASTASeq:
 * 
 * 	cdef public str name, lastLine             # <<<<<<<<<<<<<<
 * 	cdef public int wantBlockSize
 * 	cdef public bool parsingCompleted
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_4name___get__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_4name_2__set__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 566, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_4name_4__del__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)Py_None);

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

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_8lastLine___get__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_8lastLine_2__set__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_8lastLine_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 566, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->lastLine);
  __Pyx_DECREF(__pyx_v_self->lastLine);
  __pyx_v_self->lastLine = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.lastLine.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_8lastLine_4__del__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_8lastLine_4__del__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->lastLine);
  __Pyx_DECREF(__pyx_v_self->lastLine);
  __pyx_v_self->lastLine = ((PyObject*)Py_None);

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

/* "gnocis/sequences.pyx":567
 * 
 * 	cdef public str name, lastLine
 * 	cdef public int wantBlockSize             # <<<<<<<<<<<<<<
 * 	cdef public bool parsingCompleted
 * 	cdef public object fstream
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize___get__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize___get__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__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_int(__pyx_v_self->wantBlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __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("gnocis.sequences.streamFASTASeq.wantBlockSize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_2__set__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L1_error)
  __pyx_v_self->wantBlockSize = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.wantBlockSize.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":568
 * 	cdef public str name, lastLine
 * 	cdef public int wantBlockSize
 * 	cdef public bool parsingCompleted             # <<<<<<<<<<<<<<
 * 	cdef public object fstream
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted___get__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted___get__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__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_PyBool_FromLong(__pyx_v_self->parsingCompleted); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 568, __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("gnocis.sequences.streamFASTASeq.parsingCompleted.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_2__set__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 568, __pyx_L1_error)
  __pyx_v_self->parsingCompleted = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.parsingCompleted.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":569
 * 	cdef public int wantBlockSize
 * 	cdef public bool parsingCompleted
 * 	cdef public object fstream             # <<<<<<<<<<<<<<
 * 
 * 	def __init__(self, name, fstream, wantBlockSize):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_7fstream___get__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_7fstream_2__set__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_7fstream_2__set__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->fstream);
  __Pyx_DECREF(__pyx_v_self->fstream);
  __pyx_v_self->fstream = __pyx_v_value;

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_7fstream_4__del__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_14streamFASTASeq_7fstream_4__del__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->fstream);
  __Pyx_DECREF(__pyx_v_self->fstream);
  __pyx_v_self->fstream = Py_None;

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_12__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_12__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_11__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_11__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  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("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.fstream, self.lastLine, self.name, self.parsingCompleted, self.wantBlockSize)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->parsingCompleted); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->wantBlockSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_self->fstream);
  __Pyx_GIVEREF(__pyx_v_self->fstream);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self->fstream);
  __Pyx_INCREF(__pyx_v_self->lastLine);
  __Pyx_GIVEREF(__pyx_v_self->lastLine);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->lastLine);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.fstream, self.lastLine, self.name, self.parsingCompleted, self.wantBlockSize)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_3 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v__dict = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":7
 *     state = (self.fstream, self.lastLine, self.name, self.parsingCompleted, self.wantBlockSize)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_4 = (__pyx_v__dict != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__dict);
    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.fstream is not None or self.lastLine is not None or self.name is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.fstream, self.lastLine, self.name, self.parsingCompleted, self.wantBlockSize)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.fstream is not None or self.lastLine is not None or self.name is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, None), state
 */
  /*else*/ {
    __pyx_t_4 = (__pyx_v_self->fstream != Py_None);
    __pyx_t_6 = (__pyx_t_4 != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_5 = __pyx_t_6;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_6 = (__pyx_v_self->lastLine != ((PyObject*)Py_None));
    __pyx_t_4 = (__pyx_t_6 != 0);
    if (!__pyx_t_4) {
    } else {
      __pyx_t_5 = __pyx_t_4;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_self->name != ((PyObject*)Py_None));
    __pyx_t_6 = (__pyx_t_4 != 0);
    __pyx_t_5 = __pyx_t_6;
    __pyx_L4_bool_binop_done:;
    __pyx_v_use_setstate = __pyx_t_5;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.fstream is not None or self.lastLine is not None or self.name is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, None), state
 *     else:
 */
  __pyx_t_5 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_5) {

    /* "(tree fragment)":13
 *         use_setstate = self.fstream is not None or self.lastLine is not None or self.name is not None
 *     if use_setstate:
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyx_unpickle_streamFASTASeq); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_106341190);
    __Pyx_GIVEREF(__pyx_int_106341190);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_106341190);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_3, 2, Py_None);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.fstream is not None or self.lastLine is not None or self.name is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, None), state
 *     else:
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_streamFASTASeq__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_streamFASTASeq); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_106341190);
    __Pyx_GIVEREF(__pyx_int_106341190);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_106341190);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_streamFASTASeq__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_14__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_14streamFASTASeq_14__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_14streamFASTASeq_13__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_14streamFASTASeq_13__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_streamFASTASeq__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_streamFASTASeq__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_streamFASTASeq, (type(self), 0x656a346, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_streamFASTASeq__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.streamFASTASeq.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":632
 * 	"""
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences, isGZ = False):             # <<<<<<<<<<<<<<
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_19sequenceStreamFASTA_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_path = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_spacePrune = 0;
  PyObject *__pyx_v_dropChr = 0;
  PyObject *__pyx_v_restrictToSequences = 0;
  PyObject *__pyx_v_isGZ = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_path,&__pyx_n_s_wantBlockSize,&__pyx_n_s_spacePrune,&__pyx_n_s_dropChr,&__pyx_n_s_restrictToSequences,&__pyx_n_s_isGZ,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    values[6] = ((PyObject *)((PyObject *)Py_False));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 6, 7, 1); __PYX_ERR(0, 632, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 6, 7, 2); __PYX_ERR(0, 632, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spacePrune)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 6, 7, 3); __PYX_ERR(0, 632, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dropChr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 6, 7, 4); __PYX_ERR(0, 632, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictToSequences)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 6, 7, 5); __PYX_ERR(0, 632, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_isGZ);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 632, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_path = values[1];
    __pyx_v_wantBlockSize = values[2];
    __pyx_v_spacePrune = values[3];
    __pyx_v_dropChr = values[4];
    __pyx_v_restrictToSequences = values[5];
    __pyx_v_isGZ = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 6, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 632, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamFASTA.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA___init__(__pyx_self, __pyx_v_self, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences, __pyx_v_isGZ);

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

static PyObject *__pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences, PyObject *__pyx_v_isGZ) {
  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("__init__", 0);

  /* "gnocis/sequences.pyx":633
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences, isGZ = False):
 * 		self.path = path             # <<<<<<<<<<<<<<
 * 		self.name = path.split('/')[-1]
 * 		self.wantBlockSize = wantBlockSize
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_path, __pyx_v_path) < 0) __PYX_ERR(0, 633, __pyx_L1_error)

  /* "gnocis/sequences.pyx":634
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences, isGZ = False):
 * 		self.path = path
 * 		self.name = path.split('/')[-1]             # <<<<<<<<<<<<<<
 * 		self.wantBlockSize = wantBlockSize
 * 		self.spacePrune = spacePrune
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_path, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u__9) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u__9);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_name, __pyx_t_2) < 0) __PYX_ERR(0, 634, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":635
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 * 		self.wantBlockSize = wantBlockSize             # <<<<<<<<<<<<<<
 * 		self.spacePrune = spacePrune
 * 		self.dropChr = dropChr
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wantBlockSize, __pyx_v_wantBlockSize) < 0) __PYX_ERR(0, 635, __pyx_L1_error)

  /* "gnocis/sequences.pyx":636
 * 		self.name = path.split('/')[-1]
 * 		self.wantBlockSize = wantBlockSize
 * 		self.spacePrune = spacePrune             # <<<<<<<<<<<<<<
 * 		self.dropChr = dropChr
 * 		self.restrictToSequences = restrictToSequences
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_spacePrune, __pyx_v_spacePrune) < 0) __PYX_ERR(0, 636, __pyx_L1_error)

  /* "gnocis/sequences.pyx":637
 * 		self.wantBlockSize = wantBlockSize
 * 		self.spacePrune = spacePrune
 * 		self.dropChr = dropChr             # <<<<<<<<<<<<<<
 * 		self.restrictToSequences = restrictToSequences
 * 		self.isGZ = isGZ
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_dropChr, __pyx_v_dropChr) < 0) __PYX_ERR(0, 637, __pyx_L1_error)

  /* "gnocis/sequences.pyx":638
 * 		self.spacePrune = spacePrune
 * 		self.dropChr = dropChr
 * 		self.restrictToSequences = restrictToSequences             # <<<<<<<<<<<<<<
 * 		self.isGZ = isGZ
 * 
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_restrictToSequences, __pyx_v_restrictToSequences) < 0) __PYX_ERR(0, 638, __pyx_L1_error)

  /* "gnocis/sequences.pyx":639
 * 		self.dropChr = dropChr
 * 		self.restrictToSequences = restrictToSequences
 * 		self.isGZ = isGZ             # <<<<<<<<<<<<<<
 * 
 * 	def __iter__(self):
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_isGZ, __pyx_v_isGZ) < 0) __PYX_ERR(0, 639, __pyx_L1_error)

  /* "gnocis/sequences.pyx":632
 * 	"""
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences, isGZ = False):             # <<<<<<<<<<<<<<
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 */

  /* 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("gnocis.sequences.sequenceStreamFASTA.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_19sequenceStreamFASTA_4generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":641
 * 		self.isGZ = isGZ
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef str line, sname
 * 		cdef streamFASTASeq seqStream
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_19sequenceStreamFASTA_3__iter__ = {"__iter__", (PyCFunction)__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_3__iter__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_2__iter__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_19sequenceStreamFASTA_8__iter___2generator19(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":648
 * 			# Parse line by line, with streaming of all included sequences, re-using the last
 * 			# read line by each sequence stream when a new sequence starts.
 * 			lineSrc = (y.decode('utf-8') for y in fIn) if self.isGZ else fIn             # <<<<<<<<<<<<<<
 * 			line = None
 * 			while True:
 */

static PyObject *__pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_8__iter___genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_20_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_20_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 648, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_19sequenceStreamFASTA_8__iter___2generator19, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_sequenceStreamFASTA___iter___loc, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 648, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamFASTA.__iter__.genexpr", __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_6gnocis_9sequences_19sequenceStreamFASTA_8__iter___2generator19(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 648, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fIn)) { __Pyx_RaiseClosureNameError("fIn"); __PYX_ERR(0, 648, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fIn)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fIn)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_fIn; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_fIn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 648, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 648, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 648, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 648, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 648, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_y);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_y, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_y, __pyx_n_s_decode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 648, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_kp_u_utf_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_kp_u_utf_8);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __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;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 648, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __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("genexpr", __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;
}

/* "gnocis/sequences.pyx":641
 * 		self.isGZ = isGZ
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef str line, sname
 * 		cdef streamFASTASeq seqStream
 */

static PyObject *__pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *__pyx_cur_scope;
  PyObject *__pyx_gb_6gnocis_9sequences_19sequenceStreamFASTA_8__iter___2generator19 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iter__", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_19___iter__(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_19___iter__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 641, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__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_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_19sequenceStreamFASTA_4generator3, __pyx_codeobj__23, (PyObject *) __pyx_cur_scope, __pyx_n_s_iter, __pyx_n_s_sequenceStreamFASTA___iter, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 641, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamFASTA.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_19sequenceStreamFASTA_8__iter___2generator19);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_6gnocis_9sequences_19sequenceStreamFASTA_4generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *)__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;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  int __pyx_t_13;
  int __pyx_t_14;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L30_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, 641, __pyx_L1_error)

  /* "gnocis/sequences.pyx":645
 * 		cdef streamFASTASeq seqStream
 * 		cdef object fIn, lineSrc
 * 		with gzip.open(self.path, 'rb') if self.isGZ else open(self.path, 'r') as fIn:             # <<<<<<<<<<<<<<
 * 			# Parse line by line, with streaming of all included sequences, re-using the last
 * 			# read line by each sequence stream when a new sequence starts.
 */
  /*with:*/ {
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_isGZ); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 645, __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, 645, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_3) {
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_gzip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_open); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 645, __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;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_n_u_rb};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 645, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_n_u_rb};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 645, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else
      #endif
      {
        __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 645, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (__pyx_t_6) {
          __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_4);
        __Pyx_INCREF(__pyx_n_u_rb);
        __Pyx_GIVEREF(__pyx_n_u_rb);
        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_n_u_rb);
        __pyx_t_4 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 645, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
    } else {
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
      __Pyx_INCREF(__pyx_n_u_r);
      __Pyx_GIVEREF(__pyx_n_u_r);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_u_r);
      __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
    }
    __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 645, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = NULL;
    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_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 645, __pyx_L4_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_10, &__pyx_t_11, &__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        /*try:*/ {
          __Pyx_GIVEREF(__pyx_t_5);
          __pyx_cur_scope->__pyx_v_fIn = __pyx_t_5;
          __pyx_t_5 = 0;

          /* "gnocis/sequences.pyx":648
 * 			# Parse line by line, with streaming of all included sequences, re-using the last
 * 			# read line by each sequence stream when a new sequence starts.
 * 			lineSrc = (y.decode('utf-8') for y in fIn) if self.isGZ else fIn             # <<<<<<<<<<<<<<
 * 			line = None
 * 			while True:
 */
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_isGZ); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 648, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 648, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (__pyx_t_3) {
            __pyx_t_1 = __pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_8__iter___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 648, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = __pyx_t_1;
            __pyx_t_1 = 0;
          } else {
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fIn);
            __pyx_t_5 = __pyx_cur_scope->__pyx_v_fIn;
          }
          __Pyx_GIVEREF(__pyx_t_5);
          __pyx_cur_scope->__pyx_v_lineSrc = __pyx_t_5;
          __pyx_t_5 = 0;

          /* "gnocis/sequences.pyx":649
 * 			# read line by each sequence stream when a new sequence starts.
 * 			lineSrc = (y.decode('utf-8') for y in fIn) if self.isGZ else fIn
 * 			line = None             # <<<<<<<<<<<<<<
 * 			while True:
 * 				if not line:
 */
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          __pyx_cur_scope->__pyx_v_line = ((PyObject*)Py_None);

          /* "gnocis/sequences.pyx":650
 * 			lineSrc = (y.decode('utf-8') for y in fIn) if self.isGZ else fIn
 * 			line = None
 * 			while True:             # <<<<<<<<<<<<<<
 * 				if not line:
 * 					line = next(lineSrc)
 */
          while (1) {

            /* "gnocis/sequences.pyx":651
 * 			line = None
 * 			while True:
 * 				if not line:             # <<<<<<<<<<<<<<
 * 					line = next(lineSrc)
 * 				if line.startswith('>'):
 */
            __pyx_t_3 = (__pyx_cur_scope->__pyx_v_line != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_cur_scope->__pyx_v_line) != 0);
            __pyx_t_13 = ((!__pyx_t_3) != 0);
            if (__pyx_t_13) {

              /* "gnocis/sequences.pyx":652
 * 			while True:
 * 				if not line:
 * 					line = next(lineSrc)             # <<<<<<<<<<<<<<
 * 				if line.startswith('>'):
 * 					sname = line[1:].strip()
 */
              __pyx_t_5 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_lineSrc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 652, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 652, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_line);
              __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_line, ((PyObject*)__pyx_t_5));
              __Pyx_GIVEREF(__pyx_t_5);
              __pyx_t_5 = 0;

              /* "gnocis/sequences.pyx":651
 * 			line = None
 * 			while True:
 * 				if not line:             # <<<<<<<<<<<<<<
 * 					line = next(lineSrc)
 * 				if line.startswith('>'):
 */
            }

            /* "gnocis/sequences.pyx":653
 * 				if not line:
 * 					line = next(lineSrc)
 * 				if line.startswith('>'):             # <<<<<<<<<<<<<<
 * 					sname = line[1:].strip()
 * 					if self.spacePrune:
 */
            if (unlikely(__pyx_cur_scope->__pyx_v_line == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "startswith");
              __PYX_ERR(0, 653, __pyx_L8_error)
            }
            __pyx_t_13 = __Pyx_PyUnicode_Tailmatch(__pyx_cur_scope->__pyx_v_line, __pyx_kp_u_, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 653, __pyx_L8_error)
            if (likely((__pyx_t_13 != 0))) {

              /* "gnocis/sequences.pyx":654
 * 					line = next(lineSrc)
 * 				if line.startswith('>'):
 * 					sname = line[1:].strip()             # <<<<<<<<<<<<<<
 * 					if self.spacePrune:
 * 						sname = sname.split(' ')[0]
 */
              if (unlikely(__pyx_cur_scope->__pyx_v_line == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                __PYX_ERR(0, 654, __pyx_L8_error)
              }
              __pyx_t_1 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_line, 1, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 654, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_strip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 654, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = NULL;
              if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
                __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
                if (likely(__pyx_t_1)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                  __Pyx_INCREF(__pyx_t_1);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_2, function);
                }
              }
              __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 654, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 654, __pyx_L8_error)
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_sname);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_sname, ((PyObject*)__pyx_t_5));
              __Pyx_GIVEREF(__pyx_t_5);
              __pyx_t_5 = 0;

              /* "gnocis/sequences.pyx":655
 * 				if line.startswith('>'):
 * 					sname = line[1:].strip()
 * 					if self.spacePrune:             # <<<<<<<<<<<<<<
 * 						sname = sname.split(' ')[0]
 * 					if self.dropChr and sname.lower().startswith('chr'):
 */
              __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_spacePrune); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 655, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 655, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (__pyx_t_13) {

                /* "gnocis/sequences.pyx":656
 * 					sname = line[1:].strip()
 * 					if self.spacePrune:
 * 						sname = sname.split(' ')[0]             # <<<<<<<<<<<<<<
 * 					if self.dropChr and sname.lower().startswith('chr'):
 * 						sname = sname[3:]
 */
                if (unlikely(__pyx_cur_scope->__pyx_v_sname == Py_None)) {
                  PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "split");
                  __PYX_ERR(0, 656, __pyx_L8_error)
                }
                __pyx_t_5 = PyUnicode_Split(__pyx_cur_scope->__pyx_v_sname, __pyx_kp_u__16, -1L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 656, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_5);
                __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 656, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 656, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_sname);
                __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_sname, ((PyObject*)__pyx_t_2));
                __Pyx_GIVEREF(__pyx_t_2);
                __pyx_t_2 = 0;

                /* "gnocis/sequences.pyx":655
 * 				if line.startswith('>'):
 * 					sname = line[1:].strip()
 * 					if self.spacePrune:             # <<<<<<<<<<<<<<
 * 						sname = sname.split(' ')[0]
 * 					if self.dropChr and sname.lower().startswith('chr'):
 */
              }

              /* "gnocis/sequences.pyx":657
 * 					if self.spacePrune:
 * 						sname = sname.split(' ')[0]
 * 					if self.dropChr and sname.lower().startswith('chr'):             # <<<<<<<<<<<<<<
 * 						sname = sname[3:]
 * 					if self.restrictToSequences != None and not sname in self.restrictToSequences:
 */
              __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_dropChr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 657, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 657, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              if (__pyx_t_3) {
              } else {
                __pyx_t_13 = __pyx_t_3;
                goto __pyx_L20_bool_binop_done;
              }
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_sname, __pyx_n_s_lower); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 657, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_8 = NULL;
              if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
                __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
                if (likely(__pyx_t_8)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                  __Pyx_INCREF(__pyx_t_8);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_1, function);
                }
              }
              __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 657, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 657, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = NULL;
              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_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_n_u_chr) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_u_chr);
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 657, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __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, 657, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __pyx_t_13 = __pyx_t_3;
              __pyx_L20_bool_binop_done:;
              if (__pyx_t_13) {

                /* "gnocis/sequences.pyx":658
 * 						sname = sname.split(' ')[0]
 * 					if self.dropChr and sname.lower().startswith('chr'):
 * 						sname = sname[3:]             # <<<<<<<<<<<<<<
 * 					if self.restrictToSequences != None and not sname in self.restrictToSequences:
 * 						line = ''
 */
                if (unlikely(__pyx_cur_scope->__pyx_v_sname == Py_None)) {
                  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                  __PYX_ERR(0, 658, __pyx_L8_error)
                }
                __pyx_t_2 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_sname, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 658, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_sname);
                __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_sname, ((PyObject*)__pyx_t_2));
                __Pyx_GIVEREF(__pyx_t_2);
                __pyx_t_2 = 0;

                /* "gnocis/sequences.pyx":657
 * 					if self.spacePrune:
 * 						sname = sname.split(' ')[0]
 * 					if self.dropChr and sname.lower().startswith('chr'):             # <<<<<<<<<<<<<<
 * 						sname = sname[3:]
 * 					if self.restrictToSequences != None and not sname in self.restrictToSequences:
 */
              }

              /* "gnocis/sequences.pyx":659
 * 					if self.dropChr and sname.lower().startswith('chr'):
 * 						sname = sname[3:]
 * 					if self.restrictToSequences != None and not sname in self.restrictToSequences:             # <<<<<<<<<<<<<<
 * 						line = ''
 * 						while line != None and not line.startswith('>'):
 */
              __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_restrictToSequences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 659, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 659, __pyx_L8_error)
              __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, 659, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (__pyx_t_3) {
              } else {
                __pyx_t_13 = __pyx_t_3;
                goto __pyx_L23_bool_binop_done;
              }
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_restrictToSequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 659, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_sname, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 659, __pyx_L8_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_14 = (__pyx_t_3 != 0);
              __pyx_t_13 = __pyx_t_14;
              __pyx_L23_bool_binop_done:;
              if (__pyx_t_13) {

                /* "gnocis/sequences.pyx":660
 * 						sname = sname[3:]
 * 					if self.restrictToSequences != None and not sname in self.restrictToSequences:
 * 						line = ''             # <<<<<<<<<<<<<<
 * 						while line != None and not line.startswith('>'):
 * 							line = next(lineSrc)
 */
                __Pyx_INCREF(__pyx_kp_u__2);
                __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_line);
                __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_line, __pyx_kp_u__2);
                __Pyx_GIVEREF(__pyx_kp_u__2);

                /* "gnocis/sequences.pyx":661
 * 					if self.restrictToSequences != None and not sname in self.restrictToSequences:
 * 						line = ''
 * 						while line != None and not line.startswith('>'):             # <<<<<<<<<<<<<<
 * 							line = next(lineSrc)
 * 							if line == None:
 */
                while (1) {
                  __pyx_t_14 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_line, Py_None, Py_NE)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 661, __pyx_L8_error)
                  if (__pyx_t_14) {
                  } else {
                    __pyx_t_13 = __pyx_t_14;
                    goto __pyx_L27_bool_binop_done;
                  }
                  if (unlikely(__pyx_cur_scope->__pyx_v_line == Py_None)) {
                    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "startswith");
                    __PYX_ERR(0, 661, __pyx_L8_error)
                  }
                  __pyx_t_14 = __Pyx_PyUnicode_Tailmatch(__pyx_cur_scope->__pyx_v_line, __pyx_kp_u_, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 661, __pyx_L8_error)
                  __pyx_t_3 = ((!(__pyx_t_14 != 0)) != 0);
                  __pyx_t_13 = __pyx_t_3;
                  __pyx_L27_bool_binop_done:;
                  if (!__pyx_t_13) break;

                  /* "gnocis/sequences.pyx":662
 * 						line = ''
 * 						while line != None and not line.startswith('>'):
 * 							line = next(lineSrc)             # <<<<<<<<<<<<<<
 * 							if line == None:
 * 								return None
 */
                  __pyx_t_1 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_lineSrc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 662, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_line);
                  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_line, ((PyObject*)__pyx_t_1));
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_t_1 = 0;

                  /* "gnocis/sequences.pyx":663
 * 						while line != None and not line.startswith('>'):
 * 							line = next(lineSrc)
 * 							if line == None:             # <<<<<<<<<<<<<<
 * 								return None
 * 						continue
 */
                  __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_line, Py_None, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 663, __pyx_L8_error)
                  if (__pyx_t_13) {

                    /* "gnocis/sequences.pyx":664
 * 							line = next(lineSrc)
 * 							if line == None:
 * 								return None             # <<<<<<<<<<<<<<
 * 						continue
 * 					seqStream = streamFASTASeq(sname, lineSrc, self.wantBlockSize)
 */
                    __Pyx_XDECREF(__pyx_r);
                    __pyx_r = NULL;
                    goto __pyx_L12_try_return;

                    /* "gnocis/sequences.pyx":663
 * 						while line != None and not line.startswith('>'):
 * 							line = next(lineSrc)
 * 							if line == None:             # <<<<<<<<<<<<<<
 * 								return None
 * 						continue
 */
                  }
                }

                /* "gnocis/sequences.pyx":665
 * 							if line == None:
 * 								return None
 * 						continue             # <<<<<<<<<<<<<<
 * 					seqStream = streamFASTASeq(sname, lineSrc, self.wantBlockSize)
 * 					yield seqStream
 */
                goto __pyx_L14_continue;

                /* "gnocis/sequences.pyx":659
 * 					if self.dropChr and sname.lower().startswith('chr'):
 * 						sname = sname[3:]
 * 					if self.restrictToSequences != None and not sname in self.restrictToSequences:             # <<<<<<<<<<<<<<
 * 						line = ''
 * 						while line != None and not line.startswith('>'):
 */
              }

              /* "gnocis/sequences.pyx":666
 * 								return None
 * 						continue
 * 					seqStream = streamFASTASeq(sname, lineSrc, self.wantBlockSize)             # <<<<<<<<<<<<<<
 * 					yield seqStream
 * 					if seqStream.parsingCompleted:
 */
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantBlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 666, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 666, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sname);
              __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sname);
              PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_sname);
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_lineSrc);
              __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_lineSrc);
              PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_cur_scope->__pyx_v_lineSrc);
              __Pyx_GIVEREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_streamFASTASeq), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 666, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_seqStream));
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_seqStream, ((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_t_1));
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;

              /* "gnocis/sequences.pyx":667
 * 						continue
 * 					seqStream = streamFASTASeq(sname, lineSrc, self.wantBlockSize)
 * 					yield seqStream             # <<<<<<<<<<<<<<
 * 					if seqStream.parsingCompleted:
 * 						line = seqStream.lastLine
 */
              __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_seqStream));
              __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_seqStream);
              __Pyx_XGIVEREF(__pyx_t_9);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_9;
              __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_L30_resume_from_yield:;
              __pyx_t_9 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_9);
              __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, 667, __pyx_L8_error)

              /* "gnocis/sequences.pyx":668
 * 					seqStream = streamFASTASeq(sname, lineSrc, self.wantBlockSize)
 * 					yield seqStream
 * 					if seqStream.parsingCompleted:             # <<<<<<<<<<<<<<
 * 						line = seqStream.lastLine
 * 						if line == None:
 */
              __pyx_t_13 = (__pyx_cur_scope->__pyx_v_seqStream->parsingCompleted != 0);
              if (__pyx_t_13) {

                /* "gnocis/sequences.pyx":669
 * 					yield seqStream
 * 					if seqStream.parsingCompleted:
 * 						line = seqStream.lastLine             # <<<<<<<<<<<<<<
 * 						if line == None:
 * 							return None
 */
                __pyx_t_1 = __pyx_cur_scope->__pyx_v_seqStream->lastLine;
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_line);
                __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_line, ((PyObject*)__pyx_t_1));
                __Pyx_GIVEREF(__pyx_t_1);
                __pyx_t_1 = 0;

                /* "gnocis/sequences.pyx":670
 * 					if seqStream.parsingCompleted:
 * 						line = seqStream.lastLine
 * 						if line == None:             # <<<<<<<<<<<<<<
 * 							return None
 * 					else:
 */
                __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_line, Py_None, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 670, __pyx_L8_error)
                if (__pyx_t_13) {

                  /* "gnocis/sequences.pyx":671
 * 						line = seqStream.lastLine
 * 						if line == None:
 * 							return None             # <<<<<<<<<<<<<<
 * 					else:
 * 						line = ''
 */
                  __Pyx_XDECREF(__pyx_r);
                  __pyx_r = NULL;
                  goto __pyx_L12_try_return;

                  /* "gnocis/sequences.pyx":670
 * 					if seqStream.parsingCompleted:
 * 						line = seqStream.lastLine
 * 						if line == None:             # <<<<<<<<<<<<<<
 * 							return None
 * 					else:
 */
                }

                /* "gnocis/sequences.pyx":668
 * 					seqStream = streamFASTASeq(sname, lineSrc, self.wantBlockSize)
 * 					yield seqStream
 * 					if seqStream.parsingCompleted:             # <<<<<<<<<<<<<<
 * 						line = seqStream.lastLine
 * 						if line == None:
 */
                goto __pyx_L31;
              }

              /* "gnocis/sequences.pyx":673
 * 							return None
 * 					else:
 * 						line = ''             # <<<<<<<<<<<<<<
 * 						while line != None and not line.startswith('>'):
 * 							line = next(lineSrc)
 */
              /*else*/ {
                __Pyx_INCREF(__pyx_kp_u__2);
                __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_line);
                __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_line, __pyx_kp_u__2);
                __Pyx_GIVEREF(__pyx_kp_u__2);

                /* "gnocis/sequences.pyx":674
 * 					else:
 * 						line = ''
 * 						while line != None and not line.startswith('>'):             # <<<<<<<<<<<<<<
 * 							line = next(lineSrc)
 * 							if line == None:
 */
                while (1) {
                  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_line, Py_None, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 674, __pyx_L8_error)
                  if (__pyx_t_3) {
                  } else {
                    __pyx_t_13 = __pyx_t_3;
                    goto __pyx_L35_bool_binop_done;
                  }
                  if (unlikely(__pyx_cur_scope->__pyx_v_line == Py_None)) {
                    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "startswith");
                    __PYX_ERR(0, 674, __pyx_L8_error)
                  }
                  __pyx_t_3 = __Pyx_PyUnicode_Tailmatch(__pyx_cur_scope->__pyx_v_line, __pyx_kp_u_, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 674, __pyx_L8_error)
                  __pyx_t_14 = ((!(__pyx_t_3 != 0)) != 0);
                  __pyx_t_13 = __pyx_t_14;
                  __pyx_L35_bool_binop_done:;
                  if (!__pyx_t_13) break;

                  /* "gnocis/sequences.pyx":675
 * 						line = ''
 * 						while line != None and not line.startswith('>'):
 * 							line = next(lineSrc)             # <<<<<<<<<<<<<<
 * 							if line == None:
 * 								return None
 */
                  __pyx_t_1 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_lineSrc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 675, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 675, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_line);
                  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_line, ((PyObject*)__pyx_t_1));
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_t_1 = 0;

                  /* "gnocis/sequences.pyx":676
 * 						while line != None and not line.startswith('>'):
 * 							line = next(lineSrc)
 * 							if line == None:             # <<<<<<<<<<<<<<
 * 								return None
 * 				else:
 */
                  __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_cur_scope->__pyx_v_line, Py_None, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 676, __pyx_L8_error)
                  if (__pyx_t_13) {

                    /* "gnocis/sequences.pyx":677
 * 							line = next(lineSrc)
 * 							if line == None:
 * 								return None             # <<<<<<<<<<<<<<
 * 				else:
 * 					raise Exception('FASTA file syntax error')
 */
                    __Pyx_XDECREF(__pyx_r);
                    __pyx_r = NULL;
                    goto __pyx_L12_try_return;

                    /* "gnocis/sequences.pyx":676
 * 						while line != None and not line.startswith('>'):
 * 							line = next(lineSrc)
 * 							if line == None:             # <<<<<<<<<<<<<<
 * 								return None
 * 				else:
 */
                  }
                }
              }
              __pyx_L31:;

              /* "gnocis/sequences.pyx":653
 * 				if not line:
 * 					line = next(lineSrc)
 * 				if line.startswith('>'):             # <<<<<<<<<<<<<<
 * 					sname = line[1:].strip()
 * 					if self.spacePrune:
 */
              goto __pyx_L17;
            }

            /* "gnocis/sequences.pyx":679
 * 								return None
 * 				else:
 * 					raise Exception('FASTA file syntax error')             # <<<<<<<<<<<<<<
 * 		return None
 * 
 */
            /*else*/ {
              __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 679, __pyx_L8_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, 679, __pyx_L8_error)
            }
            __pyx_L17:;
            __pyx_L14_continue:;
          }

          /* "gnocis/sequences.pyx":645
 * 		cdef streamFASTASeq seqStream
 * 		cdef object fIn, lineSrc
 * 		with gzip.open(self.path, 'rb') if self.isGZ else open(self.path, 'r') as fIn:             # <<<<<<<<<<<<<<
 * 			# Parse line by line, with streaming of all included sequences, re-using the last
 * 			# read line by each sequence stream when a new sequence starts.
 */
        }
        __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_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_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("gnocis.sequences.sequenceStreamFASTA.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_5) < 0) __PYX_ERR(0, 645, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_8 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 645, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 645, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (__pyx_t_13 < 0) __PYX_ERR(0, 645, __pyx_L10_except_error)
          __pyx_t_14 = ((!(__pyx_t_13 != 0)) != 0);
          if (__pyx_t_14) {
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_XGIVEREF(__pyx_t_5);
            __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_5);
            __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_5 = 0; 
            __PYX_ERR(0, 645, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_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_L12_try_return:;
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        goto __pyx_L5_return;
        __pyx_L9_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_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_9) {
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__20, NULL);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 645, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L5_return: {
        __Pyx_PyThreadState_assign
        __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_15);
        __Pyx_XGOTREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_t_17);
        __pyx_t_18 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_9) {
          __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__20, NULL);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 645, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        }
        __pyx_r = __pyx_t_18;
        __pyx_t_18 = 0;
        if (PY_MAJOR_VERSION >= 3) {
          __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_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
        __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        goto __pyx_L0;
      }
      __pyx_L7:;
    }
    goto __pyx_L41;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L1_error;
    __pyx_L41:;
  }

  /* "gnocis/sequences.pyx":680
 * 				else:
 * 					raise Exception('FASTA file syntax error')
 * 		return None             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL;
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":641
 * 		self.isGZ = isGZ
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef str line, sname
 * 		cdef streamFASTASeq seqStream
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("__iter__", __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;
}

/* "gnocis/sequences.pyx":682
 * 		return None
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_6__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_19sequenceStreamFASTA_6__str__ = {"__str__", (PyCFunction)__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_6__str__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_6__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_5__str__(__pyx_self, ((PyObject *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":683
 * 
 * 	def __str__(self):
 * 		return 'FASTA sequence stream<%s>'%(self.name)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_FASTA_sequence_stream_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 683, __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;

  /* "gnocis/sequences.pyx":682
 * 		return None
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamFASTA.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":685
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_8__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_19sequenceStreamFASTA_8__repr__ = {"__repr__", (PyCFunction)__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_8__repr__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_19sequenceStreamFASTA_8__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_19sequenceStreamFASTA_7__repr__(__pyx_self, ((PyObject *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":686
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * # Streams a FASTA file in blocks.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 686, __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;

  /* "gnocis/sequences.pyx":685
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamFASTA.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":689
 * 
 * # Streams a FASTA file in blocks.
 * cpdef streamFASTA(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a FASTA file.
 */

static PyObject *__pyx_pw_6gnocis_9sequences_5streamFASTA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences_streamFASTA(PyObject *__pyx_v_path, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_streamFASTA *__pyx_optional_args) {
  PyObject *__pyx_v_wantBlockSize = ((PyObject *)__pyx_int_5000);
  PyObject *__pyx_v_spacePrune = ((PyObject *)Py_True);
  PyObject *__pyx_v_dropChr = ((PyObject *)Py_True);
  PyObject *__pyx_v_restrictToSequences = ((PyObject *)Py_None);
  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("streamFASTA", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_wantBlockSize = __pyx_optional_args->wantBlockSize;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_spacePrune = __pyx_optional_args->spacePrune;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_dropChr = __pyx_optional_args->dropChr;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_restrictToSequences = __pyx_optional_args->restrictToSequences;
          }
        }
      }
    }
  }

  /* "gnocis/sequences.pyx":708
 * 	:rtype: sequenceStream
 * 	"""
 * 	return sequenceStreamFASTA(path, wantBlockSize, spacePrune, dropChr, restrictToSequences)             # <<<<<<<<<<<<<<
 * 
 * # Streams a FASTA file in blocks.
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_latin1_sequenceStreamFASTA); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_path);
    __Pyx_GIVEREF(__pyx_v_path);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_path);
    __Pyx_INCREF(__pyx_v_wantBlockSize);
    __Pyx_GIVEREF(__pyx_v_wantBlockSize);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_wantBlockSize);
    __Pyx_INCREF(__pyx_v_spacePrune);
    __Pyx_GIVEREF(__pyx_v_spacePrune);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_spacePrune);
    __Pyx_INCREF(__pyx_v_dropChr);
    __Pyx_GIVEREF(__pyx_v_dropChr);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_dropChr);
    __Pyx_INCREF(__pyx_v_restrictToSequences);
    __Pyx_GIVEREF(__pyx_v_restrictToSequences);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_restrictToSequences);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":689
 * 
 * # Streams a FASTA file in blocks.
 * cpdef streamFASTA(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a FASTA file.
 */

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

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_5streamFASTA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_4streamFASTA[] = "\n\tStreams a FASTA file.\n\t\n\t:param path: Path to the input file.\n\t:param wantBlockSize: Desired block size.\n\t:param spacePrune: Whether or not to prune sequence name spaces.\n\t:param dropChr: Whether or not to prune sequence name \"chr\"-prefixes.\n\t:param restrictToSequences: List of sequence names to restrict to/focus on.\n\t\n\t:type path: str\n\t:type wantBlockSize: int, optional\n\t:type spacePrune: bool, optional\n\t:type dropChr: bool, optional\n\t:type restrictToSequences: list, optional\n\t\n\t:return: Generated sequence stream.\n\t:rtype: sequenceStream\n\t";
static PyObject *__pyx_pw_6gnocis_9sequences_5streamFASTA(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_path = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_spacePrune = 0;
  PyObject *__pyx_v_dropChr = 0;
  PyObject *__pyx_v_restrictToSequences = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("streamFASTA (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_path,&__pyx_n_s_wantBlockSize,&__pyx_n_s_spacePrune,&__pyx_n_s_dropChr,&__pyx_n_s_restrictToSequences,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_5000);
    values[2] = ((PyObject *)Py_True);
    values[3] = ((PyObject *)Py_True);
    values[4] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spacePrune);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dropChr);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictToSequences);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "streamFASTA") < 0)) __PYX_ERR(0, 689, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_path = values[0];
    __pyx_v_wantBlockSize = values[1];
    __pyx_v_spacePrune = values[2];
    __pyx_v_dropChr = values[3];
    __pyx_v_restrictToSequences = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("streamFASTA", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 689, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.streamFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_4streamFASTA(__pyx_self, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences);

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

static PyObject *__pyx_pf_6gnocis_9sequences_4streamFASTA(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gnocis_9sequences_streamFASTA __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("streamFASTA", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.wantBlockSize = __pyx_v_wantBlockSize;
  __pyx_t_2.spacePrune = __pyx_v_spacePrune;
  __pyx_t_2.dropChr = __pyx_v_dropChr;
  __pyx_t_2.restrictToSequences = __pyx_v_restrictToSequences;
  __pyx_t_1 = __pyx_f_6gnocis_9sequences_streamFASTA(__pyx_v_path, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 689, __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("gnocis.sequences.streamFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":711
 * 
 * # Streams a FASTA file in blocks.
 * cpdef streamFASTAGZ(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a gzipped FASTA file.
 */

static PyObject *__pyx_pw_6gnocis_9sequences_7streamFASTAGZ(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences_streamFASTAGZ(PyObject *__pyx_v_path, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_streamFASTAGZ *__pyx_optional_args) {
  PyObject *__pyx_v_wantBlockSize = ((PyObject *)__pyx_int_5000);
  PyObject *__pyx_v_spacePrune = ((PyObject *)Py_True);
  PyObject *__pyx_v_dropChr = ((PyObject *)Py_True);
  PyObject *__pyx_v_restrictToSequences = ((PyObject *)Py_None);
  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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("streamFASTAGZ", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_wantBlockSize = __pyx_optional_args->wantBlockSize;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_spacePrune = __pyx_optional_args->spacePrune;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_dropChr = __pyx_optional_args->dropChr;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_restrictToSequences = __pyx_optional_args->restrictToSequences;
          }
        }
      }
    }
  }

  /* "gnocis/sequences.pyx":730
 * 	:rtype: sequenceStream
 * 	"""
 * 	return sequenceStreamFASTA(path, wantBlockSize, spacePrune, dropChr, restrictToSequences, isGZ = True)             # <<<<<<<<<<<<<<
 * 
 * # Represents a 2bit N-block
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_latin1_sequenceStreamFASTA); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_path);
  __Pyx_GIVEREF(__pyx_v_path);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_path);
  __Pyx_INCREF(__pyx_v_wantBlockSize);
  __Pyx_GIVEREF(__pyx_v_wantBlockSize);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_wantBlockSize);
  __Pyx_INCREF(__pyx_v_spacePrune);
  __Pyx_GIVEREF(__pyx_v_spacePrune);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_spacePrune);
  __Pyx_INCREF(__pyx_v_dropChr);
  __Pyx_GIVEREF(__pyx_v_dropChr);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_dropChr);
  __Pyx_INCREF(__pyx_v_restrictToSequences);
  __Pyx_GIVEREF(__pyx_v_restrictToSequences);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_restrictToSequences);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_isGZ, Py_True) < 0) __PYX_ERR(0, 730, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 730, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":711
 * 
 * # Streams a FASTA file in blocks.
 * cpdef streamFASTAGZ(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a gzipped FASTA file.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gnocis.sequences.streamFASTAGZ", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_7streamFASTAGZ(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_6streamFASTAGZ[] = "\n\tStreams a gzipped FASTA file.\n\t\n\t:param path: Path to the input file.\n\t:param wantBlockSize: Desired block size.\n\t:param spacePrune: Whether or not to prune sequence name spaces.\n\t:param dropChr: Whether or not to prune sequence name \"chr\"-prefixes.\n\t:param restrictToSequences: List of sequence names to restrict to/focus on.\n\t\n\t:type path: str\n\t:type wantBlockSize: int, optional\n\t:type spacePrune: bool, optional\n\t:type dropChr: bool, optional\n\t:type restrictToSequences: list, optional\n\t\n\t:return: Generated sequence stream.\n\t:rtype: sequenceStream\n\t";
static PyObject *__pyx_pw_6gnocis_9sequences_7streamFASTAGZ(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_path = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_spacePrune = 0;
  PyObject *__pyx_v_dropChr = 0;
  PyObject *__pyx_v_restrictToSequences = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("streamFASTAGZ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_path,&__pyx_n_s_wantBlockSize,&__pyx_n_s_spacePrune,&__pyx_n_s_dropChr,&__pyx_n_s_restrictToSequences,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_5000);
    values[2] = ((PyObject *)Py_True);
    values[3] = ((PyObject *)Py_True);
    values[4] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spacePrune);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dropChr);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictToSequences);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "streamFASTAGZ") < 0)) __PYX_ERR(0, 711, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_path = values[0];
    __pyx_v_wantBlockSize = values[1];
    __pyx_v_spacePrune = values[2];
    __pyx_v_dropChr = values[3];
    __pyx_v_restrictToSequences = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("streamFASTAGZ", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 711, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.streamFASTAGZ", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_6streamFASTAGZ(__pyx_self, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences);

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

static PyObject *__pyx_pf_6gnocis_9sequences_6streamFASTAGZ(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gnocis_9sequences_streamFASTAGZ __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("streamFASTAGZ", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.wantBlockSize = __pyx_v_wantBlockSize;
  __pyx_t_2.spacePrune = __pyx_v_spacePrune;
  __pyx_t_2.dropChr = __pyx_v_dropChr;
  __pyx_t_2.restrictToSequences = __pyx_v_restrictToSequences;
  __pyx_t_1 = __pyx_f_6gnocis_9sequences_streamFASTAGZ(__pyx_v_path, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __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("gnocis.sequences.streamFASTAGZ", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":737
 * 	cdef public int start, size
 * 
 * 	def __init__(self, start, size):             # <<<<<<<<<<<<<<
 * 		self.start, self.size = start, size
 * 
 */

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_size = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_size,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 737, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 737, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_start = values[0];
    __pyx_v_size = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 737, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.stream2bitNBlock.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_16stream2bitNBlock___init__(((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_v_self), __pyx_v_start, __pyx_v_size);

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

static int __pyx_pf_6gnocis_9sequences_16stream2bitNBlock___init__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_size) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "gnocis/sequences.pyx":738
 * 
 * 	def __init__(self, start, size):
 * 		self.start, self.size = start, size             # <<<<<<<<<<<<<<
 * 
 * # Represents a sequence in a 2bit file
 */
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_start); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 738, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 738, __pyx_L1_error)
  __pyx_v_self->start = __pyx_t_1;
  __pyx_v_self->size = __pyx_t_2;

  /* "gnocis/sequences.pyx":737
 * 	cdef public int start, size
 * 
 * 	def __init__(self, start, size):             # <<<<<<<<<<<<<<
 * 		self.start, self.size = start, size
 * 
 */

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

/* "gnocis/sequences.pyx":735
 * cdef class stream2bitNBlock:
 * 
 * 	cdef public int start, size             # <<<<<<<<<<<<<<
 * 
 * 	def __init__(self, start, size):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5start_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5start_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_5start___get__(((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_16stream2bitNBlock_5start___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__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_int(__pyx_v_self->start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 735, __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("gnocis.sequences.stream2bitNBlock.start.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_5start_2__set__(((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_5start_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 735, __pyx_L1_error)
  __pyx_v_self->start = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.stream2bitNBlock.start.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_4size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4size___get__(((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4size___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__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_int(__pyx_v_self->size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 735, __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("gnocis.sequences.stream2bitNBlock.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_4size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_4size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4size_2__set__(((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4size_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 735, __pyx_L1_error)
  __pyx_v_self->size = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.stream2bitNBlock.size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_2__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_16stream2bitNBlock_2__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  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("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.size, self.start)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->size); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->start); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.size, self.start)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_3 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v__dict = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":7
 *     state = (self.size, self.start)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_4 = (__pyx_v__dict != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__dict);
    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = False
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.size, self.start)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = False             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, None), state
 */
  /*else*/ {
    __pyx_v_use_setstate = 0;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = False
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, None), state
 *     else:
 */
  __pyx_t_5 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_5) {

    /* "(tree fragment)":13
 *         use_setstate = False
 *     if use_setstate:
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyx_unpickle_stream2bitNBlock); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_54760534);
    __Pyx_GIVEREF(__pyx_int_54760534);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_54760534);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_3, 2, Py_None);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = False
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, None), state
 *     else:
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_stream2bitNBlock__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_stream2bitNBlock); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_54760534);
    __Pyx_GIVEREF(__pyx_int_54760534);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_54760534);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitNBlock.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_stream2bitNBlock__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_16stream2bitNBlock_4__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_stream2bitNBlock__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_stream2bitNBlock__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_stream2bitNBlock, (type(self), 0x3439456, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_stream2bitNBlock__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitNBlock.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":749
 * 	cdef public list Nblocks
 * 
 * 	def __init__(self, name, fstream, wantBlockSize, Nblocks, nnt):             # <<<<<<<<<<<<<<
 * 		self.name, self.fstream = name, fstream
 * 		self.wantBlockSize = wantBlockSize
 */

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_fstream = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_Nblocks = 0;
  PyObject *__pyx_v_nnt = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_fstream,&__pyx_n_s_wantBlockSize,&__pyx_n_s_Nblocks,&__pyx_n_s_nnt,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fstream)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, 1); __PYX_ERR(0, 749, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, 2); __PYX_ERR(0, 749, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Nblocks)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, 3); __PYX_ERR(0, 749, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nnt)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, 4); __PYX_ERR(0, 749, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 749, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_name = values[0];
    __pyx_v_fstream = values[1];
    __pyx_v_wantBlockSize = values[2];
    __pyx_v_Nblocks = values[3];
    __pyx_v_nnt = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 749, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq___init__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self), __pyx_v_name, __pyx_v_fstream, __pyx_v_wantBlockSize, __pyx_v_Nblocks, __pyx_v_nnt);

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq___init__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_fstream, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_Nblocks, PyObject *__pyx_v_nnt) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "gnocis/sequences.pyx":750
 * 
 * 	def __init__(self, name, fstream, wantBlockSize, Nblocks, nnt):
 * 		self.name, self.fstream = name, fstream             # <<<<<<<<<<<<<<
 * 		self.wantBlockSize = wantBlockSize
 * 		self.Nblocks = Nblocks
 */
  if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 750, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_name;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_v_fstream;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->fstream);
  __Pyx_DECREF(__pyx_v_self->fstream);
  __pyx_v_self->fstream = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":751
 * 	def __init__(self, name, fstream, wantBlockSize, Nblocks, nnt):
 * 		self.name, self.fstream = name, fstream
 * 		self.wantBlockSize = wantBlockSize             # <<<<<<<<<<<<<<
 * 		self.Nblocks = Nblocks
 * 		self.nnt = nnt
 */
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_wantBlockSize); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 751, __pyx_L1_error)
  __pyx_v_self->wantBlockSize = __pyx_t_3;

  /* "gnocis/sequences.pyx":752
 * 		self.name, self.fstream = name, fstream
 * 		self.wantBlockSize = wantBlockSize
 * 		self.Nblocks = Nblocks             # <<<<<<<<<<<<<<
 * 		self.nnt = nnt
 * 
 */
  if (!(likely(PyList_CheckExact(__pyx_v_Nblocks))||((__pyx_v_Nblocks) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_Nblocks)->tp_name), 0))) __PYX_ERR(0, 752, __pyx_L1_error)
  __pyx_t_2 = __pyx_v_Nblocks;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->Nblocks);
  __Pyx_DECREF(__pyx_v_self->Nblocks);
  __pyx_v_self->Nblocks = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":753
 * 		self.wantBlockSize = wantBlockSize
 * 		self.Nblocks = Nblocks
 * 		self.nnt = nnt             # <<<<<<<<<<<<<<
 * 
 * 	def stream(self):
 */
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_nnt); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 753, __pyx_L1_error)
  __pyx_v_self->nnt = __pyx_t_3;

  /* "gnocis/sequences.pyx":749
 * 	cdef public list Nblocks
 * 
 * 	def __init__(self, name, fstream, wantBlockSize, Nblocks, nnt):             # <<<<<<<<<<<<<<
 * 		self.name, self.fstream = name, fstream
 * 		self.wantBlockSize = wantBlockSize
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_13stream2bitSeq_4generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":755
 * 		self.nnt = nnt
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		cdef list Nblocks = self.Nblocks
 * 		cdef stream2bitNBlock block
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_3stream(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_3stream(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stream (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_2stream(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_2stream(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("stream", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_21_stream(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_21_stream, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 755, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_13stream2bitSeq_4generator4, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_stream, __pyx_n_s_stream2bitSeq_stream, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 755, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.stream", __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_6gnocis_9sequences_13stream2bitSeq_4generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *)__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;
  long __pyx_t_6;
  char __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  int __pyx_t_9;
  int __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  char *__pyx_t_12;
  char *__pyx_t_13;
  char *__pyx_t_14;
  char *__pyx_t_15;
  int __pyx_t_16;
  long __pyx_t_17;
  int __pyx_t_18;
  int __pyx_t_19;
  Py_ssize_t __pyx_t_20;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stream", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L26_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, 755, __pyx_L1_error)

  /* "gnocis/sequences.pyx":756
 * 
 * 	def stream(self):
 * 		cdef list Nblocks = self.Nblocks             # <<<<<<<<<<<<<<
 * 		cdef stream2bitNBlock block
 * 		# Make conversion table that converts a byte to four nucleotides at a time.
 */
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->Nblocks;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_Nblocks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":761
 * 		# http://genome.ucsc.edu/FAQ/FAQformat.html#format7
 * 		# T - 00, C - 01, A - 10, G - 11
 * 		ntByIndex = [ <unsigned char>b'T', <unsigned char>b'C', <unsigned char>b'A', <unsigned char>b'G' ]             # <<<<<<<<<<<<<<
 * 		cdef char* byteToNTs = <char*>malloc(256*4)
 * 		for i in range(256):
 */
  __pyx_t_1 = __Pyx_PyInt_From_unsigned_char(((unsigned char)'T')); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(((unsigned char)'C')); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_unsigned_char(((unsigned char)'A')); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_unsigned_char(((unsigned char)'G')); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyList_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_cur_scope->__pyx_v_ntByIndex = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;

  /* "gnocis/sequences.pyx":762
 * 		# T - 00, C - 01, A - 10, G - 11
 * 		ntByIndex = [ <unsigned char>b'T', <unsigned char>b'C', <unsigned char>b'A', <unsigned char>b'G' ]
 * 		cdef char* byteToNTs = <char*>malloc(256*4)             # <<<<<<<<<<<<<<
 * 		for i in range(256):
 * 			byteToNTs[i*4+0] = ntByIndex[(i>>6)&3]
 */
  __pyx_cur_scope->__pyx_v_byteToNTs = ((char *)malloc(0x400));

  /* "gnocis/sequences.pyx":763
 * 		ntByIndex = [ <unsigned char>b'T', <unsigned char>b'C', <unsigned char>b'A', <unsigned char>b'G' ]
 * 		cdef char* byteToNTs = <char*>malloc(256*4)
 * 		for i in range(256):             # <<<<<<<<<<<<<<
 * 			byteToNTs[i*4+0] = ntByIndex[(i>>6)&3]
 * 			byteToNTs[i*4+1] = ntByIndex[(i>>4)&3]
 */
  for (__pyx_t_6 = 0; __pyx_t_6 < 0x100; __pyx_t_6+=1) {
    __pyx_t_5 = __Pyx_PyInt_From_long(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 763, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;

    /* "gnocis/sequences.pyx":764
 * 		cdef char* byteToNTs = <char*>malloc(256*4)
 * 		for i in range(256):
 * 			byteToNTs[i*4+0] = ntByIndex[(i>>6)&3]             # <<<<<<<<<<<<<<
 * 			byteToNTs[i*4+1] = ntByIndex[(i>>4)&3]
 * 			byteToNTs[i*4+2] = ntByIndex[(i>>2)&3]
 */
    __pyx_t_5 = __Pyx_PyInt_RshiftObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_6, 6, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyInt_AndObjC(__pyx_t_5, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_ntByIndex, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_7 = __Pyx_PyInt_As_char(__pyx_t_5); if (unlikely((__pyx_t_7 == (char)-1) && PyErr_Occurred())) __PYX_ERR(0, 764, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Multiply(__pyx_cur_scope->__pyx_v_i, __pyx_int_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_0, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 764, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    (__pyx_cur_scope->__pyx_v_byteToNTs[__pyx_t_8]) = __pyx_t_7;

    /* "gnocis/sequences.pyx":765
 * 		for i in range(256):
 * 			byteToNTs[i*4+0] = ntByIndex[(i>>6)&3]
 * 			byteToNTs[i*4+1] = ntByIndex[(i>>4)&3]             # <<<<<<<<<<<<<<
 * 			byteToNTs[i*4+2] = ntByIndex[(i>>2)&3]
 * 			byteToNTs[i*4+3] = ntByIndex[i&3]
 */
    __pyx_t_4 = __Pyx_PyInt_RshiftObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_4, 4, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_AndObjC(__pyx_t_4, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_ntByIndex, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = __Pyx_PyInt_As_char(__pyx_t_4); if (unlikely((__pyx_t_7 == (char)-1) && PyErr_Occurred())) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyNumber_Multiply(__pyx_cur_scope->__pyx_v_i, __pyx_int_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_AddObjC(__pyx_t_4, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    (__pyx_cur_scope->__pyx_v_byteToNTs[__pyx_t_8]) = __pyx_t_7;

    /* "gnocis/sequences.pyx":766
 * 			byteToNTs[i*4+0] = ntByIndex[(i>>6)&3]
 * 			byteToNTs[i*4+1] = ntByIndex[(i>>4)&3]
 * 			byteToNTs[i*4+2] = ntByIndex[(i>>2)&3]             # <<<<<<<<<<<<<<
 * 			byteToNTs[i*4+3] = ntByIndex[i&3]
 * 		cdef int* byteToNTsI = <int*> byteToNTs
 */
    __pyx_t_5 = __Pyx_PyInt_RshiftObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyInt_AndObjC(__pyx_t_5, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_ntByIndex, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_7 = __Pyx_PyInt_As_char(__pyx_t_5); if (unlikely((__pyx_t_7 == (char)-1) && PyErr_Occurred())) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Multiply(__pyx_cur_scope->__pyx_v_i, __pyx_int_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    (__pyx_cur_scope->__pyx_v_byteToNTs[__pyx_t_8]) = __pyx_t_7;

    /* "gnocis/sequences.pyx":767
 * 			byteToNTs[i*4+1] = ntByIndex[(i>>4)&3]
 * 			byteToNTs[i*4+2] = ntByIndex[(i>>2)&3]
 * 			byteToNTs[i*4+3] = ntByIndex[i&3]             # <<<<<<<<<<<<<<
 * 		cdef int* byteToNTsI = <int*> byteToNTs
 * 		#
 */
    __pyx_t_4 = __Pyx_PyInt_AndObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_ntByIndex, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_7 = __Pyx_PyInt_As_char(__pyx_t_5); if (unlikely((__pyx_t_7 == (char)-1) && PyErr_Occurred())) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Multiply(__pyx_cur_scope->__pyx_v_i, __pyx_int_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    (__pyx_cur_scope->__pyx_v_byteToNTs[__pyx_t_8]) = __pyx_t_7;
  }

  /* "gnocis/sequences.pyx":768
 * 			byteToNTs[i*4+2] = ntByIndex[(i>>2)&3]
 * 			byteToNTs[i*4+3] = ntByIndex[i&3]
 * 		cdef int* byteToNTsI = <int*> byteToNTs             # <<<<<<<<<<<<<<
 * 		#
 * 		cdef int nnt = self.nnt
 */
  __pyx_cur_scope->__pyx_v_byteToNTsI = ((int *)__pyx_cur_scope->__pyx_v_byteToNTs);

  /* "gnocis/sequences.pyx":770
 * 		cdef int* byteToNTsI = <int*> byteToNTs
 * 		#
 * 		cdef int nnt = self.nnt             # <<<<<<<<<<<<<<
 * 		cdef int wantBlockSize = self.wantBlockSize
 * 		cdef int nLoad = int((wantBlockSize+3)/4)
 */
  __pyx_t_9 = __pyx_cur_scope->__pyx_v_self->nnt;
  __pyx_cur_scope->__pyx_v_nnt = __pyx_t_9;

  /* "gnocis/sequences.pyx":771
 * 		#
 * 		cdef int nnt = self.nnt
 * 		cdef int wantBlockSize = self.wantBlockSize             # <<<<<<<<<<<<<<
 * 		cdef int nLoad = int((wantBlockSize+3)/4)
 * 		cdef int nLoadNT = nLoad*4
 */
  __pyx_t_9 = __pyx_cur_scope->__pyx_v_self->wantBlockSize;
  __pyx_cur_scope->__pyx_v_wantBlockSize = __pyx_t_9;

  /* "gnocis/sequences.pyx":772
 * 		cdef int nnt = self.nnt
 * 		cdef int wantBlockSize = self.wantBlockSize
 * 		cdef int nLoad = int((wantBlockSize+3)/4)             # <<<<<<<<<<<<<<
 * 		cdef int nLoadNT = nLoad*4
 * 		cdef int rcursor = 0
 */
  __pyx_cur_scope->__pyx_v_nLoad = ((int)(((double)(__pyx_cur_scope->__pyx_v_wantBlockSize + 3)) / 4.0));

  /* "gnocis/sequences.pyx":773
 * 		cdef int wantBlockSize = self.wantBlockSize
 * 		cdef int nLoad = int((wantBlockSize+3)/4)
 * 		cdef int nLoadNT = nLoad*4             # <<<<<<<<<<<<<<
 * 		cdef int rcursor = 0
 * 		cdef int filecursor = 0
 */
  __pyx_cur_scope->__pyx_v_nLoadNT = (__pyx_cur_scope->__pyx_v_nLoad * 4);

  /* "gnocis/sequences.pyx":774
 * 		cdef int nLoad = int((wantBlockSize+3)/4)
 * 		cdef int nLoadNT = nLoad*4
 * 		cdef int rcursor = 0             # <<<<<<<<<<<<<<
 * 		cdef int filecursor = 0
 * 		cdef int ints = 0
 */
  __pyx_cur_scope->__pyx_v_rcursor = 0;

  /* "gnocis/sequences.pyx":775
 * 		cdef int nLoadNT = nLoad*4
 * 		cdef int rcursor = 0
 * 		cdef int filecursor = 0             # <<<<<<<<<<<<<<
 * 		cdef int ints = 0
 * 		cdef int rbufsize = nLoadNT
 */
  __pyx_cur_scope->__pyx_v_filecursor = 0;

  /* "gnocis/sequences.pyx":776
 * 		cdef int rcursor = 0
 * 		cdef int filecursor = 0
 * 		cdef int ints = 0             # <<<<<<<<<<<<<<
 * 		cdef int rbufsize = nLoadNT
 * 		cdef char* rbuf = <char*> malloc(rbufsize+4)
 */
  __pyx_cur_scope->__pyx_v_ints = 0;

  /* "gnocis/sequences.pyx":777
 * 		cdef int filecursor = 0
 * 		cdef int ints = 0
 * 		cdef int rbufsize = nLoadNT             # <<<<<<<<<<<<<<
 * 		cdef char* rbuf = <char*> malloc(rbufsize+4)
 * 		cdef int* crbuf
 */
  __pyx_cur_scope->__pyx_v_rbufsize = __pyx_cur_scope->__pyx_v_nLoadNT;

  /* "gnocis/sequences.pyx":778
 * 		cdef int ints = 0
 * 		cdef int rbufsize = nLoadNT
 * 		cdef char* rbuf = <char*> malloc(rbufsize+4)             # <<<<<<<<<<<<<<
 * 		cdef int* crbuf
 * 		cdef int nprocess
 */
  __pyx_cur_scope->__pyx_v_rbuf = ((char *)malloc((__pyx_cur_scope->__pyx_v_rbufsize + 4)));

  /* "gnocis/sequences.pyx":785
 * 		cdef unsigned char c
 * 		#
 * 		cdef bool isEnd = False             # <<<<<<<<<<<<<<
 * 		while True:
 * 			# Convert a byte to four nucleotides at a time using lookup table
 */
  __pyx_cur_scope->__pyx_v_isEnd = 0;

  /* "gnocis/sequences.pyx":786
 * 		#
 * 		cdef bool isEnd = False
 * 		while True:             # <<<<<<<<<<<<<<
 * 			# Convert a byte to four nucleotides at a time using lookup table
 * 			if nnt - filecursor < nLoadNT:
 */
  while (1) {

    /* "gnocis/sequences.pyx":788
 * 		while True:
 * 			# Convert a byte to four nucleotides at a time using lookup table
 * 			if nnt - filecursor < nLoadNT:             # <<<<<<<<<<<<<<
 * 				nLoad = (nnt - filecursor + 3) >> 2
 * 				nLoadNT = nLoad << 2
 */
    __pyx_t_10 = (((__pyx_cur_scope->__pyx_v_nnt - __pyx_cur_scope->__pyx_v_filecursor) < __pyx_cur_scope->__pyx_v_nLoadNT) != 0);
    if (__pyx_t_10) {

      /* "gnocis/sequences.pyx":789
 * 			# Convert a byte to four nucleotides at a time using lookup table
 * 			if nnt - filecursor < nLoadNT:
 * 				nLoad = (nnt - filecursor + 3) >> 2             # <<<<<<<<<<<<<<
 * 				nLoadNT = nLoad << 2
 * 				isEnd = True
 */
      __pyx_cur_scope->__pyx_v_nLoad = (((__pyx_cur_scope->__pyx_v_nnt - __pyx_cur_scope->__pyx_v_filecursor) + 3) >> 2);

      /* "gnocis/sequences.pyx":790
 * 			if nnt - filecursor < nLoadNT:
 * 				nLoad = (nnt - filecursor + 3) >> 2
 * 				nLoadNT = nLoad << 2             # <<<<<<<<<<<<<<
 * 				isEnd = True
 * 			cbuf = self.fstream.read(nLoad)
 */
      __pyx_cur_scope->__pyx_v_nLoadNT = (__pyx_cur_scope->__pyx_v_nLoad << 2);

      /* "gnocis/sequences.pyx":791
 * 				nLoad = (nnt - filecursor + 3) >> 2
 * 				nLoadNT = nLoad << 2
 * 				isEnd = True             # <<<<<<<<<<<<<<
 * 			cbuf = self.fstream.read(nLoad)
 * 			crbuf = <int*>&rbuf[rcursor]
 */
      __pyx_cur_scope->__pyx_v_isEnd = 1;

      /* "gnocis/sequences.pyx":788
 * 		while True:
 * 			# Convert a byte to four nucleotides at a time using lookup table
 * 			if nnt - filecursor < nLoadNT:             # <<<<<<<<<<<<<<
 * 				nLoad = (nnt - filecursor + 3) >> 2
 * 				nLoadNT = nLoad << 2
 */
    }

    /* "gnocis/sequences.pyx":792
 * 				nLoadNT = nLoad << 2
 * 				isEnd = True
 * 			cbuf = self.fstream.read(nLoad)             # <<<<<<<<<<<<<<
 * 			crbuf = <int*>&rbuf[rcursor]
 * 			for c in cbuf:
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->fstream, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_nLoad); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_cbuf);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_4));
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;

    /* "gnocis/sequences.pyx":793
 * 				isEnd = True
 * 			cbuf = self.fstream.read(nLoad)
 * 			crbuf = <int*>&rbuf[rcursor]             # <<<<<<<<<<<<<<
 * 			for c in cbuf:
 * 				crbuf[0] = byteToNTsI[c]
 */
    __pyx_cur_scope->__pyx_v_crbuf = ((int *)(&(__pyx_cur_scope->__pyx_v_rbuf[__pyx_cur_scope->__pyx_v_rcursor])));

    /* "gnocis/sequences.pyx":794
 * 			cbuf = self.fstream.read(nLoad)
 * 			crbuf = <int*>&rbuf[rcursor]
 * 			for c in cbuf:             # <<<<<<<<<<<<<<
 * 				crbuf[0] = byteToNTsI[c]
 * 				crbuf += 1
 */
    if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
      __PYX_ERR(0, 794, __pyx_L1_error)
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_cbuf);
    __pyx_t_11 = __pyx_cur_scope->__pyx_v_cbuf;
    __pyx_t_13 = PyBytes_AS_STRING(__pyx_t_11);
    __pyx_t_14 = (__pyx_t_13 + PyBytes_GET_SIZE(__pyx_t_11));
    for (__pyx_t_15 = __pyx_t_13; __pyx_t_15 < __pyx_t_14; __pyx_t_15++) {
      __pyx_t_12 = __pyx_t_15;
      __pyx_cur_scope->__pyx_v_c = (__pyx_t_12[0]);

      /* "gnocis/sequences.pyx":795
 * 			crbuf = <int*>&rbuf[rcursor]
 * 			for c in cbuf:
 * 				crbuf[0] = byteToNTsI[c]             # <<<<<<<<<<<<<<
 * 				crbuf += 1
 * 			if isEnd:
 */
      (__pyx_cur_scope->__pyx_v_crbuf[0]) = (__pyx_cur_scope->__pyx_v_byteToNTsI[__pyx_cur_scope->__pyx_v_c]);

      /* "gnocis/sequences.pyx":796
 * 			for c in cbuf:
 * 				crbuf[0] = byteToNTsI[c]
 * 				crbuf += 1             # <<<<<<<<<<<<<<
 * 			if isEnd:
 * 				rcursor += nnt - filecursor
 */
      __pyx_cur_scope->__pyx_v_crbuf = (__pyx_cur_scope->__pyx_v_crbuf + 1);
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;

    /* "gnocis/sequences.pyx":797
 * 				crbuf[0] = byteToNTsI[c]
 * 				crbuf += 1
 * 			if isEnd:             # <<<<<<<<<<<<<<
 * 				rcursor += nnt - filecursor
 * 			else:
 */
    __pyx_t_10 = (__pyx_cur_scope->__pyx_v_isEnd != 0);
    if (__pyx_t_10) {

      /* "gnocis/sequences.pyx":798
 * 				crbuf += 1
 * 			if isEnd:
 * 				rcursor += nnt - filecursor             # <<<<<<<<<<<<<<
 * 			else:
 * 				rcursor += 4*len(cbuf)
 */
      __pyx_cur_scope->__pyx_v_rcursor = (__pyx_cur_scope->__pyx_v_rcursor + (__pyx_cur_scope->__pyx_v_nnt - __pyx_cur_scope->__pyx_v_filecursor));

      /* "gnocis/sequences.pyx":797
 * 				crbuf[0] = byteToNTsI[c]
 * 				crbuf += 1
 * 			if isEnd:             # <<<<<<<<<<<<<<
 * 				rcursor += nnt - filecursor
 * 			else:
 */
      goto __pyx_L11;
    }

    /* "gnocis/sequences.pyx":800
 * 				rcursor += nnt - filecursor
 * 			else:
 * 				rcursor += 4*len(cbuf)             # <<<<<<<<<<<<<<
 * 			if rcursor >= rbufsize+4:
 * 				raise Exception('WARNING! rcursor >= rbufsize+1! rcursor = %d'%rcursor)
 */
    /*else*/ {
      if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(0, 800, __pyx_L1_error)
      }
      __pyx_t_8 = PyBytes_GET_SIZE(__pyx_cur_scope->__pyx_v_cbuf); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 800, __pyx_L1_error)
      __pyx_cur_scope->__pyx_v_rcursor = (__pyx_cur_scope->__pyx_v_rcursor + (4 * __pyx_t_8));
    }
    __pyx_L11:;

    /* "gnocis/sequences.pyx":801
 * 			else:
 * 				rcursor += 4*len(cbuf)
 * 			if rcursor >= rbufsize+4:             # <<<<<<<<<<<<<<
 * 				raise Exception('WARNING! rcursor >= rbufsize+1! rcursor = %d'%rcursor)
 * 			filecursor += nLoadNT
 */
    __pyx_t_10 = ((__pyx_cur_scope->__pyx_v_rcursor >= (__pyx_cur_scope->__pyx_v_rbufsize + 4)) != 0);
    if (unlikely(__pyx_t_10)) {

      /* "gnocis/sequences.pyx":802
 * 				rcursor += 4*len(cbuf)
 * 			if rcursor >= rbufsize+4:
 * 				raise Exception('WARNING! rcursor >= rbufsize+1! rcursor = %d'%rcursor)             # <<<<<<<<<<<<<<
 * 			filecursor += nLoadNT
 * 			# Output fragments of requested size
 */
      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_rcursor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 802, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_WARNING_rcursor_rbufsize_1_rcurs, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 802, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 802, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 802, __pyx_L1_error)

      /* "gnocis/sequences.pyx":801
 * 			else:
 * 				rcursor += 4*len(cbuf)
 * 			if rcursor >= rbufsize+4:             # <<<<<<<<<<<<<<
 * 				raise Exception('WARNING! rcursor >= rbufsize+1! rcursor = %d'%rcursor)
 * 			filecursor += nLoadNT
 */
    }

    /* "gnocis/sequences.pyx":803
 * 			if rcursor >= rbufsize+4:
 * 				raise Exception('WARNING! rcursor >= rbufsize+1! rcursor = %d'%rcursor)
 * 			filecursor += nLoadNT             # <<<<<<<<<<<<<<
 * 			# Output fragments of requested size
 * 			while rcursor > 0:
 */
    __pyx_cur_scope->__pyx_v_filecursor = (__pyx_cur_scope->__pyx_v_filecursor + __pyx_cur_scope->__pyx_v_nLoadNT);

    /* "gnocis/sequences.pyx":805
 * 			filecursor += nLoadNT
 * 			# Output fragments of requested size
 * 			while rcursor > 0:             # <<<<<<<<<<<<<<
 * 				if rcursor < wantBlockSize and not isEnd:
 * 					break
 */
    while (1) {
      __pyx_t_10 = ((__pyx_cur_scope->__pyx_v_rcursor > 0) != 0);
      if (!__pyx_t_10) break;

      /* "gnocis/sequences.pyx":806
 * 			# Output fragments of requested size
 * 			while rcursor > 0:
 * 				if rcursor < wantBlockSize and not isEnd:             # <<<<<<<<<<<<<<
 * 					break
 * 				nprocess = wantBlockSize
 */
      __pyx_t_16 = ((__pyx_cur_scope->__pyx_v_rcursor < __pyx_cur_scope->__pyx_v_wantBlockSize) != 0);
      if (__pyx_t_16) {
      } else {
        __pyx_t_10 = __pyx_t_16;
        goto __pyx_L16_bool_binop_done;
      }
      __pyx_t_16 = ((!(__pyx_cur_scope->__pyx_v_isEnd != 0)) != 0);
      __pyx_t_10 = __pyx_t_16;
      __pyx_L16_bool_binop_done:;
      if (__pyx_t_10) {

        /* "gnocis/sequences.pyx":807
 * 			while rcursor > 0:
 * 				if rcursor < wantBlockSize and not isEnd:
 * 					break             # <<<<<<<<<<<<<<
 * 				nprocess = wantBlockSize
 * 				if rcursor < nprocess:
 */
        goto __pyx_L14_break;

        /* "gnocis/sequences.pyx":806
 * 			# Output fragments of requested size
 * 			while rcursor > 0:
 * 				if rcursor < wantBlockSize and not isEnd:             # <<<<<<<<<<<<<<
 * 					break
 * 				nprocess = wantBlockSize
 */
      }

      /* "gnocis/sequences.pyx":808
 * 				if rcursor < wantBlockSize and not isEnd:
 * 					break
 * 				nprocess = wantBlockSize             # <<<<<<<<<<<<<<
 * 				if rcursor < nprocess:
 * 					nprocess = rcursor
 */
      __pyx_cur_scope->__pyx_v_nprocess = __pyx_cur_scope->__pyx_v_wantBlockSize;

      /* "gnocis/sequences.pyx":809
 * 					break
 * 				nprocess = wantBlockSize
 * 				if rcursor < nprocess:             # <<<<<<<<<<<<<<
 * 					nprocess = rcursor
 * 				firstValidNBlock = 0
 */
      __pyx_t_10 = ((__pyx_cur_scope->__pyx_v_rcursor < __pyx_cur_scope->__pyx_v_nprocess) != 0);
      if (__pyx_t_10) {

        /* "gnocis/sequences.pyx":810
 * 				nprocess = wantBlockSize
 * 				if rcursor < nprocess:
 * 					nprocess = rcursor             # <<<<<<<<<<<<<<
 * 				firstValidNBlock = 0
 * 				for iblock, block in enumerate(Nblocks):
 */
        __pyx_cur_scope->__pyx_v_nprocess = __pyx_cur_scope->__pyx_v_rcursor;

        /* "gnocis/sequences.pyx":809
 * 					break
 * 				nprocess = wantBlockSize
 * 				if rcursor < nprocess:             # <<<<<<<<<<<<<<
 * 					nprocess = rcursor
 * 				firstValidNBlock = 0
 */
      }

      /* "gnocis/sequences.pyx":811
 * 				if rcursor < nprocess:
 * 					nprocess = rcursor
 * 				firstValidNBlock = 0             # <<<<<<<<<<<<<<
 * 				for iblock, block in enumerate(Nblocks):
 * 					if block.start + block.size < ints:
 */
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_firstValidNBlock);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_firstValidNBlock, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);

      /* "gnocis/sequences.pyx":812
 * 					nprocess = rcursor
 * 				firstValidNBlock = 0
 * 				for iblock, block in enumerate(Nblocks):             # <<<<<<<<<<<<<<
 * 					if block.start + block.size < ints:
 * 						firstValidNBlock = iblock + 1
 */
      __Pyx_INCREF(__pyx_int_0);
      __pyx_t_4 = __pyx_int_0;
      __pyx_t_5 = __pyx_cur_scope->__pyx_v_Nblocks; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0;
      for (;;) {
        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_5)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 812, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 812, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6gnocis_9sequences_stream2bitNBlock))))) __PYX_ERR(0, 812, __pyx_L1_error)
        __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_block));
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_block, ((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_t_3));
        __Pyx_GIVEREF(__pyx_t_3);
        __pyx_t_3 = 0;
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_iblock);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_iblock, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_4);
        __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_t_4, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 812, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4);
        __pyx_t_4 = __pyx_t_3;
        __pyx_t_3 = 0;

        /* "gnocis/sequences.pyx":813
 * 				firstValidNBlock = 0
 * 				for iblock, block in enumerate(Nblocks):
 * 					if block.start + block.size < ints:             # <<<<<<<<<<<<<<
 * 						firstValidNBlock = iblock + 1
 * 						continue
 */
        __pyx_t_10 = (((__pyx_cur_scope->__pyx_v_block->start + __pyx_cur_scope->__pyx_v_block->size) < __pyx_cur_scope->__pyx_v_ints) != 0);
        if (__pyx_t_10) {

          /* "gnocis/sequences.pyx":814
 * 				for iblock, block in enumerate(Nblocks):
 * 					if block.start + block.size < ints:
 * 						firstValidNBlock = iblock + 1             # <<<<<<<<<<<<<<
 * 						continue
 * 					if block.start >= ints + nLoadNT:
 */
          __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_iblock, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 814, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_firstValidNBlock);
          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_firstValidNBlock, __pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_3);
          __pyx_t_3 = 0;

          /* "gnocis/sequences.pyx":815
 * 					if block.start + block.size < ints:
 * 						firstValidNBlock = iblock + 1
 * 						continue             # <<<<<<<<<<<<<<
 * 					if block.start >= ints + nLoadNT:
 * 						break
 */
          goto __pyx_L19_continue;

          /* "gnocis/sequences.pyx":813
 * 				firstValidNBlock = 0
 * 				for iblock, block in enumerate(Nblocks):
 * 					if block.start + block.size < ints:             # <<<<<<<<<<<<<<
 * 						firstValidNBlock = iblock + 1
 * 						continue
 */
        }

        /* "gnocis/sequences.pyx":816
 * 						firstValidNBlock = iblock + 1
 * 						continue
 * 					if block.start >= ints + nLoadNT:             # <<<<<<<<<<<<<<
 * 						break
 * 					iA = max(block.start - ints, 0)
 */
        __pyx_t_10 = ((__pyx_cur_scope->__pyx_v_block->start >= (__pyx_cur_scope->__pyx_v_ints + __pyx_cur_scope->__pyx_v_nLoadNT)) != 0);
        if (__pyx_t_10) {

          /* "gnocis/sequences.pyx":817
 * 						continue
 * 					if block.start >= ints + nLoadNT:
 * 						break             # <<<<<<<<<<<<<<
 * 					iA = max(block.start - ints, 0)
 * 					iB = min(block.start + block.size - ints, nLoadNT)
 */
          goto __pyx_L20_break;

          /* "gnocis/sequences.pyx":816
 * 						firstValidNBlock = iblock + 1
 * 						continue
 * 					if block.start >= ints + nLoadNT:             # <<<<<<<<<<<<<<
 * 						break
 * 					iA = max(block.start - ints, 0)
 */
        }

        /* "gnocis/sequences.pyx":818
 * 					if block.start >= ints + nLoadNT:
 * 						break
 * 					iA = max(block.start - ints, 0)             # <<<<<<<<<<<<<<
 * 					iB = min(block.start + block.size - ints, nLoadNT)
 * 					for x in range(iA, iB):
 */
        __pyx_t_6 = 0;
        __pyx_t_9 = (__pyx_cur_scope->__pyx_v_block->start - __pyx_cur_scope->__pyx_v_ints);
        if (((__pyx_t_6 > __pyx_t_9) != 0)) {
          __pyx_t_17 = __pyx_t_6;
        } else {
          __pyx_t_17 = __pyx_t_9;
        }
        __pyx_cur_scope->__pyx_v_iA = __pyx_t_17;

        /* "gnocis/sequences.pyx":819
 * 						break
 * 					iA = max(block.start - ints, 0)
 * 					iB = min(block.start + block.size - ints, nLoadNT)             # <<<<<<<<<<<<<<
 * 					for x in range(iA, iB):
 * 						rbuf[x] = <char>b'N'
 */
        __pyx_t_9 = __pyx_cur_scope->__pyx_v_nLoadNT;
        __pyx_t_18 = ((__pyx_cur_scope->__pyx_v_block->start + __pyx_cur_scope->__pyx_v_block->size) - __pyx_cur_scope->__pyx_v_ints);
        if (((__pyx_t_9 < __pyx_t_18) != 0)) {
          __pyx_t_19 = __pyx_t_9;
        } else {
          __pyx_t_19 = __pyx_t_18;
        }
        __pyx_cur_scope->__pyx_v_iB = __pyx_t_19;

        /* "gnocis/sequences.pyx":820
 * 					iA = max(block.start - ints, 0)
 * 					iB = min(block.start + block.size - ints, nLoadNT)
 * 					for x in range(iA, iB):             # <<<<<<<<<<<<<<
 * 						rbuf[x] = <char>b'N'
 * 				if firstValidNBlock > 0:
 */
        __pyx_t_19 = __pyx_cur_scope->__pyx_v_iB;
        __pyx_t_9 = __pyx_t_19;
        for (__pyx_t_17 = __pyx_cur_scope->__pyx_v_iA; __pyx_t_17 < __pyx_t_9; __pyx_t_17+=1) {
          __pyx_cur_scope->__pyx_v_x = __pyx_t_17;

          /* "gnocis/sequences.pyx":821
 * 					iB = min(block.start + block.size - ints, nLoadNT)
 * 					for x in range(iA, iB):
 * 						rbuf[x] = <char>b'N'             # <<<<<<<<<<<<<<
 * 				if firstValidNBlock > 0:
 * 					Nblocks = Nblocks[firstValidNBlock:]
 */
          (__pyx_cur_scope->__pyx_v_rbuf[__pyx_cur_scope->__pyx_v_x]) = ((char)'N');
        }

        /* "gnocis/sequences.pyx":812
 * 					nprocess = rcursor
 * 				firstValidNBlock = 0
 * 				for iblock, block in enumerate(Nblocks):             # <<<<<<<<<<<<<<
 * 					if block.start + block.size < ints:
 * 						firstValidNBlock = iblock + 1
 */
        __pyx_L19_continue:;
      }
      __pyx_L20_break:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "gnocis/sequences.pyx":822
 * 					for x in range(iA, iB):
 * 						rbuf[x] = <char>b'N'
 * 				if firstValidNBlock > 0:             # <<<<<<<<<<<<<<
 * 					Nblocks = Nblocks[firstValidNBlock:]
 * 				ints += nprocess
 */
      __pyx_t_4 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_firstValidNBlock, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 822, __pyx_L1_error)
      __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 822, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_10) {

        /* "gnocis/sequences.pyx":823
 * 						rbuf[x] = <char>b'N'
 * 				if firstValidNBlock > 0:
 * 					Nblocks = Nblocks[firstValidNBlock:]             # <<<<<<<<<<<<<<
 * 				ints += nprocess
 * 				yield (<bytes>rbuf[:nprocess]).decode('UTF-8')
 */
        if (unlikely(__pyx_cur_scope->__pyx_v_Nblocks == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 823, __pyx_L1_error)
        }
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_firstValidNBlock);
        __pyx_t_4 = __pyx_cur_scope->__pyx_v_firstValidNBlock;
        __pyx_t_10 = (__pyx_t_4 == Py_None);
        if (__pyx_t_10) {
          __pyx_t_8 = 0;
        } else {
          __pyx_t_20 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_20 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 823, __pyx_L1_error)
          __pyx_t_8 = __pyx_t_20;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyList_GetSlice(__pyx_cur_scope->__pyx_v_Nblocks, __pyx_t_8, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 823, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_Nblocks);
        __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_Nblocks, ((PyObject*)__pyx_t_4));
        __Pyx_GIVEREF(__pyx_t_4);
        __pyx_t_4 = 0;

        /* "gnocis/sequences.pyx":822
 * 					for x in range(iA, iB):
 * 						rbuf[x] = <char>b'N'
 * 				if firstValidNBlock > 0:             # <<<<<<<<<<<<<<
 * 					Nblocks = Nblocks[firstValidNBlock:]
 * 				ints += nprocess
 */
      }

      /* "gnocis/sequences.pyx":824
 * 				if firstValidNBlock > 0:
 * 					Nblocks = Nblocks[firstValidNBlock:]
 * 				ints += nprocess             # <<<<<<<<<<<<<<
 * 				yield (<bytes>rbuf[:nprocess]).decode('UTF-8')
 * 				memcpy(rbuf, &rbuf[nprocess], rbufsize-nprocess)
 */
      __pyx_cur_scope->__pyx_v_ints = (__pyx_cur_scope->__pyx_v_ints + __pyx_cur_scope->__pyx_v_nprocess);

      /* "gnocis/sequences.pyx":825
 * 					Nblocks = Nblocks[firstValidNBlock:]
 * 				ints += nprocess
 * 				yield (<bytes>rbuf[:nprocess]).decode('UTF-8')             # <<<<<<<<<<<<<<
 * 				memcpy(rbuf, &rbuf[nprocess], rbufsize-nprocess)
 * 				rcursor -= nprocess
 */
      __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_cur_scope->__pyx_v_rbuf + 0, __pyx_cur_scope->__pyx_v_nprocess - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 825, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__pyx_t_4 == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
        __PYX_ERR(0, 825, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_decode_bytes(((PyObject*)__pyx_t_4), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 825, __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;
      __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_L26_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 825, __pyx_L1_error)

      /* "gnocis/sequences.pyx":826
 * 				ints += nprocess
 * 				yield (<bytes>rbuf[:nprocess]).decode('UTF-8')
 * 				memcpy(rbuf, &rbuf[nprocess], rbufsize-nprocess)             # <<<<<<<<<<<<<<
 * 				rcursor -= nprocess
 * 			if isEnd:
 */
      (void)(memcpy(__pyx_cur_scope->__pyx_v_rbuf, (&(__pyx_cur_scope->__pyx_v_rbuf[__pyx_cur_scope->__pyx_v_nprocess])), (__pyx_cur_scope->__pyx_v_rbufsize - __pyx_cur_scope->__pyx_v_nprocess)));

      /* "gnocis/sequences.pyx":827
 * 				yield (<bytes>rbuf[:nprocess]).decode('UTF-8')
 * 				memcpy(rbuf, &rbuf[nprocess], rbufsize-nprocess)
 * 				rcursor -= nprocess             # <<<<<<<<<<<<<<
 * 			if isEnd:
 * 				break
 */
      __pyx_cur_scope->__pyx_v_rcursor = (__pyx_cur_scope->__pyx_v_rcursor - __pyx_cur_scope->__pyx_v_nprocess);
    }
    __pyx_L14_break:;

    /* "gnocis/sequences.pyx":828
 * 				memcpy(rbuf, &rbuf[nprocess], rbufsize-nprocess)
 * 				rcursor -= nprocess
 * 			if isEnd:             # <<<<<<<<<<<<<<
 * 				break
 * 		free(rbuf)
 */
    __pyx_t_10 = (__pyx_cur_scope->__pyx_v_isEnd != 0);
    if (__pyx_t_10) {

      /* "gnocis/sequences.pyx":829
 * 				rcursor -= nprocess
 * 			if isEnd:
 * 				break             # <<<<<<<<<<<<<<
 * 		free(rbuf)
 * 		free(byteToNTs)
 */
      goto __pyx_L7_break;

      /* "gnocis/sequences.pyx":828
 * 				memcpy(rbuf, &rbuf[nprocess], rbufsize-nprocess)
 * 				rcursor -= nprocess
 * 			if isEnd:             # <<<<<<<<<<<<<<
 * 				break
 * 		free(rbuf)
 */
    }
  }
  __pyx_L7_break:;

  /* "gnocis/sequences.pyx":830
 * 			if isEnd:
 * 				break
 * 		free(rbuf)             # <<<<<<<<<<<<<<
 * 		free(byteToNTs)
 * 
 */
  free(__pyx_cur_scope->__pyx_v_rbuf);

  /* "gnocis/sequences.pyx":831
 * 				break
 * 		free(rbuf)
 * 		free(byteToNTs)             # <<<<<<<<<<<<<<
 * 
 * 	def __iter__(self):
 */
  free(__pyx_cur_scope->__pyx_v_byteToNTs);
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":755
 * 		self.nnt = nnt
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		cdef list Nblocks = self.Nblocks
 * 		cdef stream2bitNBlock block
 */

  /* 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_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("stream", __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;
}

/* "gnocis/sequences.pyx":833
 * 		free(byteToNTs)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.stream()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_6__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_6__iter__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_5__iter__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_5__iter__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "gnocis/sequences.pyx":834
 * 
 * 	def __iter__(self):
 * 		return self.stream()             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_stream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __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;

  /* "gnocis/sequences.pyx":833
 * 		free(byteToNTs)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.stream()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":836
 * 		return self.stream()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_8__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_8__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7__str__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_7__str__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__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);

  /* "gnocis/sequences.pyx":837
 * 
 * 	def __str__(self):
 * 		return '2bit sequence stream<%s>'%(self.name)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_2bit_sequence_stream_s, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":836
 * 		return self.stream()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":839
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_10__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_10__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_9__repr__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_9__repr__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "gnocis/sequences.pyx":840
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * # Represents stream of 2bit sequences.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":839
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":743
 * cdef class stream2bitSeq:
 * 
 * 	cdef public str name             # <<<<<<<<<<<<<<
 * 	cdef public object fstream
 * 	cdef public int wantBlockSize
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_4name___get__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_4name_2__set__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_4name_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 743, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_4name_4__del__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_4name_4__del__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = ((PyObject*)Py_None);

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

/* "gnocis/sequences.pyx":744
 * 
 * 	cdef public str name
 * 	cdef public object fstream             # <<<<<<<<<<<<<<
 * 	cdef public int wantBlockSize
 * 	cdef public int nnt
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7fstream___get__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7fstream_2__set__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7fstream_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->fstream);
  __Pyx_DECREF(__pyx_v_self->fstream);
  __pyx_v_self->fstream = __pyx_v_value;

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7fstream_4__del__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7fstream_4__del__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->fstream);
  __Pyx_DECREF(__pyx_v_self->fstream);
  __pyx_v_self->fstream = Py_None;

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

/* "gnocis/sequences.pyx":745
 * 	cdef public str name
 * 	cdef public object fstream
 * 	cdef public int wantBlockSize             # <<<<<<<<<<<<<<
 * 	cdef public int nnt
 * 	cdef public list Nblocks
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize___get__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__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_int(__pyx_v_self->wantBlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __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("gnocis.sequences.stream2bitSeq.wantBlockSize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_2__set__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 745, __pyx_L1_error)
  __pyx_v_self->wantBlockSize = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.wantBlockSize.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":746
 * 	cdef public object fstream
 * 	cdef public int wantBlockSize
 * 	cdef public int nnt             # <<<<<<<<<<<<<<
 * 	cdef public list Nblocks
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_3nnt_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_3nnt_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_3nnt___get__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_3nnt___get__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__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_int(__pyx_v_self->nnt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __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("gnocis.sequences.stream2bitSeq.nnt.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_3nnt_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_3nnt_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_3nnt_2__set__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_3nnt_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 746, __pyx_L1_error)
  __pyx_v_self->nnt = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.nnt.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":747
 * 	cdef public int wantBlockSize
 * 	cdef public int nnt
 * 	cdef public list Nblocks             # <<<<<<<<<<<<<<
 * 
 * 	def __init__(self, name, fstream, wantBlockSize, Nblocks, nnt):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7Nblocks___get__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7Nblocks_2__set__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7Nblocks_2__set__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 747, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->Nblocks);
  __Pyx_DECREF(__pyx_v_self->Nblocks);
  __pyx_v_self->Nblocks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.Nblocks.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7Nblocks_4__del__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_13stream2bitSeq_7Nblocks_4__del__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->Nblocks);
  __Pyx_DECREF(__pyx_v_self->Nblocks);
  __pyx_v_self->Nblocks = ((PyObject*)Py_None);

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_12__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_12__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_11__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_11__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  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("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.Nblocks, self.fstream, self.name, self.nnt, self.wantBlockSize)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nnt); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->wantBlockSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_self->Nblocks);
  __Pyx_GIVEREF(__pyx_v_self->Nblocks);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self->Nblocks);
  __Pyx_INCREF(__pyx_v_self->fstream);
  __Pyx_GIVEREF(__pyx_v_self->fstream);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->fstream);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.Nblocks, self.fstream, self.name, self.nnt, self.wantBlockSize)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_3 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v__dict = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":7
 *     state = (self.Nblocks, self.fstream, self.name, self.nnt, self.wantBlockSize)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_4 = (__pyx_v__dict != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__dict);
    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.Nblocks is not None or self.fstream is not None or self.name is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.Nblocks, self.fstream, self.name, self.nnt, self.wantBlockSize)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.Nblocks is not None or self.fstream is not None or self.name is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, None), state
 */
  /*else*/ {
    __pyx_t_4 = (__pyx_v_self->Nblocks != ((PyObject*)Py_None));
    __pyx_t_6 = (__pyx_t_4 != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_5 = __pyx_t_6;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_6 = (__pyx_v_self->fstream != Py_None);
    __pyx_t_4 = (__pyx_t_6 != 0);
    if (!__pyx_t_4) {
    } else {
      __pyx_t_5 = __pyx_t_4;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_self->name != ((PyObject*)Py_None));
    __pyx_t_6 = (__pyx_t_4 != 0);
    __pyx_t_5 = __pyx_t_6;
    __pyx_L4_bool_binop_done:;
    __pyx_v_use_setstate = __pyx_t_5;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.Nblocks is not None or self.fstream is not None or self.name is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, None), state
 *     else:
 */
  __pyx_t_5 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_5) {

    /* "(tree fragment)":13
 *         use_setstate = self.Nblocks is not None or self.fstream is not None or self.name is not None
 *     if use_setstate:
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyx_unpickle_stream2bitSeq); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_156819973);
    __Pyx_GIVEREF(__pyx_int_156819973);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_156819973);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_3, 2, Py_None);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.Nblocks is not None or self.fstream is not None or self.name is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, None), state
 *     else:
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_stream2bitSeq__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_stream2bitSeq); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_156819973);
    __Pyx_GIVEREF(__pyx_int_156819973);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_156819973);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_stream2bitSeq__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_14__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_13stream2bitSeq_14__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_13stream2bitSeq_13__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_13stream2bitSeq_13__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_stream2bitSeq__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_stream2bitSeq__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_stream2bitSeq, (type(self), 0x958e205, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_stream2bitSeq__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.stream2bitSeq.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":860
 * 	"""
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences):             # <<<<<<<<<<<<<<
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_path = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_spacePrune = 0;
  PyObject *__pyx_v_dropChr = 0;
  PyObject *__pyx_v_restrictToSequences = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_path,&__pyx_n_s_wantBlockSize,&__pyx_n_s_spacePrune,&__pyx_n_s_dropChr,&__pyx_n_s_restrictToSequences,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 1); __PYX_ERR(0, 860, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 2); __PYX_ERR(0, 860, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spacePrune)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 3); __PYX_ERR(0, 860, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dropChr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 4); __PYX_ERR(0, 860, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictToSequences)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 5); __PYX_ERR(0, 860, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 860, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_self = values[0];
    __pyx_v_path = values[1];
    __pyx_v_wantBlockSize = values[2];
    __pyx_v_spacePrune = values[3];
    __pyx_v_dropChr = values[4];
    __pyx_v_restrictToSequences = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 860, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_18sequenceStream2bit___init__(__pyx_self, __pyx_v_self, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences);

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

static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences) {
  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("__init__", 0);

  /* "gnocis/sequences.pyx":861
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences):
 * 		self.path = path             # <<<<<<<<<<<<<<
 * 		self.name = path.split('/')[-1]
 * 		self.wantBlockSize = wantBlockSize
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_path, __pyx_v_path) < 0) __PYX_ERR(0, 861, __pyx_L1_error)

  /* "gnocis/sequences.pyx":862
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences):
 * 		self.path = path
 * 		self.name = path.split('/')[-1]             # <<<<<<<<<<<<<<
 * 		self.wantBlockSize = wantBlockSize
 * 		self.spacePrune = spacePrune
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_path, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u__9) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u__9);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_name, __pyx_t_2) < 0) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":863
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 * 		self.wantBlockSize = wantBlockSize             # <<<<<<<<<<<<<<
 * 		self.spacePrune = spacePrune
 * 		self.dropChr = dropChr
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wantBlockSize, __pyx_v_wantBlockSize) < 0) __PYX_ERR(0, 863, __pyx_L1_error)

  /* "gnocis/sequences.pyx":864
 * 		self.name = path.split('/')[-1]
 * 		self.wantBlockSize = wantBlockSize
 * 		self.spacePrune = spacePrune             # <<<<<<<<<<<<<<
 * 		self.dropChr = dropChr
 * 		self.restrictToSequences = restrictToSequences
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_spacePrune, __pyx_v_spacePrune) < 0) __PYX_ERR(0, 864, __pyx_L1_error)

  /* "gnocis/sequences.pyx":865
 * 		self.wantBlockSize = wantBlockSize
 * 		self.spacePrune = spacePrune
 * 		self.dropChr = dropChr             # <<<<<<<<<<<<<<
 * 		self.restrictToSequences = restrictToSequences
 * 
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_dropChr, __pyx_v_dropChr) < 0) __PYX_ERR(0, 865, __pyx_L1_error)

  /* "gnocis/sequences.pyx":866
 * 		self.spacePrune = spacePrune
 * 		self.dropChr = dropChr
 * 		self.restrictToSequences = restrictToSequences             # <<<<<<<<<<<<<<
 * 
 * 	def __iter__(self):
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_restrictToSequences, __pyx_v_restrictToSequences) < 0) __PYX_ERR(0, 866, __pyx_L1_error)

  /* "gnocis/sequences.pyx":860
 * 	"""
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences):             # <<<<<<<<<<<<<<
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 */

  /* 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("gnocis.sequences.sequenceStream2bit.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_4generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":868
 * 		self.restrictToSequences = restrictToSequences
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef unsigned int sig, ver, nseq, reserved, offset
 * 		cdef list seqs
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_3__iter__ = {"__iter__", (PyCFunction)__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_3__iter__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_18sequenceStream2bit_2__iter__(__pyx_self, ((PyObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___2generator20(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":900
 * 				fIn.seek(seqInfo['offset'])
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))             # <<<<<<<<<<<<<<
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 */

static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_23_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_23_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 900, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___2generator20, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_sequenceStream2bit___iter___loca, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 900, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__iter__.genexpr", __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_6gnocis_9sequences_18sequenceStream2bit_8__iter___2generator20(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 900, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_nblk;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_cur_scope->__pyx_v__ = __pyx_t_3;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_n_u_I))) __PYX_ERR(0, 900, __pyx_L1_error)
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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_6gnocis_9sequences_18sequenceStream2bit_8__iter___5generator21(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":901
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))             # <<<<<<<<<<<<<<
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 */

static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___3genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_24_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_24_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 901, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___5generator21, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_sequenceStream2bit___iter___loca, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 901, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__iter__.genexpr", __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_6gnocis_9sequences_18sequenceStream2bit_8__iter___5generator21(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 901, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_nblk;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_cur_scope->__pyx_v__ = __pyx_t_3;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_n_u_I))) __PYX_ERR(0, 901, __pyx_L1_error)
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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_6gnocis_9sequences_18sequenceStream2bit_8__iter___8generator22(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":903
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))             # <<<<<<<<<<<<<<
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 */

static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___6genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_25_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_25_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 903, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___8generator22, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_sequenceStream2bit___iter___loca, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 903, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__iter__.genexpr", __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_6gnocis_9sequences_18sequenceStream2bit_8__iter___8generator22(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 903, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_nmask)) { __Pyx_RaiseClosureNameError("nmask"); __PYX_ERR(0, 903, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_nmask); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 903, __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, 903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 903, __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, 903, __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, 903, __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, 903, __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, 903, __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, 903, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v__);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v__, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_n_u_I))) __PYX_ERR(0, 903, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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_6gnocis_9sequences_18sequenceStream2bit_8__iter___11generator23(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":904
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))             # <<<<<<<<<<<<<<
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 * 				Nblocks = sorted([ stream2bitNBlock(bstart, bsize) for bstart, bsize in zip(blkStarts, blkSizes) ], key = lambda x: x.start)
 */

static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___9genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_26_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_26_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 904, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___11generator23, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_sequenceStream2bit___iter___loca, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 904, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__iter__.genexpr", __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_6gnocis_9sequences_18sequenceStream2bit_8__iter___11generator23(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 904, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_nmask)) { __Pyx_RaiseClosureNameError("nmask"); __PYX_ERR(0, 904, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_nmask); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 904, __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, 904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 904, __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, 904, __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, 904, __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, 904, __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, 904, __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, 904, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v__);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v__, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_n_u_I))) __PYX_ERR(0, 904, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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;
}

/* "gnocis/sequences.pyx":906
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 * 				Nblocks = sorted([ stream2bitNBlock(bstart, bsize) for bstart, bsize in zip(blkStarts, blkSizes) ], key = lambda x: x.start)             # <<<<<<<<<<<<<<
 * 				yield stream2bitSeq(sname, fIn, self.wantBlockSize, Nblocks, nnt)
 * 		return None
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_8__iter___12lambda15(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_8__iter___12lambda15 = {"lambda15", (PyCFunction)__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_8__iter___12lambda15, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_8__iter___12lambda15(PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda15 (wrapper)", 0);
  __pyx_r = __pyx_lambda_funcdef_lambda15(__pyx_self, ((PyObject *)__pyx_v_x));

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

static PyObject *__pyx_lambda_funcdef_lambda15(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  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("lambda15", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __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("gnocis.sequences.sequenceStream2bit.__iter__.lambda15", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":868
 * 		self.restrictToSequences = restrictToSequences
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef unsigned int sig, ver, nseq, reserved, offset
 * 		cdef list seqs
 */

static PyObject *__pyx_pf_6gnocis_9sequences_18sequenceStream2bit_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *__pyx_cur_scope;
  PyObject *__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___2generator20 = 0;
  PyObject *__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___5generator21 = 0;
  PyObject *__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___8generator22 = 0;
  PyObject *__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___11generator23 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iter__", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_22___iter__(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_22___iter__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 868, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__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_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_18sequenceStream2bit_4generator5, __pyx_codeobj__25, (PyObject *) __pyx_cur_scope, __pyx_n_s_iter, __pyx_n_s_sequenceStream2bit___iter, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 868, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___2generator20);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___5generator21);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___8generator22);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_8__iter___11generator23);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_6gnocis_9sequences_18sequenceStream2bit_4generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *)__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;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *(*__pyx_t_12)(PyObject *);
  unsigned int __pyx_t_13;
  unsigned int __pyx_t_14;
  unsigned int __pyx_t_15;
  unsigned int __pyx_t_16;
  int __pyx_t_17;
  int __pyx_t_18;
  int __pyx_t_19;
  Py_ssize_t __pyx_t_20;
  int __pyx_t_21;
  int __pyx_t_22;
  int __pyx_t_23;
  PyObject *__pyx_t_24 = NULL;
  PyObject *__pyx_t_25 = NULL;
  Py_ssize_t __pyx_t_26;
  PyObject *(*__pyx_t_27)(PyObject *);
  PyObject *__pyx_t_28 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L35_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, 868, __pyx_L1_error)

  /* "gnocis/sequences.pyx":878
 * 		cdef list Nblocks, blkStarts, blkSizes, maskStarts, maskSizes
 * 		# File processing
 * 		with open(self.path, 'rb') as fIn:             # <<<<<<<<<<<<<<
 * 			sig, ver, nseq, reserved = struct.unpack('IIII', fIn.read(16))
 * 			if sig != 0x1A412743:
 */
  /*with:*/ {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 878, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 878, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_INCREF(__pyx_n_u_rb);
    __Pyx_GIVEREF(__pyx_n_u_rb);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_u_rb);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 878, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 878, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 878, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 878, __pyx_L4_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_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        /*try:*/ {
          __Pyx_GIVEREF(__pyx_t_4);
          __pyx_cur_scope->__pyx_v_fIn = __pyx_t_4;
          __pyx_t_4 = 0;

          /* "gnocis/sequences.pyx":879
 * 		# File processing
 * 		with open(self.path, 'rb') as fIn:
 * 			sig, ver, nseq, reserved = struct.unpack('IIII', fIn.read(16))             # <<<<<<<<<<<<<<
 * 			if sig != 0x1A412743:
 * 				raise Exception('Invalid 2bit sequence file. Header signature was of unexpected value.')
 */
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_struct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 879, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unpack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 879, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 879, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_9 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
            }
          }
          __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_9, __pyx_int_16) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_int_16);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 879, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = NULL;
          __pyx_t_10 = 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_10 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_n_u_IIII, __pyx_t_1};
            __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 879, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
            PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_n_u_IIII, __pyx_t_1};
            __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 879, __pyx_L8_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          } else
          #endif
          {
            __pyx_t_9 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 879, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            if (__pyx_t_5) {
              __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __pyx_t_5 = NULL;
            }
            __Pyx_INCREF(__pyx_n_u_IIII);
            __Pyx_GIVEREF(__pyx_n_u_IIII);
            PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_10, __pyx_n_u_IIII);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_10, __pyx_t_1);
            __pyx_t_1 = 0;
            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 879, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
            PyObject* sequence = __pyx_t_4;
            Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
            if (unlikely(size != 4)) {
              if (size > 4) __Pyx_RaiseTooManyValuesError(4);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 879, __pyx_L8_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_9 = PyTuple_GET_ITEM(sequence, 1); 
              __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
              __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
            } else {
              __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
              __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
              __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
            }
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_5);
            #else
            {
              Py_ssize_t i;
              PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_9,&__pyx_t_1,&__pyx_t_5};
              for (i=0; i < 4; i++) {
                PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 879, __pyx_L8_error)
                __Pyx_GOTREF(item);
                *(temps[i]) = item;
              }
            }
            #endif
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          } else {
            Py_ssize_t index = -1;
            PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_9,&__pyx_t_1,&__pyx_t_5};
            __pyx_t_11 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 879, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
            for (index=0; index < 4; index++) {
              PyObject* item = __pyx_t_12(__pyx_t_11); if (unlikely(!item)) goto __pyx_L14_unpacking_failed;
              __Pyx_GOTREF(item);
              *(temps[index]) = item;
            }
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 4) < 0) __PYX_ERR(0, 879, __pyx_L8_error)
            __pyx_t_12 = NULL;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            goto __pyx_L15_unpacking_done;
            __pyx_L14_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_12 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 879, __pyx_L8_error)
            __pyx_L15_unpacking_done:;
          }
          __pyx_t_13 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_13 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 879, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_14 = __Pyx_PyInt_As_unsigned_int(__pyx_t_9); if (unlikely((__pyx_t_14 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 879, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_15 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_15 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 879, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_16 = __Pyx_PyInt_As_unsigned_int(__pyx_t_5); if (unlikely((__pyx_t_16 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 879, __pyx_L8_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_cur_scope->__pyx_v_sig = __pyx_t_13;
          __pyx_cur_scope->__pyx_v_ver = __pyx_t_14;
          __pyx_cur_scope->__pyx_v_nseq = __pyx_t_15;
          __pyx_cur_scope->__pyx_v_reserved = __pyx_t_16;

          /* "gnocis/sequences.pyx":880
 * 		with open(self.path, 'rb') as fIn:
 * 			sig, ver, nseq, reserved = struct.unpack('IIII', fIn.read(16))
 * 			if sig != 0x1A412743:             # <<<<<<<<<<<<<<
 * 				raise Exception('Invalid 2bit sequence file. Header signature was of unexpected value.')
 * 			seqs = []
 */
          __pyx_t_17 = ((__pyx_cur_scope->__pyx_v_sig != 0x1A412743) != 0);
          if (unlikely(__pyx_t_17)) {

            /* "gnocis/sequences.pyx":881
 * 			sig, ver, nseq, reserved = struct.unpack('IIII', fIn.read(16))
 * 			if sig != 0x1A412743:
 * 				raise Exception('Invalid 2bit sequence file. Header signature was of unexpected value.')             # <<<<<<<<<<<<<<
 * 			seqs = []
 * 			for iseq in range(nseq):
 */
            __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 881, __pyx_L8_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, 881, __pyx_L8_error)

            /* "gnocis/sequences.pyx":880
 * 		with open(self.path, 'rb') as fIn:
 * 			sig, ver, nseq, reserved = struct.unpack('IIII', fIn.read(16))
 * 			if sig != 0x1A412743:             # <<<<<<<<<<<<<<
 * 				raise Exception('Invalid 2bit sequence file. Header signature was of unexpected value.')
 * 			seqs = []
 */
          }

          /* "gnocis/sequences.pyx":882
 * 			if sig != 0x1A412743:
 * 				raise Exception('Invalid 2bit sequence file. Header signature was of unexpected value.')
 * 			seqs = []             # <<<<<<<<<<<<<<
 * 			for iseq in range(nseq):
 * 				namelen = struct.unpack('B', fIn.read(1))[0]
 */
          __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 882, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          __pyx_cur_scope->__pyx_v_seqs = ((PyObject*)__pyx_t_4);
          __pyx_t_4 = 0;

          /* "gnocis/sequences.pyx":883
 * 				raise Exception('Invalid 2bit sequence file. Header signature was of unexpected value.')
 * 			seqs = []
 * 			for iseq in range(nseq):             # <<<<<<<<<<<<<<
 * 				namelen = struct.unpack('B', fIn.read(1))[0]
 * 				namebytes = fIn.read(namelen)
 */
          __pyx_t_16 = __pyx_cur_scope->__pyx_v_nseq;
          __pyx_t_15 = __pyx_t_16;
          for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_15; __pyx_t_10+=1) {
            __pyx_cur_scope->__pyx_v_iseq = __pyx_t_10;

            /* "gnocis/sequences.pyx":884
 * 			seqs = []
 * 			for iseq in range(nseq):
 * 				namelen = struct.unpack('B', fIn.read(1))[0]             # <<<<<<<<<<<<<<
 * 				namebytes = fIn.read(namelen)
 * 				name = namebytes.decode("utf-8")
 */
            __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_struct); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 884, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_unpack); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 884, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 884, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_2 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(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 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_2, __pyx_int_1) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_int_1);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 884, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_9 = NULL;
            __pyx_t_18 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
              __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
              if (likely(__pyx_t_9)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                __Pyx_INCREF(__pyx_t_9);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_1, function);
                __pyx_t_18 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_1)) {
              PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_n_u_B, __pyx_t_5};
              __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 884, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
              PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_n_u_B, __pyx_t_5};
              __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 884, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            } else
            #endif
            {
              __pyx_t_2 = PyTuple_New(2+__pyx_t_18); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 884, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              if (__pyx_t_9) {
                __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9); __pyx_t_9 = NULL;
              }
              __Pyx_INCREF(__pyx_n_u_B);
              __Pyx_GIVEREF(__pyx_n_u_B);
              PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_18, __pyx_n_u_B);
              __Pyx_GIVEREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_18, __pyx_t_5);
              __pyx_t_5 = 0;
              __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 884, __pyx_L8_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_t_1 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 884, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_namelen);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_namelen, __pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;

            /* "gnocis/sequences.pyx":885
 * 			for iseq in range(nseq):
 * 				namelen = struct.unpack('B', fIn.read(1))[0]
 * 				namebytes = fIn.read(namelen)             # <<<<<<<<<<<<<<
 * 				name = namebytes.decode("utf-8")
 * 				if name.lower().startswith('chr'): name = name[3:]
 */
            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 885, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = NULL;
            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_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_cur_scope->__pyx_v_namelen) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_cur_scope->__pyx_v_namelen);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 885, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 885, __pyx_L8_error)
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_namebytes);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_namebytes, ((PyObject*)__pyx_t_1));
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;

            /* "gnocis/sequences.pyx":886
 * 				namelen = struct.unpack('B', fIn.read(1))[0]
 * 				namebytes = fIn.read(namelen)
 * 				name = namebytes.decode("utf-8")             # <<<<<<<<<<<<<<
 * 				if name.lower().startswith('chr'): name = name[3:]
 * 				offset = struct.unpack('I', fIn.read(4))[0] # Relative to file start
 */
            if (unlikely(__pyx_cur_scope->__pyx_v_namebytes == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
              __PYX_ERR(0, 886, __pyx_L8_error)
            }
            __pyx_t_1 = __Pyx_decode_bytes(__pyx_cur_scope->__pyx_v_namebytes, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, ((PyObject*)__pyx_t_1));
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;

            /* "gnocis/sequences.pyx":887
 * 				namebytes = fIn.read(namelen)
 * 				name = namebytes.decode("utf-8")
 * 				if name.lower().startswith('chr'): name = name[3:]             # <<<<<<<<<<<<<<
 * 				offset = struct.unpack('I', fIn.read(4))[0] # Relative to file start
 * 				seqs.append(  { 'name': name, 'offset': offset } )
 */
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_name, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 887, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 887, __pyx_L8_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_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 887, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_4 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_4)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_4);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_n_u_chr) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_chr);
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 887, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_17) {
              if (unlikely(__pyx_cur_scope->__pyx_v_name == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                __PYX_ERR(0, 887, __pyx_L8_error)
              }
              __pyx_t_1 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_name, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_name);
              __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_name, ((PyObject*)__pyx_t_1));
              __Pyx_GIVEREF(__pyx_t_1);
              __pyx_t_1 = 0;
            }

            /* "gnocis/sequences.pyx":888
 * 				name = namebytes.decode("utf-8")
 * 				if name.lower().startswith('chr'): name = name[3:]
 * 				offset = struct.unpack('I', fIn.read(4))[0] # Relative to file start             # <<<<<<<<<<<<<<
 * 				seqs.append(  { 'name': name, 'offset': offset } )
 * 			for iseq, seqInfo in enumerate(seqs):
 */
            __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_struct); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 888, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unpack); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 888, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 888, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_9 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
              if (likely(__pyx_t_9)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_9);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_5, function);
              }
            }
            __pyx_t_2 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_9, __pyx_int_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_int_4);
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 888, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = NULL;
            __pyx_t_18 = 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_18 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_4)) {
              PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_n_u_I, __pyx_t_2};
              __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
              PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_n_u_I, __pyx_t_2};
              __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            } else
            #endif
            {
              __pyx_t_9 = PyTuple_New(2+__pyx_t_18); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 888, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_9);
              if (__pyx_t_5) {
                __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __pyx_t_5 = NULL;
              }
              __Pyx_INCREF(__pyx_n_u_I);
              __Pyx_GIVEREF(__pyx_n_u_I);
              PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_18, __pyx_n_u_I);
              __Pyx_GIVEREF(__pyx_t_2);
              PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_18, __pyx_t_2);
              __pyx_t_2 = 0;
              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            }
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 888, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_14 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 888, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_cur_scope->__pyx_v_offset = __pyx_t_14;

            /* "gnocis/sequences.pyx":889
 * 				if name.lower().startswith('chr'): name = name[3:]
 * 				offset = struct.unpack('I', fIn.read(4))[0] # Relative to file start
 * 				seqs.append(  { 'name': name, 'offset': offset } )             # <<<<<<<<<<<<<<
 * 			for iseq, seqInfo in enumerate(seqs):
 * 				sname = seqInfo['name']
 */
            __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 889, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_4);
            if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_name, __pyx_cur_scope->__pyx_v_name) < 0) __PYX_ERR(0, 889, __pyx_L8_error)
            __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_cur_scope->__pyx_v_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 889, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_offset, __pyx_t_1) < 0) __PYX_ERR(0, 889, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_19 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_seqs, __pyx_t_4); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 889, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          }

          /* "gnocis/sequences.pyx":890
 * 				offset = struct.unpack('I', fIn.read(4))[0] # Relative to file start
 * 				seqs.append(  { 'name': name, 'offset': offset } )
 * 			for iseq, seqInfo in enumerate(seqs):             # <<<<<<<<<<<<<<
 * 				sname = seqInfo['name']
 * 				if self.spacePrune:
 */
          __pyx_t_10 = 0;
          __pyx_t_4 = __pyx_cur_scope->__pyx_v_seqs; __Pyx_INCREF(__pyx_t_4); __pyx_t_20 = 0;
          for (;;) {
            if (__pyx_t_20 >= 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_20); __Pyx_INCREF(__pyx_t_1); __pyx_t_20++; if (unlikely(0 < 0)) __PYX_ERR(0, 890, __pyx_L8_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_20); __pyx_t_20++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 890, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
            if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 890, __pyx_L8_error)
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_seqInfo);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_seqInfo, ((PyObject*)__pyx_t_1));
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;
            __pyx_cur_scope->__pyx_v_iseq = __pyx_t_10;
            __pyx_t_10 = (__pyx_t_10 + 1);

            /* "gnocis/sequences.pyx":891
 * 				seqs.append(  { 'name': name, 'offset': offset } )
 * 			for iseq, seqInfo in enumerate(seqs):
 * 				sname = seqInfo['name']             # <<<<<<<<<<<<<<
 * 				if self.spacePrune:
 * 					sname = sname.split(' ')[0]
 */
            if (unlikely(__pyx_cur_scope->__pyx_v_seqInfo == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 891, __pyx_L8_error)
            }
            __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_seqInfo, __pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 891, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 891, __pyx_L8_error)
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_sname);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_sname, ((PyObject*)__pyx_t_1));
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;

            /* "gnocis/sequences.pyx":892
 * 			for iseq, seqInfo in enumerate(seqs):
 * 				sname = seqInfo['name']
 * 				if self.spacePrune:             # <<<<<<<<<<<<<<
 * 					sname = sname.split(' ')[0]
 * 				if self.dropChr and sname.lower().startswith('chr'):
 */
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_spacePrune); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 892, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 892, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_17) {

              /* "gnocis/sequences.pyx":893
 * 				sname = seqInfo['name']
 * 				if self.spacePrune:
 * 					sname = sname.split(' ')[0]             # <<<<<<<<<<<<<<
 * 				if self.dropChr and sname.lower().startswith('chr'):
 * 					sname = sname[3:]
 */
              if (unlikely(__pyx_cur_scope->__pyx_v_sname == Py_None)) {
                PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "split");
                __PYX_ERR(0, 893, __pyx_L8_error)
              }
              __pyx_t_1 = PyUnicode_Split(__pyx_cur_scope->__pyx_v_sname, __pyx_kp_u__16, -1L); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_9 = __Pyx_GetItemInt_List(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 893, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (!(likely(PyUnicode_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_9)->tp_name), 0))) __PYX_ERR(0, 893, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_sname);
              __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_sname, ((PyObject*)__pyx_t_9));
              __Pyx_GIVEREF(__pyx_t_9);
              __pyx_t_9 = 0;

              /* "gnocis/sequences.pyx":892
 * 			for iseq, seqInfo in enumerate(seqs):
 * 				sname = seqInfo['name']
 * 				if self.spacePrune:             # <<<<<<<<<<<<<<
 * 					sname = sname.split(' ')[0]
 * 				if self.dropChr and sname.lower().startswith('chr'):
 */
            }

            /* "gnocis/sequences.pyx":894
 * 				if self.spacePrune:
 * 					sname = sname.split(' ')[0]
 * 				if self.dropChr and sname.lower().startswith('chr'):             # <<<<<<<<<<<<<<
 * 					sname = sname[3:]
 * 				if self.restrictToSequences != None and not sname in self.restrictToSequences:
 */
            __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_dropChr); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 894, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 894, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (__pyx_t_21) {
            } else {
              __pyx_t_17 = __pyx_t_21;
              goto __pyx_L24_bool_binop_done;
            }
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_sname, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 894, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 894, __pyx_L8_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_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 894, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_1)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
              }
            }
            __pyx_t_9 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_chr) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_chr);
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 894, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 894, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_17 = __pyx_t_21;
            __pyx_L24_bool_binop_done:;
            if (__pyx_t_17) {

              /* "gnocis/sequences.pyx":895
 * 					sname = sname.split(' ')[0]
 * 				if self.dropChr and sname.lower().startswith('chr'):
 * 					sname = sname[3:]             # <<<<<<<<<<<<<<
 * 				if self.restrictToSequences != None and not sname in self.restrictToSequences:
 * 					continue
 */
              if (unlikely(__pyx_cur_scope->__pyx_v_sname == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
                __PYX_ERR(0, 895, __pyx_L8_error)
              }
              __pyx_t_9 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_sname, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 895, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_sname);
              __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_sname, ((PyObject*)__pyx_t_9));
              __Pyx_GIVEREF(__pyx_t_9);
              __pyx_t_9 = 0;

              /* "gnocis/sequences.pyx":894
 * 				if self.spacePrune:
 * 					sname = sname.split(' ')[0]
 * 				if self.dropChr and sname.lower().startswith('chr'):             # <<<<<<<<<<<<<<
 * 					sname = sname[3:]
 * 				if self.restrictToSequences != None and not sname in self.restrictToSequences:
 */
            }

            /* "gnocis/sequences.pyx":896
 * 				if self.dropChr and sname.lower().startswith('chr'):
 * 					sname = sname[3:]
 * 				if self.restrictToSequences != None and not sname in self.restrictToSequences:             # <<<<<<<<<<<<<<
 * 					continue
 * 				fIn.seek(seqInfo['offset'])
 */
            __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_restrictToSequences); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 896, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_2 = PyObject_RichCompare(__pyx_t_9, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 896, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 896, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (__pyx_t_21) {
            } else {
              __pyx_t_17 = __pyx_t_21;
              goto __pyx_L27_bool_binop_done;
            }
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_restrictToSequences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 896, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_21 = (__Pyx_PySequence_ContainsTF(__pyx_cur_scope->__pyx_v_sname, __pyx_t_2, Py_NE)); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 896, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_22 = (__pyx_t_21 != 0);
            __pyx_t_17 = __pyx_t_22;
            __pyx_L27_bool_binop_done:;
            if (__pyx_t_17) {

              /* "gnocis/sequences.pyx":897
 * 					sname = sname[3:]
 * 				if self.restrictToSequences != None and not sname in self.restrictToSequences:
 * 					continue             # <<<<<<<<<<<<<<
 * 				fIn.seek(seqInfo['offset'])
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))
 */
              goto __pyx_L20_continue;

              /* "gnocis/sequences.pyx":896
 * 				if self.dropChr and sname.lower().startswith('chr'):
 * 					sname = sname[3:]
 * 				if self.restrictToSequences != None and not sname in self.restrictToSequences:             # <<<<<<<<<<<<<<
 * 					continue
 * 				fIn.seek(seqInfo['offset'])
 */
            }

            /* "gnocis/sequences.pyx":898
 * 				if self.restrictToSequences != None and not sname in self.restrictToSequences:
 * 					continue
 * 				fIn.seek(seqInfo['offset'])             # <<<<<<<<<<<<<<
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 */
            __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_seek); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 898, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            if (unlikely(__pyx_cur_scope->__pyx_v_seqInfo == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 898, __pyx_L8_error)
            }
            __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_seqInfo, __pyx_n_u_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_9, function);
              }
            }
            __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_1);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 898, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

            /* "gnocis/sequences.pyx":899
 * 					continue
 * 				fIn.seek(seqInfo['offset'])
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))             # <<<<<<<<<<<<<<
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 */
            __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_struct); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 899, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_unpack); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 899, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 899, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_11 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_5);
              if (likely(__pyx_t_11)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_11);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_5, function);
              }
            }
            __pyx_t_9 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_11, __pyx_int_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_int_8);
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 899, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = NULL;
            __pyx_t_18 = 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_18 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_1)) {
              PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_n_u_II, __pyx_t_9};
              __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 899, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
              PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_n_u_II, __pyx_t_9};
              __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_18, 2+__pyx_t_18); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 899, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            } else
            #endif
            {
              __pyx_t_11 = PyTuple_New(2+__pyx_t_18); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 899, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_11);
              if (__pyx_t_5) {
                __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_5); __pyx_t_5 = NULL;
              }
              __Pyx_INCREF(__pyx_n_u_II);
              __Pyx_GIVEREF(__pyx_n_u_II);
              PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_18, __pyx_n_u_II);
              __Pyx_GIVEREF(__pyx_t_9);
              PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_18, __pyx_t_9);
              __pyx_t_9 = 0;
              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 899, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            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, 899, __pyx_L8_error)
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              if (likely(PyTuple_CheckExact(sequence))) {
                __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
                __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
              } else {
                __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
                __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
              }
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_11);
              #else
              __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 899, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 899, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_11);
              #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, 899, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext;
              index = 0; __pyx_t_1 = __pyx_t_12(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L29_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_1);
              index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_9); if (unlikely(!__pyx_t_11)) goto __pyx_L29_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_11);
              if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_9), 2) < 0) __PYX_ERR(0, 899, __pyx_L8_error)
              __pyx_t_12 = NULL;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              goto __pyx_L30_unpacking_done;
              __pyx_L29_unpacking_failed:;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_12 = NULL;
              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
              __PYX_ERR(0, 899, __pyx_L8_error)
              __pyx_L30_unpacking_done:;
            }
            __pyx_t_18 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_18 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 899, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_23 = __Pyx_PyInt_As_int(__pyx_t_11); if (unlikely((__pyx_t_23 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 899, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_cur_scope->__pyx_v_nnt = __pyx_t_18;
            __pyx_cur_scope->__pyx_v_nblk = __pyx_t_23;

            /* "gnocis/sequences.pyx":900
 * 				fIn.seek(seqInfo['offset'])
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))             # <<<<<<<<<<<<<<
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 */
            __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_struct); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_unpack); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_11 = __pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_9 = __Pyx_Generator_Next(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_11 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_24 = __Pyx_PyInt_From_long((4 * __pyx_cur_scope->__pyx_v_nblk)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_24);
            __pyx_t_25 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_5);
              if (likely(__pyx_t_25)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_25);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_5, function);
              }
            }
            __pyx_t_9 = (__pyx_t_25) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_25, __pyx_t_24) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_24);
            __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = NULL;
            __pyx_t_23 = 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_23 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_1)) {
              PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_11, __pyx_t_9};
              __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 900, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
              PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_11, __pyx_t_9};
              __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 900, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            } else
            #endif
            {
              __pyx_t_24 = PyTuple_New(2+__pyx_t_23); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 900, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_24);
              if (__pyx_t_5) {
                __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_5); __pyx_t_5 = NULL;
              }
              __Pyx_GIVEREF(__pyx_t_11);
              PyTuple_SET_ITEM(__pyx_t_24, 0+__pyx_t_23, __pyx_t_11);
              __Pyx_GIVEREF(__pyx_t_9);
              PyTuple_SET_ITEM(__pyx_t_24, 1+__pyx_t_23, __pyx_t_9);
              __pyx_t_11 = 0;
              __pyx_t_9 = 0;
              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 900, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 900, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_blkStarts);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_blkStarts, ((PyObject*)__pyx_t_1));
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;

            /* "gnocis/sequences.pyx":901
 * 				nnt, nblk = struct.unpack('II', fIn.read(8))
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))             # <<<<<<<<<<<<<<
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 */
            __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_struct); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unpack); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_24);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = __pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___3genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_9 = __Pyx_Generator_Next(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_5 = __Pyx_PyInt_From_long((4 * __pyx_cur_scope->__pyx_v_nblk)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_25 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
              __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_11);
              if (likely(__pyx_t_25)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
                __Pyx_INCREF(__pyx_t_25);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_11, function);
              }
            }
            __pyx_t_9 = (__pyx_t_25) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_25, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_5);
            __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_11 = NULL;
            __pyx_t_23 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_24))) {
              __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_24);
              if (likely(__pyx_t_11)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_24);
                __Pyx_INCREF(__pyx_t_11);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_24, function);
                __pyx_t_23 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_24)) {
              PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_2, __pyx_t_9};
              __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_24, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_24)) {
              PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_2, __pyx_t_9};
              __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_24, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            } else
            #endif
            {
              __pyx_t_5 = PyTuple_New(2+__pyx_t_23); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 901, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              if (__pyx_t_11) {
                __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_11); __pyx_t_11 = NULL;
              }
              __Pyx_GIVEREF(__pyx_t_2);
              PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_23, __pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_9);
              PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_23, __pyx_t_9);
              __pyx_t_2 = 0;
              __pyx_t_9 = 0;
              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_24, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            }
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            __pyx_t_24 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 901, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_24);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_blkSizes);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_blkSizes, ((PyObject*)__pyx_t_24));
            __Pyx_GIVEREF(__pyx_t_24);
            __pyx_t_24 = 0;

            /* "gnocis/sequences.pyx":902
 * 				blkStarts = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				nmask = struct.unpack('I', fIn.read(4))[0]             # <<<<<<<<<<<<<<
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 */
            __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_struct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 902, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 902, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 902, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_2 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(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_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_2, __pyx_int_4) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_int_4);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 902, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_9 = NULL;
            __pyx_t_23 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
              if (likely(__pyx_t_9)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_9);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_5, function);
                __pyx_t_23 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_5)) {
              PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_n_u_I, __pyx_t_1};
              __pyx_t_24 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 902, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_GOTREF(__pyx_t_24);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
              PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_n_u_I, __pyx_t_1};
              __pyx_t_24 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 902, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_GOTREF(__pyx_t_24);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } else
            #endif
            {
              __pyx_t_2 = PyTuple_New(2+__pyx_t_23); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 902, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              if (__pyx_t_9) {
                __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9); __pyx_t_9 = NULL;
              }
              __Pyx_INCREF(__pyx_n_u_I);
              __Pyx_GIVEREF(__pyx_n_u_I);
              PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_23, __pyx_n_u_I);
              __Pyx_GIVEREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_23, __pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 902, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_24);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            }
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_24, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 902, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_nmask);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_nmask, __pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_5);
            __pyx_t_5 = 0;

            /* "gnocis/sequences.pyx":903
 * 				blkSizes = list(struct.unpack(''.join('I' for _ in range(nblk)), fIn.read(4 * nblk)))
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))             # <<<<<<<<<<<<<<
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 */
            __Pyx_GetModuleGlobalName(__pyx_t_24, __pyx_n_s_struct); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_24);
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_24, __pyx_n_s_unpack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            __pyx_t_24 = __pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___6genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_24);
            __pyx_t_1 = __Pyx_Generator_Next(__pyx_t_24); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            __pyx_t_24 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_1); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_24);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_11 = PyNumber_Multiply(__pyx_int_4, __pyx_cur_scope->__pyx_v_nmask); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_25 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
              __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_9);
              if (likely(__pyx_t_25)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
                __Pyx_INCREF(__pyx_t_25);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_9, function);
              }
            }
            __pyx_t_1 = (__pyx_t_25) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_25, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_11);
            __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_9 = NULL;
            __pyx_t_23 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(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_23 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_2)) {
              PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_24, __pyx_t_1};
              __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 903, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
              PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_24, __pyx_t_1};
              __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 903, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } else
            #endif
            {
              __pyx_t_11 = PyTuple_New(2+__pyx_t_23); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 903, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_11);
              if (__pyx_t_9) {
                __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
              }
              __Pyx_GIVEREF(__pyx_t_24);
              PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_23, __pyx_t_24);
              __Pyx_GIVEREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_23, __pyx_t_1);
              __pyx_t_24 = 0;
              __pyx_t_1 = 0;
              __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 903, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = PySequence_List(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_maskStarts);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_maskStarts, ((PyObject*)__pyx_t_2));
            __Pyx_GIVEREF(__pyx_t_2);
            __pyx_t_2 = 0;

            /* "gnocis/sequences.pyx":904
 * 				nmask = struct.unpack('I', fIn.read(4))[0]
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))             # <<<<<<<<<<<<<<
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 * 				Nblocks = sorted([ stream2bitNBlock(bstart, bsize) for bstart, bsize in zip(blkStarts, blkSizes) ], key = lambda x: x.start)
 */
            __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_struct); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_unpack); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = __pyx_pf_6gnocis_9sequences_18sequenceStream2bit_8__iter___9genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_1 = __Pyx_Generator_Next(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_24);
            __pyx_t_9 = PyNumber_Multiply(__pyx_int_4, __pyx_cur_scope->__pyx_v_nmask); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_25 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_24))) {
              __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_24);
              if (likely(__pyx_t_25)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_24);
                __Pyx_INCREF(__pyx_t_25);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_24, function);
              }
            }
            __pyx_t_1 = (__pyx_t_25) ? __Pyx_PyObject_Call2Args(__pyx_t_24, __pyx_t_25, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_24, __pyx_t_9);
            __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            __pyx_t_24 = NULL;
            __pyx_t_23 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
              __pyx_t_24 = PyMethod_GET_SELF(__pyx_t_11);
              if (likely(__pyx_t_24)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
                __Pyx_INCREF(__pyx_t_24);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_11, function);
                __pyx_t_23 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_11)) {
              PyObject *__pyx_temp[3] = {__pyx_t_24, __pyx_t_5, __pyx_t_1};
              __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
              PyObject *__pyx_temp[3] = {__pyx_t_24, __pyx_t_5, __pyx_t_1};
              __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } else
            #endif
            {
              __pyx_t_9 = PyTuple_New(2+__pyx_t_23); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 904, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_9);
              if (__pyx_t_24) {
                __Pyx_GIVEREF(__pyx_t_24); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_24); __pyx_t_24 = NULL;
              }
              __Pyx_GIVEREF(__pyx_t_5);
              PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_23, __pyx_t_5);
              __Pyx_GIVEREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_23, __pyx_t_1);
              __pyx_t_5 = 0;
              __pyx_t_1 = 0;
              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            }
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_11 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 904, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_maskSizes);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_maskSizes, ((PyObject*)__pyx_t_11));
            __Pyx_GIVEREF(__pyx_t_11);
            __pyx_t_11 = 0;

            /* "gnocis/sequences.pyx":905
 * 				maskStarts = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				reserved = struct.unpack('I', fIn.read(4))[0]             # <<<<<<<<<<<<<<
 * 				Nblocks = sorted([ stream2bitNBlock(bstart, bsize) for bstart, bsize in zip(blkStarts, blkSizes) ], key = lambda x: x.start)
 * 				yield stream2bitSeq(sname, fIn, self.wantBlockSize, Nblocks, nnt)
 */
            __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_struct); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unpack); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 905, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_fIn, __pyx_n_s_read); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 905, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = NULL;
            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_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_int_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_int_4);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = NULL;
            __pyx_t_23 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(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_23 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_9)) {
              PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_n_u_I, __pyx_t_2};
              __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 905, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
              PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_n_u_I, __pyx_t_2};
              __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_23, 2+__pyx_t_23); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 905, __pyx_L8_error)
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            } else
            #endif
            {
              __pyx_t_5 = PyTuple_New(2+__pyx_t_23); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 905, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              if (__pyx_t_1) {
                __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
              }
              __Pyx_INCREF(__pyx_n_u_I);
              __Pyx_GIVEREF(__pyx_n_u_I);
              PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_23, __pyx_n_u_I);
              __Pyx_GIVEREF(__pyx_t_2);
              PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_23, __pyx_t_2);
              __pyx_t_2 = 0;
              __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_5, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 905, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            }
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_11, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 905, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_16 = __Pyx_PyInt_As_unsigned_int(__pyx_t_9); if (unlikely((__pyx_t_16 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 905, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_cur_scope->__pyx_v_reserved = __pyx_t_16;

            /* "gnocis/sequences.pyx":906
 * 				maskSizes = list(struct.unpack(''.join('I' for _ in range(nmask)), fIn.read(4 * nmask)))
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 * 				Nblocks = sorted([ stream2bitNBlock(bstart, bsize) for bstart, bsize in zip(blkStarts, blkSizes) ], key = lambda x: x.start)             # <<<<<<<<<<<<<<
 * 				yield stream2bitSeq(sname, fIn, self.wantBlockSize, Nblocks, nnt)
 * 		return None
 */
            { /* enter inner scope */
              __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 906, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 906, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_blkStarts);
              __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_blkStarts);
              PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_cur_scope->__pyx_v_blkStarts);
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_blkSizes);
              __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_blkSizes);
              PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_cur_scope->__pyx_v_blkSizes);
              __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 906, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
                __pyx_t_11 = __pyx_t_5; __Pyx_INCREF(__pyx_t_11); __pyx_t_26 = 0;
                __pyx_t_27 = NULL;
              } else {
                __pyx_t_26 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 906, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_11);
                __pyx_t_27 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 906, __pyx_L8_error)
              }
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              for (;;) {
                if (likely(!__pyx_t_27)) {
                  if (likely(PyList_CheckExact(__pyx_t_11))) {
                    if (__pyx_t_26 >= PyList_GET_SIZE(__pyx_t_11)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_26); __Pyx_INCREF(__pyx_t_5); __pyx_t_26++; if (unlikely(0 < 0)) __PYX_ERR(0, 906, __pyx_L8_error)
                    #else
                    __pyx_t_5 = PySequence_ITEM(__pyx_t_11, __pyx_t_26); __pyx_t_26++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 906, __pyx_L8_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    #endif
                  } else {
                    if (__pyx_t_26 >= PyTuple_GET_SIZE(__pyx_t_11)) break;
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_26); __Pyx_INCREF(__pyx_t_5); __pyx_t_26++; if (unlikely(0 < 0)) __PYX_ERR(0, 906, __pyx_L8_error)
                    #else
                    __pyx_t_5 = PySequence_ITEM(__pyx_t_11, __pyx_t_26); __pyx_t_26++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 906, __pyx_L8_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    #endif
                  }
                } else {
                  __pyx_t_5 = __pyx_t_27(__pyx_t_11);
                  if (unlikely(!__pyx_t_5)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 906, __pyx_L8_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_5);
                }
                if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
                  PyObject* sequence = __pyx_t_5;
                  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, 906, __pyx_L8_error)
                  }
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  if (likely(PyTuple_CheckExact(sequence))) {
                    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
                    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
                  } else {
                    __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
                    __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
                  }
                  __Pyx_INCREF(__pyx_t_2);
                  __Pyx_INCREF(__pyx_t_1);
                  #else
                  __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  #endif
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                } else {
                  Py_ssize_t index = -1;
                  __pyx_t_24 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 906, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_24);
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __pyx_t_12 = Py_TYPE(__pyx_t_24)->tp_iternext;
                  index = 0; __pyx_t_2 = __pyx_t_12(__pyx_t_24); if (unlikely(!__pyx_t_2)) goto __pyx_L33_unpacking_failed;
                  __Pyx_GOTREF(__pyx_t_2);
                  index = 1; __pyx_t_1 = __pyx_t_12(__pyx_t_24); if (unlikely(!__pyx_t_1)) goto __pyx_L33_unpacking_failed;
                  __Pyx_GOTREF(__pyx_t_1);
                  if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_24), 2) < 0) __PYX_ERR(0, 906, __pyx_L8_error)
                  __pyx_t_12 = NULL;
                  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                  goto __pyx_L34_unpacking_done;
                  __pyx_L33_unpacking_failed:;
                  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                  __pyx_t_12 = NULL;
                  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
                  __PYX_ERR(0, 906, __pyx_L8_error)
                  __pyx_L34_unpacking_done:;
                }
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr25__pyx_v_bstart);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr25__pyx_v_bstart, __pyx_t_2);
                __Pyx_GIVEREF(__pyx_t_2);
                __pyx_t_2 = 0;
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr25__pyx_v_bsize);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr25__pyx_v_bsize, __pyx_t_1);
                __Pyx_GIVEREF(__pyx_t_1);
                __pyx_t_1 = 0;
                __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 906, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_5);
                __Pyx_INCREF(__pyx_cur_scope->__pyx_9genexpr25__pyx_v_bstart);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_9genexpr25__pyx_v_bstart);
                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_9genexpr25__pyx_v_bstart);
                __Pyx_INCREF(__pyx_cur_scope->__pyx_9genexpr25__pyx_v_bsize);
                __Pyx_GIVEREF(__pyx_cur_scope->__pyx_9genexpr25__pyx_v_bsize);
                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_cur_scope->__pyx_9genexpr25__pyx_v_bsize);
                __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_stream2bitNBlock), __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __pyx_L8_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_9, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 906, __pyx_L8_error)
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              }
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            } /* exit inner scope */
            __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 906, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GIVEREF(__pyx_t_9);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
            __pyx_t_9 = 0;
            __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 906, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_8__iter___12lambda15, 0, __pyx_n_s_sequenceStream2bit___iter___loca_2, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_key, __pyx_t_1) < 0) __PYX_ERR(0, 906, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_11, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 906, __pyx_L8_error)
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_Nblocks);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_Nblocks, ((PyObject*)__pyx_t_1));
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_t_1 = 0;

            /* "gnocis/sequences.pyx":907
 * 				reserved = struct.unpack('I', fIn.read(4))[0]
 * 				Nblocks = sorted([ stream2bitNBlock(bstart, bsize) for bstart, bsize in zip(blkStarts, blkSizes) ], key = lambda x: x.start)
 * 				yield stream2bitSeq(sname, fIn, self.wantBlockSize, Nblocks, nnt)             # <<<<<<<<<<<<<<
 * 		return None
 * 
 */
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantBlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 907, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_nnt); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 907, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_11 = PyTuple_New(5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 907, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sname);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sname);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_cur_scope->__pyx_v_sname);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fIn);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fIn);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_cur_scope->__pyx_v_fIn);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_1);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_Nblocks);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_Nblocks);
            PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_cur_scope->__pyx_v_Nblocks);
            __Pyx_GIVEREF(__pyx_t_9);
            PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_t_9);
            __pyx_t_1 = 0;
            __pyx_t_9 = 0;
            __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_stream2bitSeq), __pyx_t_11, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 907, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_r = __pyx_t_9;
            __pyx_t_9 = 0;
            __Pyx_XGIVEREF(__pyx_t_3);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_3;
            __Pyx_XGIVEREF(__pyx_t_4);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
            __Pyx_XGIVEREF(__pyx_t_6);
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
            __Pyx_XGIVEREF(__pyx_t_7);
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_7;
            __Pyx_XGIVEREF(__pyx_t_8);
            __pyx_cur_scope->__pyx_t_4 = __pyx_t_8;
            __pyx_cur_scope->__pyx_t_5 = __pyx_t_10;
            __pyx_cur_scope->__pyx_t_6 = __pyx_t_20;
            __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_L35_resume_from_yield:;
            __pyx_t_3 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_3);
            __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_4);
            __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
            __pyx_cur_scope->__pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_t_6);
            __pyx_t_7 = __pyx_cur_scope->__pyx_t_3;
            __pyx_cur_scope->__pyx_t_3 = 0;
            __Pyx_XGOTREF(__pyx_t_7);
            __pyx_t_8 = __pyx_cur_scope->__pyx_t_4;
            __pyx_cur_scope->__pyx_t_4 = 0;
            __Pyx_XGOTREF(__pyx_t_8);
            __pyx_t_10 = __pyx_cur_scope->__pyx_t_5;
            __pyx_t_20 = __pyx_cur_scope->__pyx_t_6;
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 907, __pyx_L8_error)

            /* "gnocis/sequences.pyx":890
 * 				offset = struct.unpack('I', fIn.read(4))[0] # Relative to file start
 * 				seqs.append(  { 'name': name, 'offset': offset } )
 * 			for iseq, seqInfo in enumerate(seqs):             # <<<<<<<<<<<<<<
 * 				sname = seqInfo['name']
 * 				if self.spacePrune:
 */
            __pyx_L20_continue:;
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

          /* "gnocis/sequences.pyx":878
 * 		cdef list Nblocks, blkStarts, blkSizes, maskStarts, maskSizes
 * 		# File processing
 * 		with open(self.path, 'rb') as fIn:             # <<<<<<<<<<<<<<
 * 			sig, ver, nseq, reserved = struct.unpack('IIII', fIn.read(16))
 * 			if sig != 0x1A412743:
 */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
        __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_11) < 0) __PYX_ERR(0, 878, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_1 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_9, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 878, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_28 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 878, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_28);
          __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_28);
          __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
          if (__pyx_t_17 < 0) __PYX_ERR(0, 878, __pyx_L10_except_error)
          __pyx_t_22 = ((!(__pyx_t_17 != 0)) != 0);
          if (__pyx_t_22) {
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_9, __pyx_t_11);
            __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_11 = 0; 
            __PYX_ERR(0, 878, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_3) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__20, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 878, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L39;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L1_error;
    __pyx_L39:;
  }

  /* "gnocis/sequences.pyx":908
 * 				Nblocks = sorted([ stream2bitNBlock(bstart, bsize) for bstart, bsize in zip(blkStarts, blkSizes) ], key = lambda x: x.start)
 * 				yield stream2bitSeq(sname, fIn, self.wantBlockSize, Nblocks, nnt)
 * 		return None             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = NULL;
  goto __pyx_L0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":868
 * 		self.restrictToSequences = restrictToSequences
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef unsigned int sig, ver, nseq, reserved, offset
 * 		cdef list seqs
 */

  /* function exit code */
  __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_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("__iter__", __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;
}

/* "gnocis/sequences.pyx":910
 * 		return None
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_6__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_6__str__ = {"__str__", (PyCFunction)__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_6__str__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_6__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_18sequenceStream2bit_5__str__(__pyx_self, ((PyObject *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":911
 * 
 * 	def __str__(self):
 * 		return '2bit sequence stream<%s>'%(self.name)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_2bit_sequence_stream_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 911, __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;

  /* "gnocis/sequences.pyx":910
 * 		return None
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":913
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_8__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_8__repr__ = {"__repr__", (PyCFunction)__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_8__repr__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_18sequenceStream2bit_8__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_18sequenceStream2bit_7__repr__(__pyx_self, ((PyObject *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":914
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * # Streams a 2bit file in blocks.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 914, __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;

  /* "gnocis/sequences.pyx":913
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStream2bit.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":917
 * 
 * # Streams a 2bit file in blocks.
 * cpdef stream2bit(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a 2bit file.
 */

static PyObject *__pyx_pw_6gnocis_9sequences_9stream2bit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences_stream2bit(PyObject *__pyx_v_path, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_stream2bit *__pyx_optional_args) {
  PyObject *__pyx_v_wantBlockSize = ((PyObject *)__pyx_int_5000);
  PyObject *__pyx_v_spacePrune = ((PyObject *)Py_True);
  PyObject *__pyx_v_dropChr = ((PyObject *)Py_True);
  PyObject *__pyx_v_restrictToSequences = ((PyObject *)Py_None);
  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("stream2bit", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_wantBlockSize = __pyx_optional_args->wantBlockSize;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_spacePrune = __pyx_optional_args->spacePrune;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_dropChr = __pyx_optional_args->dropChr;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_restrictToSequences = __pyx_optional_args->restrictToSequences;
          }
        }
      }
    }
  }

  /* "gnocis/sequences.pyx":936
 * 	:rtype: sequenceStream
 * 	"""
 * 	return sequenceStream2bit(path, wantBlockSize, spacePrune, dropChr, restrictToSequences)             # <<<<<<<<<<<<<<
 * 
 * # Gets a sequence stream based on a path, deciding on the format from the path.
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_latin1_sequenceStream2bit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 936, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 936, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_path);
    __Pyx_GIVEREF(__pyx_v_path);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_path);
    __Pyx_INCREF(__pyx_v_wantBlockSize);
    __Pyx_GIVEREF(__pyx_v_wantBlockSize);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_wantBlockSize);
    __Pyx_INCREF(__pyx_v_spacePrune);
    __Pyx_GIVEREF(__pyx_v_spacePrune);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_spacePrune);
    __Pyx_INCREF(__pyx_v_dropChr);
    __Pyx_GIVEREF(__pyx_v_dropChr);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_dropChr);
    __Pyx_INCREF(__pyx_v_restrictToSequences);
    __Pyx_GIVEREF(__pyx_v_restrictToSequences);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_restrictToSequences);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":917
 * 
 * # Streams a 2bit file in blocks.
 * cpdef stream2bit(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a 2bit file.
 */

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

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_9stream2bit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_8stream2bit[] = "\n\tStreams a 2bit file.\n\t\n\t:param path: Path to the input file.\n\t:param wantBlockSize: Desired block size.\n\t:param spacePrune: Whether or not to prune sequence name spaces.\n\t:param dropChr: Whether or not to prune sequence name \"chr\"-prefixes.\n\t:param restrictToSequences: List of sequence names to restrict to/focus on.\n\t\n\t:type path: str\n\t:type wantBlockSize: int, optional\n\t:type spacePrune: bool, optional\n\t:type dropChr: bool, optional\n\t:type restrictToSequences: list, optional\n\t\n\t:return: Generated sequence stream.\n\t:rtype: sequenceStream\n\t";
static PyObject *__pyx_pw_6gnocis_9sequences_9stream2bit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_path = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_spacePrune = 0;
  PyObject *__pyx_v_dropChr = 0;
  PyObject *__pyx_v_restrictToSequences = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stream2bit (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_path,&__pyx_n_s_wantBlockSize,&__pyx_n_s_spacePrune,&__pyx_n_s_dropChr,&__pyx_n_s_restrictToSequences,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_5000);
    values[2] = ((PyObject *)Py_True);
    values[3] = ((PyObject *)Py_True);
    values[4] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spacePrune);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dropChr);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictToSequences);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "stream2bit") < 0)) __PYX_ERR(0, 917, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_path = values[0];
    __pyx_v_wantBlockSize = values[1];
    __pyx_v_spacePrune = values[2];
    __pyx_v_dropChr = values[3];
    __pyx_v_restrictToSequences = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("stream2bit", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 917, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.stream2bit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_8stream2bit(__pyx_self, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences);

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

static PyObject *__pyx_pf_6gnocis_9sequences_8stream2bit(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gnocis_9sequences_stream2bit __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("stream2bit", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.wantBlockSize = __pyx_v_wantBlockSize;
  __pyx_t_2.spacePrune = __pyx_v_spacePrune;
  __pyx_t_2.dropChr = __pyx_v_dropChr;
  __pyx_t_2.restrictToSequences = __pyx_v_restrictToSequences;
  __pyx_t_1 = __pyx_f_6gnocis_9sequences_stream2bit(__pyx_v_path, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 917, __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("gnocis.sequences.stream2bit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":939
 * 
 * # Gets a sequence stream based on a path, deciding on the format from the path.
 * cpdef getSequenceStreamFromPath(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Creates a sequence stream from a path, deducing the file type.
 */

static PyObject *__pyx_pw_6gnocis_9sequences_11getSequenceStreamFromPath(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6gnocis_9sequences_getSequenceStreamFromPath(PyObject *__pyx_v_path, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_getSequenceStreamFromPath *__pyx_optional_args) {
  PyObject *__pyx_v_wantBlockSize = ((PyObject *)__pyx_int_5000);
  PyObject *__pyx_v_spacePrune = ((PyObject *)Py_True);
  PyObject *__pyx_v_dropChr = ((PyObject *)Py_True);
  PyObject *__pyx_v_restrictToSequences = ((PyObject *)Py_None);
  PyObject *__pyx_v_l = 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;
  struct __pyx_opt_args_6gnocis_9sequences_streamFASTA __pyx_t_6;
  struct __pyx_opt_args_6gnocis_9sequences_streamFASTAGZ __pyx_t_7;
  struct __pyx_opt_args_6gnocis_9sequences_stream2bit __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getSequenceStreamFromPath", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_wantBlockSize = __pyx_optional_args->wantBlockSize;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_spacePrune = __pyx_optional_args->spacePrune;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_dropChr = __pyx_optional_args->dropChr;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_restrictToSequences = __pyx_optional_args->restrictToSequences;
          }
        }
      }
    }
  }

  /* "gnocis/sequences.pyx":958
 * 	:rtype: sequenceStream
 * 	"""
 * 	l = path.lower()             # <<<<<<<<<<<<<<
 * 	if l.endswith(".fa") or l.endswith(".fasta"):
 * 		return streamFASTA(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_path, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_l = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":959
 * 	"""
 * 	l = path.lower()
 * 	if l.endswith(".fa") or l.endswith(".fasta"):             # <<<<<<<<<<<<<<
 * 		return streamFASTA(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".fa.gz") or l.endswith(".fasta.gz"):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_l, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_fa) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_fa);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __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, 959, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_l, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_fasta) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_fasta);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __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, 959, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_4) {

    /* "gnocis/sequences.pyx":960
 * 	l = path.lower()
 * 	if l.endswith(".fa") or l.endswith(".fasta"):
 * 		return streamFASTA(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)             # <<<<<<<<<<<<<<
 * 	elif l.endswith(".fa.gz") or l.endswith(".fasta.gz"):
 * 		return streamFASTAGZ(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6.__pyx_n = 4;
    __pyx_t_6.wantBlockSize = __pyx_v_wantBlockSize;
    __pyx_t_6.spacePrune = __pyx_v_spacePrune;
    __pyx_t_6.dropChr = __pyx_v_dropChr;
    __pyx_t_6.restrictToSequences = __pyx_v_restrictToSequences;
    __pyx_t_1 = __pyx_f_6gnocis_9sequences_streamFASTA(__pyx_v_path, 0, &__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "gnocis/sequences.pyx":959
 * 	"""
 * 	l = path.lower()
 * 	if l.endswith(".fa") or l.endswith(".fasta"):             # <<<<<<<<<<<<<<
 * 		return streamFASTA(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".fa.gz") or l.endswith(".fasta.gz"):
 */
  }

  /* "gnocis/sequences.pyx":961
 * 	if l.endswith(".fa") or l.endswith(".fasta"):
 * 		return streamFASTA(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".fa.gz") or l.endswith(".fasta.gz"):             # <<<<<<<<<<<<<<
 * 		return streamFASTAGZ(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".2bit") or l.endswith(".2b"):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_l, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_fa_gz) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_fa_gz);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 961, __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, 961, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_l, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_fasta_gz) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_fasta_gz);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 961, __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, 961, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_t_5;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_4) {

    /* "gnocis/sequences.pyx":962
 * 		return streamFASTA(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".fa.gz") or l.endswith(".fasta.gz"):
 * 		return streamFASTAGZ(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)             # <<<<<<<<<<<<<<
 * 	elif l.endswith(".2bit") or l.endswith(".2b"):
 * 		return stream2bit(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7.__pyx_n = 4;
    __pyx_t_7.wantBlockSize = __pyx_v_wantBlockSize;
    __pyx_t_7.spacePrune = __pyx_v_spacePrune;
    __pyx_t_7.dropChr = __pyx_v_dropChr;
    __pyx_t_7.restrictToSequences = __pyx_v_restrictToSequences;
    __pyx_t_1 = __pyx_f_6gnocis_9sequences_streamFASTAGZ(__pyx_v_path, 0, &__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 962, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "gnocis/sequences.pyx":961
 * 	if l.endswith(".fa") or l.endswith(".fasta"):
 * 		return streamFASTA(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".fa.gz") or l.endswith(".fasta.gz"):             # <<<<<<<<<<<<<<
 * 		return streamFASTAGZ(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".2bit") or l.endswith(".2b"):
 */
  }

  /* "gnocis/sequences.pyx":963
 * 	elif l.endswith(".fa.gz") or l.endswith(".fasta.gz"):
 * 		return streamFASTAGZ(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".2bit") or l.endswith(".2b"):             # <<<<<<<<<<<<<<
 * 		return stream2bit(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	else:
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_l, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_2bit) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_2bit);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __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, 963, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_l, __pyx_n_s_endswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_2b) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_2b);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __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, 963, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_t_5;
  __pyx_L8_bool_binop_done:;
  if (likely(__pyx_t_4)) {

    /* "gnocis/sequences.pyx":964
 * 		return streamFASTAGZ(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".2bit") or l.endswith(".2b"):
 * 		return stream2bit(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)             # <<<<<<<<<<<<<<
 * 	else:
 * 		raise Exception('Unrecognized sequence format')
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_8.__pyx_n = 4;
    __pyx_t_8.wantBlockSize = __pyx_v_wantBlockSize;
    __pyx_t_8.spacePrune = __pyx_v_spacePrune;
    __pyx_t_8.dropChr = __pyx_v_dropChr;
    __pyx_t_8.restrictToSequences = __pyx_v_restrictToSequences;
    __pyx_t_1 = __pyx_f_6gnocis_9sequences_stream2bit(__pyx_v_path, 0, &__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 964, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "gnocis/sequences.pyx":963
 * 	elif l.endswith(".fa.gz") or l.endswith(".fasta.gz"):
 * 		return streamFASTAGZ(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	elif l.endswith(".2bit") or l.endswith(".2b"):             # <<<<<<<<<<<<<<
 * 		return stream2bit(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	else:
 */
  }

  /* "gnocis/sequences.pyx":966
 * 		return stream2bit(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	else:
 * 		raise Exception('Unrecognized sequence format')             # <<<<<<<<<<<<<<
 * 
 * # Streams sequence windows from a sequence set or sequence stream, with coordinates and window sequence.
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __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, 966, __pyx_L1_error)
  }

  /* "gnocis/sequences.pyx":939
 * 
 * # Gets a sequence stream based on a path, deciding on the format from the path.
 * cpdef getSequenceStreamFromPath(path, wantBlockSize = 5000, spacePrune = True, dropChr = True, restrictToSequences = None):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Creates a sequence stream from a path, deducing the file type.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.getSequenceStreamFromPath", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_l);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11getSequenceStreamFromPath(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_10getSequenceStreamFromPath[] = "\n\tCreates a sequence stream from a path, deducing the file type.\n\t\n\t:param path: Path to the input file.\n\t:param wantBlockSize: Desired block size.\n\t:param spacePrune: Whether or not to prune sequence name spaces.\n\t:param dropChr: Whether or not to prune sequence name \"chr\"-prefixes.\n\t:param restrictToSequences: List of sequence names to restrict to/focus on.\n\t\n\t:type path: str\n\t:type wantBlockSize: int, optional\n\t:type spacePrune: bool, optional\n\t:type dropChr: bool, optional\n\t:type restrictToSequences: list, optional\n\t\n\t:return: Generated sequence stream.\n\t:rtype: sequenceStream\n\t";
static PyObject *__pyx_pw_6gnocis_9sequences_11getSequenceStreamFromPath(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_path = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_spacePrune = 0;
  PyObject *__pyx_v_dropChr = 0;
  PyObject *__pyx_v_restrictToSequences = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getSequenceStreamFromPath (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_path,&__pyx_n_s_wantBlockSize,&__pyx_n_s_spacePrune,&__pyx_n_s_dropChr,&__pyx_n_s_restrictToSequences,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_5000);
    values[2] = ((PyObject *)Py_True);
    values[3] = ((PyObject *)Py_True);
    values[4] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spacePrune);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dropChr);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_restrictToSequences);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSequenceStreamFromPath") < 0)) __PYX_ERR(0, 939, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_path = values[0];
    __pyx_v_wantBlockSize = values[1];
    __pyx_v_spacePrune = values[2];
    __pyx_v_dropChr = values[3];
    __pyx_v_restrictToSequences = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getSequenceStreamFromPath", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 939, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.getSequenceStreamFromPath", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_10getSequenceStreamFromPath(__pyx_self, __pyx_v_path, __pyx_v_wantBlockSize, __pyx_v_spacePrune, __pyx_v_dropChr, __pyx_v_restrictToSequences);

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

static PyObject *__pyx_pf_6gnocis_9sequences_10getSequenceStreamFromPath(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_spacePrune, PyObject *__pyx_v_dropChr, PyObject *__pyx_v_restrictToSequences) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_6gnocis_9sequences_getSequenceStreamFromPath __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getSequenceStreamFromPath", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.wantBlockSize = __pyx_v_wantBlockSize;
  __pyx_t_2.spacePrune = __pyx_v_spacePrune;
  __pyx_t_2.dropChr = __pyx_v_dropChr;
  __pyx_t_2.restrictToSequences = __pyx_v_restrictToSequences;
  __pyx_t_1 = __pyx_f_6gnocis_9sequences_getSequenceStreamFromPath(__pyx_v_path, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 939, __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("gnocis.sequences.getSequenceStreamFromPath", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_14generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":969
 * 
 * # Streams sequence windows from a sequence set or sequence stream, with coordinates and window sequence.
 * def streamSequenceWindows(src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Yields sequence windows for a sequence set, sequence stream or a path to a sequence file.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_13streamSequenceWindows(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_12streamSequenceWindows[] = "\n\tYields sequence windows for a sequence set, sequence stream or a path to a sequence file.\n\t\n\t:param src: Input sequences.\n\t:param windowSize: Window size.\n\t:param windowStep: Window step size.\n\t\n\t:type src: sequences/sequenceStream/str\n\t:type windowSize: int\n\t:type windowStep: int\n\t\n\t:return: Sequence windows.\n\t:rtype: sequence (yield)\n\t";
static PyMethodDef __pyx_mdef_6gnocis_9sequences_13streamSequenceWindows = {"streamSequenceWindows", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_13streamSequenceWindows, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_12streamSequenceWindows};
static PyObject *__pyx_pw_6gnocis_9sequences_13streamSequenceWindows(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_src = 0;
  int __pyx_v_windowSize;
  int __pyx_v_windowStep;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("streamSequenceWindows (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_src,&__pyx_n_s_windowSize,&__pyx_n_s_windowStep,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_src)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_windowSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("streamSequenceWindows", 1, 3, 3, 1); __PYX_ERR(0, 969, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_windowStep)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("streamSequenceWindows", 1, 3, 3, 2); __PYX_ERR(0, 969, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "streamSequenceWindows") < 0)) __PYX_ERR(0, 969, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_src = values[0];
    __pyx_v_windowSize = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_windowSize == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 969, __pyx_L3_error)
    __pyx_v_windowStep = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_windowStep == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 969, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("streamSequenceWindows", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 969, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.streamSequenceWindows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_12streamSequenceWindows(__pyx_self, __pyx_v_src, __pyx_v_windowSize, __pyx_v_windowStep);

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

static PyObject *__pyx_pf_6gnocis_9sequences_12streamSequenceWindows(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_src, int __pyx_v_windowSize, int __pyx_v_windowStep) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("streamSequenceWindows", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 969, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_src = __pyx_v_src;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_src);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_src);
  __pyx_cur_scope->__pyx_v_windowSize = __pyx_v_windowSize;
  __pyx_cur_scope->__pyx_v_windowStep = __pyx_v_windowStep;
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_14generator6, __pyx_codeobj__28, (PyObject *) __pyx_cur_scope, __pyx_n_s_streamSequenceWindows, __pyx_n_s_streamSequenceWindows, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 969, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.streamSequenceWindows", __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_6gnocis_9sequences_14generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  Py_ssize_t __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *(*__pyx_t_13)(PyObject *);
  Py_ssize_t __pyx_t_14;
  PyObject *__pyx_t_15 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("streamSequenceWindows", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L10_resume_from_yield;
    case 2: goto __pyx_L17_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, 969, __pyx_L1_error)

  /* "gnocis/sequences.pyx":988
 * 	cdef object cseq
 * 	cdef str blk
 * 	if isinstance(src, str):             # <<<<<<<<<<<<<<
 * 		src = getSequenceStreamFromPath(src)
 * 	if isinstance(src, sequences):
 */
  __pyx_t_1 = PyUnicode_Check(__pyx_cur_scope->__pyx_v_src); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "gnocis/sequences.pyx":989
 * 	cdef str blk
 * 	if isinstance(src, str):
 * 		src = getSequenceStreamFromPath(src)             # <<<<<<<<<<<<<<
 * 	if isinstance(src, sequences):
 * 		for cseq in src:
 */
    __pyx_t_3 = __pyx_f_6gnocis_9sequences_getSequenceStreamFromPath(__pyx_cur_scope->__pyx_v_src, 0, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_src);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_src, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":988
 * 	cdef object cseq
 * 	cdef str blk
 * 	if isinstance(src, str):             # <<<<<<<<<<<<<<
 * 		src = getSequenceStreamFromPath(src)
 * 	if isinstance(src, sequences):
 */
  }

  /* "gnocis/sequences.pyx":990
 * 	if isinstance(src, str):
 * 		src = getSequenceStreamFromPath(src)
 * 	if isinstance(src, sequences):             # <<<<<<<<<<<<<<
 * 		for cseq in src:
 * 			cbuf = '' + cseq.seq
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_cur_scope->__pyx_v_src, __pyx_ptype_6gnocis_9sequences_sequences); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "gnocis/sequences.pyx":991
 * 		src = getSequenceStreamFromPath(src)
 * 	if isinstance(src, sequences):
 * 		for cseq in src:             # <<<<<<<<<<<<<<
 * 			cbuf = '' + cseq.seq
 * 			cstart = 0
 */
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_src)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_src)) {
      __pyx_t_3 = __pyx_cur_scope->__pyx_v_src; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_src); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 991, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 991, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_5)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 991, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 991, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 991, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 991, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        }
      } else {
        __pyx_t_6 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 991, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_cseq);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cseq, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      __pyx_t_6 = 0;

      /* "gnocis/sequences.pyx":992
 * 	if isinstance(src, sequences):
 * 		for cseq in src:
 * 			cbuf = '' + cseq.seq             # <<<<<<<<<<<<<<
 * 			cstart = 0
 * 			while len(cbuf) >= windowSize:
 */
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_cseq, __pyx_n_s_seq); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = PyNumber_Add(__pyx_kp_u__2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_cbuf);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_7));
      __Pyx_GIVEREF(__pyx_t_7);
      __pyx_t_7 = 0;

      /* "gnocis/sequences.pyx":993
 * 		for cseq in src:
 * 			cbuf = '' + cseq.seq
 * 			cstart = 0             # <<<<<<<<<<<<<<
 * 			while len(cbuf) >= windowSize:
 * 				yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))
 */
      __pyx_cur_scope->__pyx_v_cstart = 0;

      /* "gnocis/sequences.pyx":994
 * 			cbuf = '' + cseq.seq
 * 			cstart = 0
 * 			while len(cbuf) >= windowSize:             # <<<<<<<<<<<<<<
 * 				yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))
 * 				cbuf = cbuf[windowStep:]
 */
      while (1) {
        if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
          __PYX_ERR(0, 994, __pyx_L1_error)
        }
        __pyx_t_8 = __Pyx_PyUnicode_GET_LENGTH(__pyx_cur_scope->__pyx_v_cbuf); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 994, __pyx_L1_error)
        __pyx_t_1 = ((__pyx_t_8 >= __pyx_cur_scope->__pyx_v_windowSize) != 0);
        if (!__pyx_t_1) break;

        /* "gnocis/sequences.pyx":995
 * 			cstart = 0
 * 			while len(cbuf) >= windowSize:
 * 				yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))             # <<<<<<<<<<<<<<
 * 				cbuf = cbuf[windowStep:]
 * 				cstart += windowStep
 */
        if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 995, __pyx_L1_error)
        }
        __pyx_t_7 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, 0, __pyx_cur_scope->__pyx_v_windowSize); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        PyTuple_SET_ITEM(__pyx_t_6, 0, Py_None);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
        __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_cseq, __pyx_n_s_name); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_cstart); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = __Pyx_PyInt_From_long(((__pyx_cur_scope->__pyx_v_cstart + __pyx_cur_scope->__pyx_v_windowSize) - 1)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_11);
        __pyx_t_9 = 0;
        __pyx_t_10 = 0;
        __pyx_t_11 = 0;
        __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_region), __pyx_t_12, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_sourceRegion, __pyx_t_11) < 0) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 995, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_r = __pyx_t_11;
        __pyx_t_11 = 0;
        __Pyx_XGIVEREF(__pyx_t_3);
        __pyx_cur_scope->__pyx_t_0 = __pyx_t_3;
        __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
        __pyx_cur_scope->__pyx_t_2 = __pyx_t_5;
        __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_L10_resume_from_yield:;
        __pyx_t_3 = __pyx_cur_scope->__pyx_t_0;
        __pyx_cur_scope->__pyx_t_0 = 0;
        __Pyx_XGOTREF(__pyx_t_3);
        __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
        __pyx_t_5 = __pyx_cur_scope->__pyx_t_2;
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 995, __pyx_L1_error)

        /* "gnocis/sequences.pyx":996
 * 			while len(cbuf) >= windowSize:
 * 				yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))
 * 				cbuf = cbuf[windowStep:]             # <<<<<<<<<<<<<<
 * 				cstart += windowStep
 * 	elif isinstance(src, sequenceStream):
 */
        if (unlikely(__pyx_cur_scope->__pyx_v_cbuf == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 996, __pyx_L1_error)
        }
        __pyx_t_11 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, __pyx_cur_scope->__pyx_v_windowStep, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 996, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_cbuf);
        __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_11));
        __Pyx_GIVEREF(__pyx_t_11);
        __pyx_t_11 = 0;

        /* "gnocis/sequences.pyx":997
 * 				yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))
 * 				cbuf = cbuf[windowStep:]
 * 				cstart += windowStep             # <<<<<<<<<<<<<<
 * 	elif isinstance(src, sequenceStream):
 * 		for cseq in src:
 */
        __pyx_cur_scope->__pyx_v_cstart = (__pyx_cur_scope->__pyx_v_cstart + __pyx_cur_scope->__pyx_v_windowStep);
      }

      /* "gnocis/sequences.pyx":991
 * 		src = getSequenceStreamFromPath(src)
 * 	if isinstance(src, sequences):
 * 		for cseq in src:             # <<<<<<<<<<<<<<
 * 			cbuf = '' + cseq.seq
 * 			cstart = 0
 */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":990
 * 	if isinstance(src, str):
 * 		src = getSequenceStreamFromPath(src)
 * 	if isinstance(src, sequences):             # <<<<<<<<<<<<<<
 * 		for cseq in src:
 * 			cbuf = '' + cseq.seq
 */
    goto __pyx_L5;
  }

  /* "gnocis/sequences.pyx":998
 * 				cbuf = cbuf[windowStep:]
 * 				cstart += windowStep
 * 	elif isinstance(src, sequenceStream):             # <<<<<<<<<<<<<<
 * 		for cseq in src:
 * 			cbuf = ''
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_cur_scope->__pyx_v_src, __pyx_ptype_6gnocis_9sequences_sequenceStream); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "gnocis/sequences.pyx":999
 * 				cstart += windowStep
 * 	elif isinstance(src, sequenceStream):
 * 		for cseq in src:             # <<<<<<<<<<<<<<
 * 			cbuf = ''
 * 			cstart = 0
 */
    if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_src)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_src)) {
      __pyx_t_3 = __pyx_cur_scope->__pyx_v_src; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_src); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 999, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 999, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_5)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_11 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_11); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 999, __pyx_L1_error)
          #else
          __pyx_t_11 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 999, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_11); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 999, __pyx_L1_error)
          #else
          __pyx_t_11 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 999, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          #endif
        }
      } else {
        __pyx_t_11 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_11)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 999, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_11);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_cseq);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cseq, __pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_11);
      __pyx_t_11 = 0;

      /* "gnocis/sequences.pyx":1000
 * 	elif isinstance(src, sequenceStream):
 * 		for cseq in src:
 * 			cbuf = ''             # <<<<<<<<<<<<<<
 * 			cstart = 0
 * 			for blk in cseq:
 */
      __Pyx_INCREF(__pyx_kp_u__2);
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_cbuf);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, __pyx_kp_u__2);
      __Pyx_GIVEREF(__pyx_kp_u__2);

      /* "gnocis/sequences.pyx":1001
 * 		for cseq in src:
 * 			cbuf = ''
 * 			cstart = 0             # <<<<<<<<<<<<<<
 * 			for blk in cseq:
 * 				cbuf += blk
 */
      __pyx_cur_scope->__pyx_v_cstart = 0;

      /* "gnocis/sequences.pyx":1002
 * 			cbuf = ''
 * 			cstart = 0
 * 			for blk in cseq:             # <<<<<<<<<<<<<<
 * 				cbuf += blk
 * 				while len(cbuf) >= windowSize:
 */
      if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_cseq)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_cseq)) {
        __pyx_t_11 = __pyx_cur_scope->__pyx_v_cseq; __Pyx_INCREF(__pyx_t_11); __pyx_t_8 = 0;
        __pyx_t_13 = NULL;
      } else {
        __pyx_t_8 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_cseq); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_13 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1002, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_13)) {
          if (likely(PyList_CheckExact(__pyx_t_11))) {
            if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_11)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1002, __pyx_L1_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_11, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1002, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          } else {
            if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_11)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1002, __pyx_L1_error)
            #else
            __pyx_t_7 = PySequence_ITEM(__pyx_t_11, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1002, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            #endif
          }
        } else {
          __pyx_t_7 = __pyx_t_13(__pyx_t_11);
          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, 1002, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_7);
        }
        if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 1002, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_blk);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_blk, ((PyObject*)__pyx_t_7));
        __Pyx_GIVEREF(__pyx_t_7);
        __pyx_t_7 = 0;

        /* "gnocis/sequences.pyx":1003
 * 			cstart = 0
 * 			for blk in cseq:
 * 				cbuf += blk             # <<<<<<<<<<<<<<
 * 				while len(cbuf) >= windowSize:
 * 					yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))
 */
        __pyx_t_7 = __Pyx_PyUnicode_ConcatSafe(__pyx_cur_scope->__pyx_v_cbuf, __pyx_cur_scope->__pyx_v_blk); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_cbuf);
        __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_7));
        __Pyx_GIVEREF(__pyx_t_7);
        __pyx_t_7 = 0;

        /* "gnocis/sequences.pyx":1004
 * 			for blk in cseq:
 * 				cbuf += blk
 * 				while len(cbuf) >= windowSize:             # <<<<<<<<<<<<<<
 * 					yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))
 * 					cbuf = cbuf[windowStep:]
 */
        while (1) {
          __pyx_t_14 = __Pyx_PyUnicode_GET_LENGTH(__pyx_cur_scope->__pyx_v_cbuf); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1004, __pyx_L1_error)
          __pyx_t_2 = ((__pyx_t_14 >= __pyx_cur_scope->__pyx_v_windowSize) != 0);
          if (!__pyx_t_2) break;

          /* "gnocis/sequences.pyx":1005
 * 				cbuf += blk
 * 				while len(cbuf) >= windowSize:
 * 					yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))             # <<<<<<<<<<<<<<
 * 					cbuf = cbuf[windowStep:]
 * 					cstart += windowStep
 */
          __pyx_t_7 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, 0, __pyx_cur_scope->__pyx_v_windowSize); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          PyTuple_SET_ITEM(__pyx_t_6, 0, Py_None);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_cseq, __pyx_n_s_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_cstart); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_9 = __Pyx_PyInt_From_long(((__pyx_cur_scope->__pyx_v_cstart + __pyx_cur_scope->__pyx_v_windowSize) - 1)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_10);
          __Pyx_GIVEREF(__pyx_t_9);
          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_9);
          __pyx_t_12 = 0;
          __pyx_t_10 = 0;
          __pyx_t_9 = 0;
          __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_region), __pyx_t_15, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_sourceRegion, __pyx_t_9) < 0) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1005, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_r = __pyx_t_9;
          __pyx_t_9 = 0;
          __Pyx_XGIVEREF(__pyx_t_3);
          __pyx_cur_scope->__pyx_t_0 = __pyx_t_3;
          __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
          __pyx_cur_scope->__pyx_t_2 = __pyx_t_5;
          __pyx_cur_scope->__pyx_t_3 = __pyx_t_8;
          __Pyx_XGIVEREF(__pyx_t_11);
          __pyx_cur_scope->__pyx_t_4 = __pyx_t_11;
          __pyx_cur_scope->__pyx_t_5 = __pyx_t_13;
          __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_L17_resume_from_yield:;
          __pyx_t_3 = __pyx_cur_scope->__pyx_t_0;
          __pyx_cur_scope->__pyx_t_0 = 0;
          __Pyx_XGOTREF(__pyx_t_3);
          __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
          __pyx_t_5 = __pyx_cur_scope->__pyx_t_2;
          __pyx_t_8 = __pyx_cur_scope->__pyx_t_3;
          __pyx_t_11 = __pyx_cur_scope->__pyx_t_4;
          __pyx_cur_scope->__pyx_t_4 = 0;
          __Pyx_XGOTREF(__pyx_t_11);
          __pyx_t_13 = __pyx_cur_scope->__pyx_t_5;
          if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1005, __pyx_L1_error)

          /* "gnocis/sequences.pyx":1006
 * 				while len(cbuf) >= windowSize:
 * 					yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))
 * 					cbuf = cbuf[windowStep:]             # <<<<<<<<<<<<<<
 * 					cstart += windowStep
 * 
 */
          __pyx_t_9 = __Pyx_PyUnicode_Substring(__pyx_cur_scope->__pyx_v_cbuf, __pyx_cur_scope->__pyx_v_windowStep, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_cbuf);
          __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_cbuf, ((PyObject*)__pyx_t_9));
          __Pyx_GIVEREF(__pyx_t_9);
          __pyx_t_9 = 0;

          /* "gnocis/sequences.pyx":1007
 * 					yield sequence(None, cbuf[:windowSize], sourceRegion = region(cseq.name, cstart, cstart+windowSize-1))
 * 					cbuf = cbuf[windowStep:]
 * 					cstart += windowStep             # <<<<<<<<<<<<<<
 * 
 * # Returns sliding window coordinates for a sequence set or sequence stream.
 */
          __pyx_cur_scope->__pyx_v_cstart = (__pyx_cur_scope->__pyx_v_cstart + __pyx_cur_scope->__pyx_v_windowStep);
        }

        /* "gnocis/sequences.pyx":1002
 * 			cbuf = ''
 * 			cstart = 0
 * 			for blk in cseq:             # <<<<<<<<<<<<<<
 * 				cbuf += blk
 * 				while len(cbuf) >= windowSize:
 */
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;

      /* "gnocis/sequences.pyx":999
 * 				cstart += windowStep
 * 	elif isinstance(src, sequenceStream):
 * 		for cseq in src:             # <<<<<<<<<<<<<<
 * 			cbuf = ''
 * 			cstart = 0
 */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":998
 * 				cbuf = cbuf[windowStep:]
 * 				cstart += windowStep
 * 	elif isinstance(src, sequenceStream):             # <<<<<<<<<<<<<<
 * 		for cseq in src:
 * 			cbuf = ''
 */
  }
  __pyx_L5:;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":969
 * 
 * # Streams sequence windows from a sequence set or sequence stream, with coordinates and window sequence.
 * def streamSequenceWindows(src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Yields sequence windows for a sequence set, sequence stream or a path to a sequence file.
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("streamSequenceWindows", __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;
}

/* "gnocis/sequences.pyx":1010
 * 
 * # Returns sliding window coordinates for a sequence set or sequence stream.
 * def getSequenceWindowRegions(object src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Generates sequence window regions for a sequence set or stream.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_16getSequenceWindowRegions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_15getSequenceWindowRegions[] = "\n\tGenerates sequence window regions for a sequence set or stream.\n\t\n\t:param stream: Input sequences.\n\t:param windowSize: Window size.\n\t:param windowStep: Window step size.\n\t\n\t:type src: sequences/sequenceStream\n\t:type windowSize: int\n\t:type windowStep: int\n\t\n\t:return: Sequence window regions.\n\t:rtype: regions\n\t";
static PyMethodDef __pyx_mdef_6gnocis_9sequences_16getSequenceWindowRegions = {"getSequenceWindowRegions", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_16getSequenceWindowRegions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_15getSequenceWindowRegions};
static PyObject *__pyx_pw_6gnocis_9sequences_16getSequenceWindowRegions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_src = 0;
  int __pyx_v_windowSize;
  int __pyx_v_windowStep;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getSequenceWindowRegions (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_src,&__pyx_n_s_windowSize,&__pyx_n_s_windowStep,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_src)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_windowSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getSequenceWindowRegions", 1, 3, 3, 1); __PYX_ERR(0, 1010, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_windowStep)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getSequenceWindowRegions", 1, 3, 3, 2); __PYX_ERR(0, 1010, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSequenceWindowRegions") < 0)) __PYX_ERR(0, 1010, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_src = values[0];
    __pyx_v_windowSize = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_windowSize == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L3_error)
    __pyx_v_windowStep = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_windowStep == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getSequenceWindowRegions", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1010, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.getSequenceWindowRegions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_15getSequenceWindowRegions(__pyx_self, __pyx_v_src, __pyx_v_windowSize, __pyx_v_windowStep);

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

static PyObject *__pyx_pf_6gnocis_9sequences_15getSequenceWindowRegions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_src, int __pyx_v_windowSize, int __pyx_v_windowStep) {
  PyObject *__pyx_v_seqLengths = 0;
  PyObject *__pyx_v_rset = 0;
  PyObject *__pyx_v_cseq = 0;
  int __pyx_v_cstart;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  Py_UCS4 __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getSequenceWindowRegions", 0);
  __Pyx_INCREF(__pyx_v_src);

  /* "gnocis/sequences.pyx":1029
 * 	cdef str cseq
 * 	cdef int cstart
 * 	if isinstance(src, str):             # <<<<<<<<<<<<<<
 * 		src = getSequenceStreamFromPath(src)
 * 	seqLengths = src.sequenceLengths()
 */
  __pyx_t_1 = PyUnicode_Check(__pyx_v_src); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "gnocis/sequences.pyx":1030
 * 	cdef int cstart
 * 	if isinstance(src, str):
 * 		src = getSequenceStreamFromPath(src)             # <<<<<<<<<<<<<<
 * 	seqLengths = src.sequenceLengths()
 * 	rset = []
 */
    __pyx_t_3 = __pyx_f_6gnocis_9sequences_getSequenceStreamFromPath(__pyx_v_src, 0, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_src, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1029
 * 	cdef str cseq
 * 	cdef int cstart
 * 	if isinstance(src, str):             # <<<<<<<<<<<<<<
 * 		src = getSequenceStreamFromPath(src)
 * 	seqLengths = src.sequenceLengths()
 */
  }

  /* "gnocis/sequences.pyx":1031
 * 	if isinstance(src, str):
 * 		src = getSequenceStreamFromPath(src)
 * 	seqLengths = src.sequenceLengths()             # <<<<<<<<<<<<<<
 * 	rset = []
 * 	for cseq in sorted(seqLengths.keys()):
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_sequenceLengths); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 1031, __pyx_L1_error)
  __pyx_v_seqLengths = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":1032
 * 		src = getSequenceStreamFromPath(src)
 * 	seqLengths = src.sequenceLengths()
 * 	rset = []             # <<<<<<<<<<<<<<
 * 	for cseq in sorted(seqLengths.keys()):
 * 		cstart = 0
 */
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_rset = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":1033
 * 	seqLengths = src.sequenceLengths()
 * 	rset = []
 * 	for cseq in sorted(seqLengths.keys()):             # <<<<<<<<<<<<<<
 * 		cstart = 0
 * 		while cstart + windowSize <= seqLengths[cseq]:
 */
  if (unlikely(__pyx_v_seqLengths == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys");
    __PYX_ERR(0, 1033, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_PyDict_Keys(__pyx_v_seqLengths); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_6 = PyList_Sort(__pyx_t_3); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1033, __pyx_L1_error)
  if (unlikely(__pyx_t_3 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 1033, __pyx_L1_error)
  }
  __pyx_t_5 = __pyx_t_3; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1033, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 1033, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_cseq, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1034
 * 	rset = []
 * 	for cseq in sorted(seqLengths.keys()):
 * 		cstart = 0             # <<<<<<<<<<<<<<
 * 		while cstart + windowSize <= seqLengths[cseq]:
 * 			rset.append( region(cseq, cstart, cstart+windowSize-1) )
 */
    __pyx_v_cstart = 0;

    /* "gnocis/sequences.pyx":1035
 * 	for cseq in sorted(seqLengths.keys()):
 * 		cstart = 0
 * 		while cstart + windowSize <= seqLengths[cseq]:             # <<<<<<<<<<<<<<
 * 			rset.append( region(cseq, cstart, cstart+windowSize-1) )
 * 			cstart += windowStep
 */
    while (1) {
      __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_cstart + __pyx_v_windowSize)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__pyx_v_seqLengths == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1035, __pyx_L1_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_seqLengths, __pyx_v_cseq); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_LE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1035, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1035, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (!__pyx_t_2) break;

      /* "gnocis/sequences.pyx":1036
 * 		cstart = 0
 * 		while cstart + windowSize <= seqLengths[cseq]:
 * 			rset.append( region(cseq, cstart, cstart+windowSize-1) )             # <<<<<<<<<<<<<<
 * 			cstart += windowStep
 * 	return regions('Windows (Window size: %d bp; step size: %d bp)'%(windowSize, windowStep), rset, initialSort = False)
 */
      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_cstart); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1036, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = __Pyx_PyInt_From_long(((__pyx_v_cstart + __pyx_v_windowSize) - 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1036, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1036, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_cseq);
      __Pyx_GIVEREF(__pyx_v_cseq);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_cseq);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
      __pyx_t_8 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_region), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1036, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_rset, __pyx_t_4); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1036, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "gnocis/sequences.pyx":1037
 * 		while cstart + windowSize <= seqLengths[cseq]:
 * 			rset.append( region(cseq, cstart, cstart+windowSize-1) )
 * 			cstart += windowStep             # <<<<<<<<<<<<<<
 * 	return regions('Windows (Window size: %d bp; step size: %d bp)'%(windowSize, windowStep), rset, initialSort = False)
 * 
 */
      __pyx_v_cstart = (__pyx_v_cstart + __pyx_v_windowStep);
    }

    /* "gnocis/sequences.pyx":1033
 * 	seqLengths = src.sequenceLengths()
 * 	rset = []
 * 	for cseq in sorted(seqLengths.keys()):             # <<<<<<<<<<<<<<
 * 		cstart = 0
 * 		while cstart + windowSize <= seqLengths[cseq]:
 */
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "gnocis/sequences.pyx":1038
 * 			rset.append( region(cseq, cstart, cstart+windowSize-1) )
 * 			cstart += windowStep
 * 	return regions('Windows (Window size: %d bp; step size: %d bp)'%(windowSize, windowStep), rset, initialSort = False)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = 0;
  __pyx_t_9 = 127;
  __Pyx_INCREF(__pyx_kp_u_Windows_Window_size);
  __pyx_t_7 += 22;
  __Pyx_GIVEREF(__pyx_kp_u_Windows_Window_size);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Windows_Window_size);
  __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_windowSize, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp_step_size);
  __pyx_t_7 += 16;
  __Pyx_GIVEREF(__pyx_kp_u_bp_step_size);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_bp_step_size);
  __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_windowStep, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_bp);
  __pyx_t_7 += 4;
  __Pyx_GIVEREF(__pyx_kp_u_bp);
  PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u_bp);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __Pyx_INCREF(__pyx_v_rset);
  __Pyx_GIVEREF(__pyx_v_rset);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_rset);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_initialSort, Py_False) < 0) __PYX_ERR(0, 1038, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_7regions_regions), __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":1010
 * 
 * # Returns sliding window coordinates for a sequence set or sequence stream.
 * def getSequenceWindowRegions(object src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Generates sequence window regions for a sequence set or stream.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gnocis.sequences.getSequenceWindowRegions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seqLengths);
  __Pyx_XDECREF(__pyx_v_rset);
  __Pyx_XDECREF(__pyx_v_cseq);
  __Pyx_XDECREF(__pyx_v_src);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1047
 * class sequenceStreamGeneratorSequence:
 * 
 * 	def __init__(self, model, wantBlockSize, wantSize, number, seed):             # <<<<<<<<<<<<<<
 * 		self.model = model
 * 		self.wantSize = wantSize
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_model = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_wantSize = 0;
  PyObject *__pyx_v_number = 0;
  PyObject *__pyx_v_seed = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_model,&__pyx_n_s_wantBlockSize,&__pyx_n_s_wantSize,&__pyx_n_s_number,&__pyx_n_s_seed,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_model)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 1); __PYX_ERR(0, 1047, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 2); __PYX_ERR(0, 1047, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 3); __PYX_ERR(0, 1047, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_number)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 4); __PYX_ERR(0, 1047, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_seed)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 5); __PYX_ERR(0, 1047, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1047, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_self = values[0];
    __pyx_v_model = values[1];
    __pyx_v_wantBlockSize = values[2];
    __pyx_v_wantSize = values[3];
    __pyx_v_number = values[4];
    __pyx_v_seed = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1047, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGeneratorSequence.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence___init__(__pyx_self, __pyx_v_self, __pyx_v_model, __pyx_v_wantBlockSize, __pyx_v_wantSize, __pyx_v_number, __pyx_v_seed);

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

static PyObject *__pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_model, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_wantSize, PyObject *__pyx_v_number, PyObject *__pyx_v_seed) {
  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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "gnocis/sequences.pyx":1048
 * 
 * 	def __init__(self, model, wantBlockSize, wantSize, number, seed):
 * 		self.model = model             # <<<<<<<<<<<<<<
 * 		self.wantSize = wantSize
 * 		self.wantBlockSize = wantBlockSize
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_model, __pyx_v_model) < 0) __PYX_ERR(0, 1048, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1049
 * 	def __init__(self, model, wantBlockSize, wantSize, number, seed):
 * 		self.model = model
 * 		self.wantSize = wantSize             # <<<<<<<<<<<<<<
 * 		self.wantBlockSize = wantBlockSize
 * 		self.name = 'Random sequence %d (seed = %d)'%(number, seed)
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wantSize, __pyx_v_wantSize) < 0) __PYX_ERR(0, 1049, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1050
 * 		self.model = model
 * 		self.wantSize = wantSize
 * 		self.wantBlockSize = wantBlockSize             # <<<<<<<<<<<<<<
 * 		self.name = 'Random sequence %d (seed = %d)'%(number, seed)
 * 
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wantBlockSize, __pyx_v_wantBlockSize) < 0) __PYX_ERR(0, 1050, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1051
 * 		self.wantSize = wantSize
 * 		self.wantBlockSize = wantBlockSize
 * 		self.name = 'Random sequence %d (seed = %d)'%(number, seed)             # <<<<<<<<<<<<<<
 * 
 * 	def __iter__(self):
 */
  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_Random_sequence);
  __pyx_t_2 += 16;
  __Pyx_GIVEREF(__pyx_kp_u_Random_sequence);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Random_sequence);
  __pyx_t_4 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_number), __pyx_n_u_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __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, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_seed_2);
  __pyx_t_2 += 9;
  __Pyx_GIVEREF(__pyx_kp_u_seed_2);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_seed_2);
  __pyx_t_4 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_seed), __pyx_n_u_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __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_INCREF(__pyx_kp_u__8);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__8);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u__8);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_name, __pyx_t_4) < 0) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":1047
 * class sequenceStreamGeneratorSequence:
 * 
 * 	def __init__(self, model, wantBlockSize, wantSize, number, seed):             # <<<<<<<<<<<<<<
 * 		self.model = model
 * 		self.wantSize = wantSize
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGeneratorSequence.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1053
 * 		self.name = 'Random sequence %d (seed = %d)'%(number, seed)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.stream()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_3__iter__ = {"__iter__", (PyCFunction)__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_3__iter__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_2__iter__(__pyx_self, ((PyObject *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":1054
 * 
 * 	def __iter__(self):
 * 		return self.stream()             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_stream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1054, __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;

  /* "gnocis/sequences.pyx":1053
 * 		self.name = 'Random sequence %d (seed = %d)'%(number, seed)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.stream()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGeneratorSequence.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1056
 * 		return self.stream()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_5__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_5__str__ = {"__str__", (PyCFunction)__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_5__str__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_5__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_4__str__(__pyx_self, ((PyObject *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_4__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__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("__str__", 0);

  /* "gnocis/sequences.pyx":1057
 * 
 * 	def __str__(self):
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_Generator_sequence_stream_sequen);
  __pyx_t_2 += 35;
  __Pyx_GIVEREF(__pyx_kp_u_Generator_sequence_stream_sequen);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Generator_sequence_stream_sequen);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_model); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1057, __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 += 2;
  __Pyx_GIVEREF(__pyx_kp_u__10);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__10);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_wantSize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_t_5), __pyx_n_u_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1057, __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_INCREF(__pyx_kp_u_);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u_);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1057, __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;

  /* "gnocis/sequences.pyx":1056
 * 		return self.stream()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGeneratorSequence.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1059
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_7__repr__ = {"__repr__", (PyCFunction)__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_7__repr__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_6__repr__(__pyx_self, ((PyObject *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":1060
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * 	def stream(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __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;

  /* "gnocis/sequences.pyx":1059
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGeneratorSequence.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_31sequenceStreamGeneratorSequence_10generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":1062
 * 		return self.__str__()
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		while self.wantSize > 0:
 * 			ng = min(self.wantBlockSize, self.wantSize)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_9stream(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_9stream = {"stream", (PyCFunction)__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_9stream, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_31sequenceStreamGeneratorSequence_9stream(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stream (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_8stream(__pyx_self, ((PyObject *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_31sequenceStreamGeneratorSequence_8stream(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("stream", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_28_stream(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_28_stream, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1062, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__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_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_31sequenceStreamGeneratorSequence_10generator7, __pyx_codeobj__29, (PyObject *) __pyx_cur_scope, __pyx_n_s_stream, __pyx_n_s_sequenceStreamGeneratorSequence, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGeneratorSequence.stream", __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_6gnocis_9sequences_31sequenceStreamGeneratorSequence_10generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *)__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;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("stream", 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, 1062, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1063
 * 
 * 	def stream(self):
 * 		while self.wantSize > 0:             # <<<<<<<<<<<<<<
 * 			ng = min(self.wantBlockSize, self.wantSize)
 * 			self.wantSize -= ng
 */
  while (1) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __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, 1063, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!__pyx_t_3) break;

    /* "gnocis/sequences.pyx":1064
 * 	def stream(self):
 * 		while self.wantSize > 0:
 * 			ng = min(self.wantBlockSize, self.wantSize)             # <<<<<<<<<<<<<<
 * 			self.wantSize -= ng
 * 			yield self.model.generate(ng).seq
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantBlockSize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_3) {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_4 = __pyx_t_2;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_4 = __pyx_t_1;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_4;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_ng);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ng, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":1065
 * 		while self.wantSize > 0:
 * 			ng = min(self.wantBlockSize, self.wantSize)
 * 			self.wantSize -= ng             # <<<<<<<<<<<<<<
 * 			yield self.model.generate(ng).seq
 * 
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyNumber_InPlaceSubtract(__pyx_t_2, __pyx_cur_scope->__pyx_v_ng); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantSize, __pyx_t_4) < 0) __PYX_ERR(0, 1065, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "gnocis/sequences.pyx":1066
 * 			ng = min(self.wantBlockSize, self.wantSize)
 * 			self.wantSize -= ng
 * 			yield self.model.generate(ng).seq             # <<<<<<<<<<<<<<
 * 
 * # Represents stream of 2bit sequences.
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_generate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    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_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_cur_scope->__pyx_v_ng) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_cur_scope->__pyx_v_ng);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1066, __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_seq); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __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;
    __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, 1066, __pyx_L1_error)
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":1062
 * 		return self.__str__()
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		while self.wantSize > 0:
 * 			ng = min(self.wantBlockSize, self.wantSize)
 */

  /* 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_5);
  __Pyx_AddTraceback("stream", __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;
}

/* "gnocis/sequences.pyx":1071
 * class sequenceStreamGenerator(sequenceStream):
 * 
 * 	def __init__(self, model, wantBlockSize, wantN, wantSize):             # <<<<<<<<<<<<<<
 * 		self.model = model
 * 		self.wantN = wantN
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_23sequenceStreamGenerator_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_model = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  PyObject *__pyx_v_wantN = 0;
  PyObject *__pyx_v_wantSize = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_model,&__pyx_n_s_wantBlockSize,&__pyx_n_s_wantN,&__pyx_n_s_wantSize,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_model)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, 1); __PYX_ERR(0, 1071, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, 2); __PYX_ERR(0, 1071, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantN)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, 3); __PYX_ERR(0, 1071, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantSize)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, 4); __PYX_ERR(0, 1071, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1071, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_self = values[0];
    __pyx_v_model = values[1];
    __pyx_v_wantBlockSize = values[2];
    __pyx_v_wantN = values[3];
    __pyx_v_wantSize = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1071, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGenerator.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator___init__(__pyx_self, __pyx_v_self, __pyx_v_model, __pyx_v_wantBlockSize, __pyx_v_wantN, __pyx_v_wantSize);

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

static PyObject *__pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_model, PyObject *__pyx_v_wantBlockSize, PyObject *__pyx_v_wantN, PyObject *__pyx_v_wantSize) {
  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);

  /* "gnocis/sequences.pyx":1072
 * 
 * 	def __init__(self, model, wantBlockSize, wantN, wantSize):
 * 		self.model = model             # <<<<<<<<<<<<<<
 * 		self.wantN = wantN
 * 		self.wantSize = wantSize
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_model, __pyx_v_model) < 0) __PYX_ERR(0, 1072, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1073
 * 	def __init__(self, model, wantBlockSize, wantN, wantSize):
 * 		self.model = model
 * 		self.wantN = wantN             # <<<<<<<<<<<<<<
 * 		self.wantSize = wantSize
 * 		self.wantBlockSize = wantBlockSize
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wantN, __pyx_v_wantN) < 0) __PYX_ERR(0, 1073, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1074
 * 		self.model = model
 * 		self.wantN = wantN
 * 		self.wantSize = wantSize             # <<<<<<<<<<<<<<
 * 		self.wantBlockSize = wantBlockSize
 * 		self.name = str(model)
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wantSize, __pyx_v_wantSize) < 0) __PYX_ERR(0, 1074, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1075
 * 		self.wantN = wantN
 * 		self.wantSize = wantSize
 * 		self.wantBlockSize = wantBlockSize             # <<<<<<<<<<<<<<
 * 		self.name = str(model)
 * 
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wantBlockSize, __pyx_v_wantBlockSize) < 0) __PYX_ERR(0, 1075, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1076
 * 		self.wantSize = wantSize
 * 		self.wantBlockSize = wantBlockSize
 * 		self.name = str(model)             # <<<<<<<<<<<<<<
 * 
 * 	def __iter__(self):
 */
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_model); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_name, __pyx_t_1) < 0) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1071
 * class sequenceStreamGenerator(sequenceStream):
 * 
 * 	def __init__(self, model, wantBlockSize, wantN, wantSize):             # <<<<<<<<<<<<<<
 * 		self.model = model
 * 		self.wantN = wantN
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGenerator.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_23sequenceStreamGenerator_4generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":1078
 * 		self.name = str(model)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_23sequenceStreamGenerator_3__iter__ = {"__iter__", (PyCFunction)__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_3__iter__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_3__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator_2__iter__(__pyx_self, ((PyObject *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator_2__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iter__", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_29___iter__(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_29___iter__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1078, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__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_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_23sequenceStreamGenerator_4generator8, __pyx_codeobj__30, (PyObject *) __pyx_cur_scope, __pyx_n_s_iter, __pyx_n_s_sequenceStreamGenerator___iter, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 1078, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGenerator.__iter__", __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_6gnocis_9sequences_23sequenceStreamGenerator_4generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 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, 1078, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1079
 * 
 * 	def __iter__(self):
 * 		seed = random.randint(0, 0xFFFFFFFF)             # <<<<<<<<<<<<<<
 * 		random.seed(seed)
 * 		for i in range(self.wantN):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_random); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_randint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1079, __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_seed = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1080
 * 	def __iter__(self):
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)             # <<<<<<<<<<<<<<
 * 		for i in range(self.wantN):
 * 			yield sequenceStreamGeneratorSequence(model = self.model, wantBlockSize = self.wantBlockSize, wantSize = self.wantSize, number = (i+1), seed = seed)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_seed) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_seed);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1080, __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;

  /* "gnocis/sequences.pyx":1081
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		for i in range(self.wantN):             # <<<<<<<<<<<<<<
 * 			yield sequenceStreamGeneratorSequence(model = self.model, wantBlockSize = self.wantBlockSize, wantSize = self.wantSize, number = (i+1), seed = seed)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantN); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1081, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1081, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1081, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1081, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1081, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1081, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_5(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1081, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1082
 * 		random.seed(seed)
 * 		for i in range(self.wantN):
 * 			yield sequenceStreamGeneratorSequence(model = self.model, wantBlockSize = self.wantBlockSize, wantSize = self.wantSize, number = (i+1), seed = seed)             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_latin1_sequenceStreamGeneratorSequence_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_model); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_model, __pyx_t_6) < 0) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantBlockSize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_wantBlockSize, __pyx_t_6) < 0) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_wantSize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_wantSize, __pyx_t_6) < 0) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_cur_scope->__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_number, __pyx_t_6) < 0) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seed, __pyx_cur_scope->__pyx_v_seed) < 0) __PYX_ERR(0, 1082, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_5;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_5 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1082, __pyx_L1_error)

    /* "gnocis/sequences.pyx":1081
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		for i in range(self.wantN):             # <<<<<<<<<<<<<<
 * 			yield sequenceStreamGeneratorSequence(model = self.model, wantBlockSize = self.wantBlockSize, wantSize = self.wantSize, number = (i+1), seed = seed)
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "gnocis/sequences.pyx":1078
 * 		self.name = str(model)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 */

  /* 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("__iter__", __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;
}

/* "gnocis/sequences.pyx":1084
 * 			yield sequenceStreamGeneratorSequence(model = self.model, wantBlockSize = self.wantBlockSize, wantSize = self.wantSize, number = (i+1), seed = seed)
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Generator sequence stream<%s>'%str(self.model)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_6__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_23sequenceStreamGenerator_6__str__ = {"__str__", (PyCFunction)__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_6__str__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_6__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator_5__str__(__pyx_self, ((PyObject *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":1085
 * 
 * 	def __str__(self):
 * 		return 'Generator sequence stream<%s>'%str(self.model)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_model); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_Generator_sequence_stream_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __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;

  /* "gnocis/sequences.pyx":1084
 * 			yield sequenceStreamGeneratorSequence(model = self.model, wantBlockSize = self.wantBlockSize, wantSize = self.wantSize, number = (i+1), seed = seed)
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Generator sequence stream<%s>'%str(self.model)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGenerator.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1087
 * 		return 'Generator sequence stream<%s>'%str(self.model)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_8__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_23sequenceStreamGenerator_8__repr__ = {"__repr__", (PyCFunction)__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_8__repr__, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_23sequenceStreamGenerator_8__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_23sequenceStreamGenerator_7__repr__(__pyx_self, ((PyObject *)__pyx_v_self));

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

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

  /* "gnocis/sequences.pyx":1088
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * # Returns a weighted random choice from a list of tuples of choices and weights.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1088, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1088, __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;

  /* "gnocis/sequences.pyx":1087
 * 		return 'Generator sequence stream<%s>'%str(self.model)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequenceStreamGenerator.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1091
 * 
 * # Returns a weighted random choice from a list of tuples of choices and weights.
 * def weightedRandomChoice(choices):             # <<<<<<<<<<<<<<
 * 	r = random.random()
 * 	cw = 0.0
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_18weightedRandomChoice(PyObject *__pyx_self, PyObject *__pyx_v_choices); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_18weightedRandomChoice = {"weightedRandomChoice", (PyCFunction)__pyx_pw_6gnocis_9sequences_18weightedRandomChoice, METH_O, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_18weightedRandomChoice(PyObject *__pyx_self, PyObject *__pyx_v_choices) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("weightedRandomChoice (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_17weightedRandomChoice(__pyx_self, ((PyObject *)__pyx_v_choices));

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

static PyObject *__pyx_pf_6gnocis_9sequences_17weightedRandomChoice(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_choices) {
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_v_cw = NULL;
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_v_w = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  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("weightedRandomChoice", 0);

  /* "gnocis/sequences.pyx":1092
 * # Returns a weighted random choice from a list of tuples of choices and weights.
 * def weightedRandomChoice(choices):
 * 	r = random.random()             # <<<<<<<<<<<<<<
 * 	cw = 0.0
 * 	for c, w in choices:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_r = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1093
 * def weightedRandomChoice(choices):
 * 	r = random.random()
 * 	cw = 0.0             # <<<<<<<<<<<<<<
 * 	for c, w in choices:
 * 		cw += w
 */
  __Pyx_INCREF(__pyx_float_0_0);
  __pyx_v_cw = __pyx_float_0_0;

  /* "gnocis/sequences.pyx":1094
 * 	r = random.random()
 * 	cw = 0.0
 * 	for c, w in choices:             # <<<<<<<<<<<<<<
 * 		cw += w
 * 		if cw >= r:
 */
  if (likely(PyList_CheckExact(__pyx_v_choices)) || PyTuple_CheckExact(__pyx_v_choices)) {
    __pyx_t_1 = __pyx_v_choices; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_choices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1094, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1094, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1094, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1094, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1094, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1094, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_5(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1094, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1094, __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_6 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1094, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1094, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1094, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      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, 1094, __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, 1094, __pyx_L1_error)
      __pyx_L6_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_w, __pyx_t_6);
    __pyx_t_6 = 0;

    /* "gnocis/sequences.pyx":1095
 * 	cw = 0.0
 * 	for c, w in choices:
 * 		cw += w             # <<<<<<<<<<<<<<
 * 		if cw >= r:
 * 			return c
 */
    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_cw, __pyx_v_w); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1095, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_cw, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1096
 * 	for c, w in choices:
 * 		cw += w
 * 		if cw >= r:             # <<<<<<<<<<<<<<
 * 			return c
 * 	raise Exception('Choice weights sum up to more than 1.0')
 */
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_cw, __pyx_v_r, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1096, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1096, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_9) {

      /* "gnocis/sequences.pyx":1097
 * 		cw += w
 * 		if cw >= r:
 * 			return c             # <<<<<<<<<<<<<<
 * 	raise Exception('Choice weights sum up to more than 1.0')
 * 
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_c);
      __pyx_r = __pyx_v_c;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;

      /* "gnocis/sequences.pyx":1096
 * 	for c, w in choices:
 * 		cw += w
 * 		if cw >= r:             # <<<<<<<<<<<<<<
 * 			return c
 * 	raise Exception('Choice weights sum up to more than 1.0')
 */
    }

    /* "gnocis/sequences.pyx":1094
 * 	r = random.random()
 * 	cw = 0.0
 * 	for c, w in choices:             # <<<<<<<<<<<<<<
 * 		cw += w
 * 		if cw >= r:
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1098
 * 		if cw >= r:
 * 			return c
 * 	raise Exception('Choice weights sum up to more than 1.0')             # <<<<<<<<<<<<<<
 * 
 * # Represents sequence streams
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1098, __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, 1098, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1091
 * 
 * # Returns a weighted random choice from a list of tuples of choices and weights.
 * def weightedRandomChoice(choices):             # <<<<<<<<<<<<<<
 * 	r = random.random()
 * 	cw = 0.0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("gnocis.sequences.weightedRandomChoice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XDECREF(__pyx_v_cw);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1106
 * 	"""
 * 
 * 	def __init__(self):             # <<<<<<<<<<<<<<
 * 		pass
 * 
 */

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

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

static int __pyx_pf_6gnocis_9sequences_17sequenceGenerator___init__(CYTHON_UNUSED struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);

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

/* "gnocis/sequences.pyx":1110
 * 
 * 	# Generates a set of sequences
 * 	def generateSet(self, n, length):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param n: Number of sequences to generate.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_3generateSet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_17sequenceGenerator_2generateSet[] = "\n\t\t:param n: Number of sequences to generate.\n\t\t:param length: Length of each sequence to generate.\n\t\t:type n: int\n\t\t:type length: int\n\t\t\n\t\t:return: Sequence set of `n` randomly generated sequences, each of length `length`.\n\t\t:rtype: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_3generateSet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_length = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("generateSet (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,&__pyx_n_s_length,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_length)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("generateSet", 1, 2, 2, 1); __PYX_ERR(0, 1110, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "generateSet") < 0)) __PYX_ERR(0, 1110, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_n = values[0];
    __pyx_v_length = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("generateSet", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1110, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.generateSet", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_17sequenceGenerator_2generateSet(((struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *)__pyx_v_self), __pyx_v_n, __pyx_v_length);

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

static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_2generateSet(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_length) {
  PyObject *__pyx_v_seed = NULL;
  CYTHON_UNUSED PyObject *__pyx_9genexpr26__pyx_v__ = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  Py_UCS4 __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("generateSet", 0);

  /* "gnocis/sequences.pyx":1120
 * 		:rtype: sequences
 * 		"""
 * 		seed = random.randint(0, 0xFFFFFFFF)             # <<<<<<<<<<<<<<
 * 		random.seed(seed)
 * 		return sequences('Generated set <Sequences: %d; Length each: %d; Model: %s; Seed: %d>'%(n, length, str(self), seed), [ self.generate(length) for _ in range(n) ])
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_random); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_randint); 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_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_seed = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1121
 * 		"""
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)             # <<<<<<<<<<<<<<
 * 		return sequences('Generated set <Sequences: %d; Length each: %d; Model: %s; Seed: %d>'%(n, length, str(self), seed), [ self.generate(length) for _ in range(n) ])
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_seed) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_seed);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __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;

  /* "gnocis/sequences.pyx":1122
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		return sequences('Generated set <Sequences: %d; Length each: %d; Model: %s; Seed: %d>'%(n, length, str(self), seed), [ self.generate(length) for _ in range(n) ])             # <<<<<<<<<<<<<<
 * 
 * 	# Generates a stream of sequences
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_5 = 127;
  __Pyx_INCREF(__pyx_kp_u_Generated_set_Sequences);
  __pyx_t_4 += 26;
  __Pyx_GIVEREF(__pyx_kp_u_Generated_set_Sequences);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Generated_set_Sequences);
  __pyx_t_3 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_n), __pyx_n_u_d); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_kp_u_Length_each);
  __pyx_t_4 += 15;
  __Pyx_GIVEREF(__pyx_kp_u_Length_each);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_Length_each);
  __pyx_t_3 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_length), __pyx_n_u_d); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_kp_u_Model);
  __pyx_t_4 += 9;
  __Pyx_GIVEREF(__pyx_kp_u_Model);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_Model);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_kp_u_Seed);
  __pyx_t_4 += 8;
  __Pyx_GIVEREF(__pyx_kp_u_Seed);
  PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u_Seed);
  __pyx_t_3 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_seed), __pyx_n_u_d); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_kp_u_);
  __pyx_t_4 += 1;
  __Pyx_GIVEREF(__pyx_kp_u_);
  PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_kp_u_);
  __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_1, 9, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1122, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1122, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
      __pyx_t_6 = __pyx_t_2; __Pyx_INCREF(__pyx_t_6); __pyx_t_4 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1122, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1122, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_6))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_6)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1122, __pyx_L5_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1122, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1122, __pyx_L5_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1122, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_7(__pyx_t_6);
        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, 1122, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_9genexpr26__pyx_v__, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_generate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1122, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_2 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_v_length) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_length);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1122, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 1122, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_9genexpr26__pyx_v__); __pyx_9genexpr26__pyx_v__ = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr26__pyx_v__); __pyx_9genexpr26__pyx_v__ = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
  __pyx_t_3 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":1110
 * 
 * 	# Generates a set of sequences
 * 	def generateSet(self, n, length):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param n: Number of sequences to generate.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.generateSet", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seed);
  __Pyx_XDECREF(__pyx_9genexpr26__pyx_v__);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1125
 * 
 * 	# Generates a stream of sequences
 * 	def generateStream(self, n, length, wantBlockSize = 5000):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param n: Number of sequences to generate.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_5generateStream(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_17sequenceGenerator_4generateStream[] = "\n\t\t:param n: Number of sequences to generate.\n\t\t:param length: Length of each sequence to generate.\n\t\t:param wantBlockSize: Desired block size.\n\t\t:type n: int\n\t\t:type length: int\n\t\t:type wantBlockSize: int, optional\n\t\t\n\t\t:return: Sequence stream of `n` randomly generated sequences, each of length `length`.\n\t\t:rtype: sequencesStream\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_5generateStream(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_length = 0;
  PyObject *__pyx_v_wantBlockSize = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("generateStream (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,&__pyx_n_s_length,&__pyx_n_s_wantBlockSize,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)__pyx_int_5000);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_length)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("generateStream", 0, 2, 3, 1); __PYX_ERR(0, 1125, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wantBlockSize);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "generateStream") < 0)) __PYX_ERR(0, 1125, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_n = values[0];
    __pyx_v_length = values[1];
    __pyx_v_wantBlockSize = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("generateStream", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1125, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.generateStream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_17sequenceGenerator_4generateStream(((struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *)__pyx_v_self), __pyx_v_n, __pyx_v_length, __pyx_v_wantBlockSize);

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

static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_4generateStream(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_length, PyObject *__pyx_v_wantBlockSize) {
  PyObject *__pyx_v_seed = NULL;
  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("generateStream", 0);

  /* "gnocis/sequences.pyx":1137
 * 		:rtype: sequencesStream
 * 		"""
 * 		seed = random.randint(0, 0xFFFFFFFF)             # <<<<<<<<<<<<<<
 * 		random.seed(seed)
 * 		return sequenceStreamGenerator(model = self, wantBlockSize = wantBlockSize, wantN = n, wantSize = length)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_random); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_randint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_seed = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1138
 * 		"""
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)             # <<<<<<<<<<<<<<
 * 		return sequenceStreamGenerator(model = self, wantBlockSize = wantBlockSize, wantN = n, wantSize = length)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_seed) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_seed);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1138, __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;

  /* "gnocis/sequences.pyx":1139
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		return sequenceStreamGenerator(model = self, wantBlockSize = wantBlockSize, wantN = n, wantSize = length)             # <<<<<<<<<<<<<<
 * 
 * 	# Generates sequences to a FASTA-file
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_latin1_sequenceStreamGenerator); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_model, ((PyObject *)__pyx_v_self)) < 0) __PYX_ERR(0, 1139, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_wantBlockSize, __pyx_v_wantBlockSize) < 0) __PYX_ERR(0, 1139, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_wantN, __pyx_v_n) < 0) __PYX_ERR(0, 1139, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_wantSize, __pyx_v_length) < 0) __PYX_ERR(0, 1139, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1139, __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;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":1125
 * 
 * 	# Generates a stream of sequences
 * 	def generateStream(self, n, length, wantBlockSize = 5000):             # <<<<<<<<<<<<<<
 * 		"""
 * 		:param n: Number of sequences to generate.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.generateStream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1142
 * 
 * 	# Generates sequences to a FASTA-file
 * 	def generateFASTA(self, str path, int n, int length):             # <<<<<<<<<<<<<<
 * 		""" Generates sequences and saves them to a FASTA file.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_7generateFASTA(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gnocis_9sequences_17sequenceGenerator_6generateFASTA[] = " Generates sequences and saves them to a FASTA file.\n\t\t\n\t\t:param path: Output path.\n\t\t:param n: Number of sequences to generate.\n\t\t:param length: Length of each sequence to generate.\n\t\t:type path: str\n\t\t:type n: int\n\t\t:type length: int\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_7generateFASTA(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_path = 0;
  int __pyx_v_n;
  int __pyx_v_length;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("generateFASTA (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_path,&__pyx_n_s_n,&__pyx_n_s_length,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("generateFASTA", 1, 3, 3, 1); __PYX_ERR(0, 1142, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_length)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("generateFASTA", 1, 3, 3, 2); __PYX_ERR(0, 1142, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "generateFASTA") < 0)) __PYX_ERR(0, 1142, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_path = ((PyObject*)values[0]);
    __pyx_v_n = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1142, __pyx_L3_error)
    __pyx_v_length = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_length == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1142, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("generateFASTA", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1142, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.generateFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyUnicode_Type), 1, "path", 1))) __PYX_ERR(0, 1142, __pyx_L1_error)
  __pyx_r = __pyx_pf_6gnocis_9sequences_17sequenceGenerator_6generateFASTA(((struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *)__pyx_v_self), __pyx_v_path, __pyx_v_n, __pyx_v_length);

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

static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_6generateFASTA(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self, PyObject *__pyx_v_path, int __pyx_v_n, int __pyx_v_length) {
  CYTHON_UNUSED int __pyx_v_i;
  struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v_seq = 0;
  PyObject *__pyx_v_seed = NULL;
  PyObject *__pyx_v_fOut = 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;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  int __pyx_t_10;
  int __pyx_t_11;
  Py_ssize_t __pyx_t_12;
  Py_UCS4 __pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  int __pyx_t_17;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  int __pyx_t_20;
  int __pyx_t_21;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("generateFASTA", 0);

  /* "gnocis/sequences.pyx":1154
 * 		cdef int i
 * 		cdef sequence seq
 * 		seed = random.randint(0, 0xFFFFFFFF)             # <<<<<<<<<<<<<<
 * 		random.seed(seed)
 * 		with open(path, 'w') as fOut:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_random); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_randint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_seed = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1155
 * 		cdef sequence seq
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)             # <<<<<<<<<<<<<<
 * 		with open(path, 'w') as fOut:
 * 			#for seq in self.sequences:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_seed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_seed) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_seed);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __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;

  /* "gnocis/sequences.pyx":1156
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		with open(path, 'w') as fOut:             # <<<<<<<<<<<<<<
 * 			#for seq in self.sequences:
 * 			for i in range(n):
 */
  /*with:*/ {
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_path);
    __Pyx_GIVEREF(__pyx_v_path);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_path);
    __Pyx_INCREF(__pyx_n_u_w);
    __Pyx_GIVEREF(__pyx_n_u_w);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_w);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1156, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1156, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        /*try:*/ {
          __pyx_v_fOut = __pyx_t_2;
          __pyx_t_2 = 0;

          /* "gnocis/sequences.pyx":1158
 * 		with open(path, 'w') as fOut:
 * 			#for seq in self.sequences:
 * 			for i in range(n):             # <<<<<<<<<<<<<<
 * 				seq = self.generate(length)
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))
 */
          __pyx_t_9 = __pyx_v_n;
          __pyx_t_10 = __pyx_t_9;
          for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
            __pyx_v_i = __pyx_t_11;

            /* "gnocis/sequences.pyx":1159
 * 			#for seq in self.sequences:
 * 			for i in range(n):
 * 				seq = self.generate(length)             # <<<<<<<<<<<<<<
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))
 * 
 */
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_generate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1159, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1159, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_5 = NULL;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
              }
            }
            __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1159, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6gnocis_9sequences_sequence))))) __PYX_ERR(0, 1159, __pyx_L7_error)
            __Pyx_XDECREF_SET(__pyx_v_seq, ((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_t_2));
            __pyx_t_2 = 0;

            /* "gnocis/sequences.pyx":1160
 * 			for i in range(n):
 * 				seq = self.generate(length)
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))             # <<<<<<<<<<<<<<
 * 
 * # Markov chain sequence model.
 */
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_fOut, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_12 = 0;
            __pyx_t_13 = 127;
            __Pyx_INCREF(__pyx_kp_u_);
            __pyx_t_12 += 1;
            __Pyx_GIVEREF(__pyx_kp_u_);
            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_);
            if (unlikely(__pyx_v_seq->name == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "replace");
              __PYX_ERR(0, 1160, __pyx_L7_error)
            }
            __pyx_t_5 = PyUnicode_Replace(__pyx_v_seq->name, __pyx_kp_u__16, __pyx_n_u__17, -1L); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_13;
            __pyx_t_12 += __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__19);
            __pyx_t_12 += 1;
            __Pyx_GIVEREF(__pyx_kp_u__19);
            PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__19);
            __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_re); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_sub); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_re); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_DOTALL); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_14 = NULL;
            __pyx_t_17 = 0;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
              __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
              if (likely(__pyx_t_14)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
                __Pyx_INCREF(__pyx_t_14);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_15, function);
                __pyx_t_17 = 1;
              }
            }
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_15)) {
              PyObject *__pyx_temp[6] = {__pyx_t_14, __pyx_kp_u_65, __pyx_kp_u_1, __pyx_v_seq->seq, __pyx_int_0, __pyx_t_16};
              __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_17, 5+__pyx_t_17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1160, __pyx_L7_error)
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
              PyObject *__pyx_temp[6] = {__pyx_t_14, __pyx_kp_u_65, __pyx_kp_u_1, __pyx_v_seq->seq, __pyx_int_0, __pyx_t_16};
              __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_17, 5+__pyx_t_17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1160, __pyx_L7_error)
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            } else
            #endif
            {
              __pyx_t_18 = PyTuple_New(5+__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1160, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_18);
              if (__pyx_t_14) {
                __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_14); __pyx_t_14 = NULL;
              }
              __Pyx_INCREF(__pyx_kp_u_65);
              __Pyx_GIVEREF(__pyx_kp_u_65);
              PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_17, __pyx_kp_u_65);
              __Pyx_INCREF(__pyx_kp_u_1);
              __Pyx_GIVEREF(__pyx_kp_u_1);
              PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_17, __pyx_kp_u_1);
              __Pyx_INCREF(__pyx_v_seq->seq);
              __Pyx_GIVEREF(__pyx_v_seq->seq);
              PyTuple_SET_ITEM(__pyx_t_18, 2+__pyx_t_17, __pyx_v_seq->seq);
              __Pyx_INCREF(__pyx_int_0);
              __Pyx_GIVEREF(__pyx_int_0);
              PyTuple_SET_ITEM(__pyx_t_18, 3+__pyx_t_17, __pyx_int_0);
              __Pyx_GIVEREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_18, 4+__pyx_t_17, __pyx_t_16);
              __pyx_t_16 = 0;
              __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1160, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            }
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_15 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_t_5), __pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15);
            __Pyx_GIVEREF(__pyx_t_15);
            PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_15);
            __pyx_t_15 = 0;
            __Pyx_INCREF(__pyx_kp_u__19);
            __pyx_t_12 += 1;
            __Pyx_GIVEREF(__pyx_kp_u__19);
            PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u__19);
            __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = NULL;
            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_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_15);
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1160, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          }

          /* "gnocis/sequences.pyx":1156
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		with open(path, 'w') as fOut:             # <<<<<<<<<<<<<<
 * 			#for seq in self.sequences:
 * 			for i in range(n):
 */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 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;
        /*except:*/ {
          __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.generateFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_15) < 0) __PYX_ERR(0, 1156, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_1 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_3, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1156, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1156, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (__pyx_t_20 < 0) __PYX_ERR(0, 1156, __pyx_L9_except_error)
          __pyx_t_21 = ((!(__pyx_t_20 != 0)) != 0);
          if (__pyx_t_21) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_15);
            __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_15 = 0; 
            __PYX_ERR(0, 1156, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__20, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1156, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L18;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L18:;
  }

  /* "gnocis/sequences.pyx":1142
 * 
 * 	# Generates sequences to a FASTA-file
 * 	def generateFASTA(self, str path, int n, int length):             # <<<<<<<<<<<<<<
 * 		""" Generates sequences and saves them to a FASTA file.
 * 
 */

  /* 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_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.generateFASTA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_seq);
  __Pyx_XDECREF(__pyx_v_seed);
  __Pyx_XDECREF(__pyx_v_fOut);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_17sequenceGenerator_8__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_8__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = ()             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __Pyx_INCREF(__pyx_empty_tuple);
  __pyx_v_state = __pyx_empty_tuple;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v__dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "(tree fragment)":7
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_2 = (__pyx_v__dict != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = False
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = False             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, None), state
 */
  /*else*/ {
    __pyx_v_use_setstate = 0;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = False
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, None), state
 *     else:
 */
  __pyx_t_3 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":13
 *         use_setstate = False
 *     if use_setstate:
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_sequenceGenerator); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_222419149);
    __Pyx_GIVEREF(__pyx_int_222419149);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = False
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, None), state
 *     else:
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequenceGenerator__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_sequenceGenerator); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_222419149);
    __Pyx_GIVEREF(__pyx_int_222419149);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequenceGenerator__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_17sequenceGenerator_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_17sequenceGenerator_10__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_17sequenceGenerator_10__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_sequenceGenerator__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceGenerator__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_sequenceGenerator, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_sequenceGenerator__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.sequenceGenerator.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1179
 * 	"""
 * 
 * 	def __init__(self, trainingSequences, degree = 4, pseudoCounts = True, addReverseComplements = True):             # <<<<<<<<<<<<<<
 * 		self.degree = degree
 * 		self.pseudoCounts = pseudoCounts
 */

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_trainingSequences = 0;
  PyObject *__pyx_v_degree = 0;
  PyObject *__pyx_v_pseudoCounts = 0;
  PyObject *__pyx_v_addReverseComplements = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trainingSequences,&__pyx_n_s_degree,&__pyx_n_s_pseudoCounts,&__pyx_n_s_addReverseComplements,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_4);
    values[2] = ((PyObject *)Py_True);
    values[3] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_trainingSequences)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_degree);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pseudoCounts);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_addReverseComplements);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1179, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_trainingSequences = values[0];
    __pyx_v_degree = values[1];
    __pyx_v_pseudoCounts = values[2];
    __pyx_v_addReverseComplements = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1179, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain___init__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), __pyx_v_trainingSequences, __pyx_v_degree, __pyx_v_pseudoCounts, __pyx_v_addReverseComplements);

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain___init__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_trainingSequences, PyObject *__pyx_v_degree, PyObject *__pyx_v_pseudoCounts, PyObject *__pyx_v_addReverseComplements) {
  CYTHON_UNUSED PyObject *__pyx_9genexpr27__pyx_v__ = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  bool __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  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_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF(__pyx_v_trainingSequences);

  /* "gnocis/sequences.pyx":1180
 * 
 * 	def __init__(self, trainingSequences, degree = 4, pseudoCounts = True, addReverseComplements = True):
 * 		self.degree = degree             # <<<<<<<<<<<<<<
 * 		self.pseudoCounts = pseudoCounts
 * 		self.addReverseComplements = addReverseComplements
 */
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_degree); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1180, __pyx_L1_error)
  __pyx_v_self->degree = __pyx_t_1;

  /* "gnocis/sequences.pyx":1181
 * 	def __init__(self, trainingSequences, degree = 4, pseudoCounts = True, addReverseComplements = True):
 * 		self.degree = degree
 * 		self.pseudoCounts = pseudoCounts             # <<<<<<<<<<<<<<
 * 		self.addReverseComplements = addReverseComplements
 * 		self.trainingSequences = trainingSequences
 */
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_pseudoCounts); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1181, __pyx_L1_error)
  __pyx_v_self->pseudoCounts = __pyx_t_1;

  /* "gnocis/sequences.pyx":1182
 * 		self.degree = degree
 * 		self.pseudoCounts = pseudoCounts
 * 		self.addReverseComplements = addReverseComplements             # <<<<<<<<<<<<<<
 * 		self.trainingSequences = trainingSequences
 * 		self.nGenerated = 0
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_addReverseComplements); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1182, __pyx_L1_error)
  __pyx_v_self->addReverseComplements = __pyx_t_2;

  /* "gnocis/sequences.pyx":1183
 * 		self.pseudoCounts = pseudoCounts
 * 		self.addReverseComplements = addReverseComplements
 * 		self.trainingSequences = trainingSequences             # <<<<<<<<<<<<<<
 * 		self.nGenerated = 0
 * 		self.prepared = False
 */
  __Pyx_INCREF(__pyx_v_trainingSequences);
  __Pyx_GIVEREF(__pyx_v_trainingSequences);
  __Pyx_GOTREF(__pyx_v_self->trainingSequences);
  __Pyx_DECREF(__pyx_v_self->trainingSequences);
  __pyx_v_self->trainingSequences = __pyx_v_trainingSequences;

  /* "gnocis/sequences.pyx":1184
 * 		self.addReverseComplements = addReverseComplements
 * 		self.trainingSequences = trainingSequences
 * 		self.nGenerated = 0             # <<<<<<<<<<<<<<
 * 		self.prepared = False
 * 		# Initialize spectrum
 */
  __pyx_v_self->nGenerated = 0;

  /* "gnocis/sequences.pyx":1185
 * 		self.trainingSequences = trainingSequences
 * 		self.nGenerated = 0
 * 		self.prepared = False             # <<<<<<<<<<<<<<
 * 		# Initialize spectrum
 * 		self.spectrum = [ 0 for _ in range( 4 ** (degree+1) ) ]
 */
  __pyx_v_self->prepared = 0;

  /* "gnocis/sequences.pyx":1187
 * 		self.prepared = False
 * 		# Initialize spectrum
 * 		self.spectrum = [ 0 for _ in range( 4 ** (degree+1) ) ]             # <<<<<<<<<<<<<<
 * 		# Train
 * 		if trainingSequences == None:
 */
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1187, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_v_degree, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1187, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyNumber_Power(__pyx_int_4, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1187, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1187, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
      __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1187, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1187, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1187, __pyx_L5_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1187, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1187, __pyx_L5_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1187, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_7(__pyx_t_5);
        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, 1187, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_XDECREF_SET(__pyx_9genexpr27__pyx_v__, __pyx_t_4);
      __pyx_t_4 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_int_0))) __PYX_ERR(0, 1187, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_9genexpr27__pyx_v__); __pyx_9genexpr27__pyx_v__ = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr27__pyx_v__); __pyx_9genexpr27__pyx_v__ = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->spectrum);
  __Pyx_DECREF(__pyx_v_self->spectrum);
  __pyx_v_self->spectrum = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":1189
 * 		self.spectrum = [ 0 for _ in range( 4 ** (degree+1) ) ]
 * 		# Train
 * 		if trainingSequences == None:             # <<<<<<<<<<<<<<
 * 			return
 * 		if isinstance(trainingSequences, str):
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_trainingSequences, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_8) {

    /* "gnocis/sequences.pyx":1190
 * 		# Train
 * 		if trainingSequences == None:
 * 			return             # <<<<<<<<<<<<<<
 * 		if isinstance(trainingSequences, str):
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 */
    __pyx_r = 0;
    goto __pyx_L0;

    /* "gnocis/sequences.pyx":1189
 * 		self.spectrum = [ 0 for _ in range( 4 ** (degree+1) ) ]
 * 		# Train
 * 		if trainingSequences == None:             # <<<<<<<<<<<<<<
 * 			return
 * 		if isinstance(trainingSequences, str):
 */
  }

  /* "gnocis/sequences.pyx":1191
 * 		if trainingSequences == None:
 * 			return
 * 		if isinstance(trainingSequences, str):             # <<<<<<<<<<<<<<
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':
 */
  __pyx_t_8 = PyUnicode_Check(__pyx_v_trainingSequences); 
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (__pyx_t_9) {

    /* "gnocis/sequences.pyx":1192
 * 			return
 * 		if isinstance(trainingSequences, str):
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)             # <<<<<<<<<<<<<<
 * 		if type(trainingSequences).__name__ == 'genome':
 * 			trainingSequences = trainingSequences.sequences
 */
    __pyx_t_3 = __pyx_f_6gnocis_9sequences_getSequenceStreamFromPath(__pyx_v_trainingSequences, 0, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_trainingSequences, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1191
 * 		if trainingSequences == None:
 * 			return
 * 		if isinstance(trainingSequences, str):             # <<<<<<<<<<<<<<
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':
 */
  }

  /* "gnocis/sequences.pyx":1193
 * 		if isinstance(trainingSequences, str):
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':             # <<<<<<<<<<<<<<
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_trainingSequences)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_n_u_genome, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_9) {

    /* "gnocis/sequences.pyx":1194
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':
 * 			trainingSequences = trainingSequences.sequences             # <<<<<<<<<<<<<<
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 * 			self._trainOnSequences(trainingSequences)
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_trainingSequences, __pyx_n_s_sequences); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_trainingSequences, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1193
 * 		if isinstance(trainingSequences, str):
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':             # <<<<<<<<<<<<<<
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 */
  }

  /* "gnocis/sequences.pyx":1195
 * 		if type(trainingSequences).__name__ == 'genome':
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):             # <<<<<<<<<<<<<<
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()
 */
  __pyx_t_8 = __Pyx_TypeCheck(__pyx_v_trainingSequences, __pyx_ptype_6gnocis_9sequences_sequences); 
  __pyx_t_10 = (__pyx_t_8 != 0);
  if (!__pyx_t_10) {
  } else {
    __pyx_t_9 = __pyx_t_10;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_10 = PyList_Check(__pyx_v_trainingSequences); 
  __pyx_t_8 = (__pyx_t_10 != 0);
  __pyx_t_9 = __pyx_t_8;
  __pyx_L13_bool_binop_done:;
  if (__pyx_t_9) {

    /* "gnocis/sequences.pyx":1196
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 * 			self._trainOnSequences(trainingSequences)             # <<<<<<<<<<<<<<
 * 			self._prepare()
 * 		elif isinstance(trainingSequences, sequenceStream):
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trainOnSequences); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_trainingSequences) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_trainingSequences);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1197
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()             # <<<<<<<<<<<<<<
 * 		elif isinstance(trainingSequences, sequenceStream):
 * 			self._trainOnSequenceStream(trainingSequences)
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prepare); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1195
 * 		if type(trainingSequences).__name__ == 'genome':
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):             # <<<<<<<<<<<<<<
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()
 */
    goto __pyx_L12;
  }

  /* "gnocis/sequences.pyx":1198
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()
 * 		elif isinstance(trainingSequences, sequenceStream):             # <<<<<<<<<<<<<<
 * 			self._trainOnSequenceStream(trainingSequences)
 * 			self._prepare()
 */
  __pyx_t_9 = __Pyx_TypeCheck(__pyx_v_trainingSequences, __pyx_ptype_6gnocis_9sequences_sequenceStream); 
  __pyx_t_8 = (__pyx_t_9 != 0);
  if (__pyx_t_8) {

    /* "gnocis/sequences.pyx":1199
 * 			self._prepare()
 * 		elif isinstance(trainingSequences, sequenceStream):
 * 			self._trainOnSequenceStream(trainingSequences)             # <<<<<<<<<<<<<<
 * 			self._prepare()
 * 
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trainOnSequenceStream); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1199, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_trainingSequences) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_trainingSequences);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1199, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1200
 * 		elif isinstance(trainingSequences, sequenceStream):
 * 			self._trainOnSequenceStream(trainingSequences)
 * 			self._prepare()             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prepare); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1200, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1200, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1198
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()
 * 		elif isinstance(trainingSequences, sequenceStream):             # <<<<<<<<<<<<<<
 * 			self._trainOnSequenceStream(trainingSequences)
 * 			self._prepare()
 */
  }
  __pyx_L12:;

  /* "gnocis/sequences.pyx":1179
 * 	"""
 * 
 * 	def __init__(self, trainingSequences, degree = 4, pseudoCounts = True, addReverseComplements = True):             # <<<<<<<<<<<<<<
 * 		self.degree = degree
 * 		self.pseudoCounts = pseudoCounts
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_9genexpr27__pyx_v__);
  __Pyx_XDECREF(__pyx_v_trainingSequences);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1202
 * 			self._prepare()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Markov Chain<Degree: %d; Pseudocounts: %d; Add reverse complements: %s; Training set: %s>'%(self.degree, self.pseudoCounts, 'Yes' if self.addReverseComplements else 'No', self.trainingSequences)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_3__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_3__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_2__str__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_2__str__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__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("__str__", 0);

  /* "gnocis/sequences.pyx":1203
 * 
 * 	def __str__(self):
 * 		return 'Markov Chain<Degree: %d; Pseudocounts: %d; Add reverse complements: %s; Training set: %s>'%(self.degree, self.pseudoCounts, 'Yes' if self.addReverseComplements else 'No', self.trainingSequences)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_Markov_Chain_Degree);
  __pyx_t_2 += 21;
  __Pyx_GIVEREF(__pyx_kp_u_Markov_Chain_Degree);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Markov_Chain_Degree);
  __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_self->degree, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_Pseudocounts);
  __pyx_t_2 += 16;
  __Pyx_GIVEREF(__pyx_kp_u_Pseudocounts);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_Pseudocounts);
  __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_self->pseudoCounts, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __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_INCREF(__pyx_kp_u_Add_reverse_complements);
  __pyx_t_2 += 27;
  __Pyx_GIVEREF(__pyx_kp_u_Add_reverse_complements);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_Add_reverse_complements);
  if ((__pyx_v_self->addReverseComplements != 0)) {
    __Pyx_INCREF(__pyx_n_u_Yes);
    __pyx_t_4 = __pyx_n_u_Yes;
  } else {
    __Pyx_INCREF(__pyx_n_u_No);
    __pyx_t_4 = __pyx_n_u_No;
  }
  __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1203, __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, 5, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_Training_set);
  __pyx_t_2 += 16;
  __Pyx_GIVEREF(__pyx_kp_u_Training_set);
  PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u_Training_set);
  __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_v_self->trainingSequences), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __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, 7, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u_);
  PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_kp_u_);
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 9, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":1202
 * 			self._prepare()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Markov Chain<Degree: %d; Pseudocounts: %d; Add reverse complements: %s; Training set: %s>'%(self.degree, self.pseudoCounts, 'Yes' if self.addReverseComplements else 'No', self.trainingSequences)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1205
 * 		return 'Markov Chain<Degree: %d; Pseudocounts: %d; Add reverse complements: %s; Training set: %s>'%(self.degree, self.pseudoCounts, 'Yes' if self.addReverseComplements else 'No', self.trainingSequences)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_5__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_4__repr__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_4__repr__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "gnocis/sequences.pyx":1206
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * 	# Prepares model for use
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1206, __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;

  /* "gnocis/sequences.pyx":1205
 * 		return 'Markov Chain<Degree: %d; Pseudocounts: %d; Add reverse complements: %s; Training set: %s>'%(self.degree, self.pseudoCounts, 'Yes' if self.addReverseComplements else 'No', self.trainingSequences)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1209
 * 
 * 	# Prepares model for use
 * 	def _prepare(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Prepares model for use.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_7_prepare(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gnocis_9sequences_11MarkovChain_6_prepare[] = "\n\t\tPrepares model for use.\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_7_prepare(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_prepare (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_6_prepare(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_11MarkovChain_8_prepare_2generator24(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":1237
 * 		for ki in range(len(self.probspectrum)):
 * 			kis = ki << 2
 * 			obsT = sum( self.spectrum[ kis | nti ] for nti in range(4) )             # <<<<<<<<<<<<<<
 * 			if obsT > 0:
 * 				self.probspectrum[ki] = [ (nti, self.spectrum[ kis | nti ] / obsT) for nti in range(4) ]
 */

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8_prepare_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_31_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_31_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1237, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_11MarkovChain_8_prepare_2generator24, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_prepare_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 1237, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain._prepare.genexpr", __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_6gnocis_9sequences_11MarkovChain_8_prepare_2generator24(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  long __pyx_t_1;
  long __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 1237, __pyx_L1_error)
  for (__pyx_t_1 = 0; __pyx_t_1 < 4; __pyx_t_1+=1) {
    __pyx_cur_scope->__pyx_v_nti = __pyx_t_1;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1237, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->spectrum == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 1237, __pyx_L1_error)
    }
    __pyx_t_2 = (__pyx_cur_scope->__pyx_outer_scope->__pyx_v_kis | __pyx_cur_scope->__pyx_v_nti);
    __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->spectrum, __pyx_t_2, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __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_1 = __pyx_cur_scope->__pyx_t_0;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1237, __pyx_L1_error)
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("genexpr", __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_6gnocis_9sequences_11MarkovChain_8_prepare_5generator25(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":1246
 * 		self.comparableSpectrum = {}
 * 		for ki in range(len(self.probspectrum)):
 * 			kmer = ''.join( kSpectrumIndex2NT[(ki >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )             # <<<<<<<<<<<<<<
 * 
 * 			self.comparableSpectrum[kmer] =  { nt: self.spectrum[(ki << 2) | kSpectrumNT2Index[nt]] for nt in [ 'A', 'T', 'G', 'C' ] }
 */

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8_prepare_3genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_32_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_32_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1246, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_11MarkovChain_8_prepare_5generator25, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_prepare_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain._prepare.genexpr", __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_6gnocis_9sequences_11MarkovChain_8_prepare_5generator25(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1246, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->degree); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
    __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1246, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1246, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1246, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1246, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1246, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_4(__pyx_t_1);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1246, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_x);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_x, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_kSpectrumIndex2NT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_ki); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1246, __pyx_L1_error) }
    __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->degree - 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyNumber_Subtract(__pyx_t_6, __pyx_cur_scope->__pyx_v_x); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Multiply(__pyx_t_7, __pyx_int_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Rshift(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyInt_AndObjC(__pyx_t_7, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __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("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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;
}

/* "gnocis/sequences.pyx":1209
 * 
 * 	# Prepares model for use
 * 	def _prepare(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Prepares model for use.
 */

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_6_prepare(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *__pyx_cur_scope;
  int __pyx_v_nspectrum;
  int __pyx_v_kiRC;
  int __pyx_v_tki;
  PyObject *__pyx_v_newspectrum = NULL;
  CYTHON_UNUSED int __pyx_v_x;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_nOccT = NULL;
  PyObject *__pyx_v_obsT = NULL;
  PyObject *__pyx_v_kmer = NULL;
  CYTHON_UNUSED Py_ssize_t __pyx_9genexpr28__pyx_v__;
  CYTHON_UNUSED long __pyx_9genexpr29__pyx_v__;
  PyObject *__pyx_gb_6gnocis_9sequences_11MarkovChain_8_prepare_2generator24 = 0;
  long __pyx_9genexpr31__pyx_v_nti;
  long __pyx_9genexpr32__pyx_v_nti;
  PyObject *__pyx_gb_6gnocis_9sequences_11MarkovChain_8_prepare_5generator25 = 0;
  PyObject *__pyx_9genexpr34__pyx_v_nt = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  int __pyx_t_7;
  int __pyx_t_8;
  int __pyx_t_9;
  int __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  Py_ssize_t __pyx_t_13;
  long __pyx_t_14;
  long __pyx_t_15;
  long __pyx_t_16;
  PyObject *__pyx_t_17 = NULL;
  int __pyx_t_18;
  PyObject *__pyx_t_19 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_prepare", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_30__prepare(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_30__prepare, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1209, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);

  /* "gnocis/sequences.pyx":1216
 * 		cdef int nspectrum, ki, kiRC, tki
 * 		# Add reverse complements
 * 		if self.addReverseComplements:             # <<<<<<<<<<<<<<
 * 			newspectrum = [ 0 for _ in range(len(self.spectrum)) ]
 * 			nspectrum = self.degree + 1
 */
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_self->addReverseComplements != 0);
  if (__pyx_t_1) {

    /* "gnocis/sequences.pyx":1217
 * 		# Add reverse complements
 * 		if self.addReverseComplements:
 * 			newspectrum = [ 0 for _ in range(len(self.spectrum)) ]             # <<<<<<<<<<<<<<
 * 			nspectrum = self.degree + 1
 * 			for ki in range(len(self.spectrum)):
 */
    { /* enter inner scope */
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1217, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __pyx_cur_scope->__pyx_v_self->spectrum;
      __Pyx_INCREF(__pyx_t_3);
      if (unlikely(__pyx_t_3 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(0, 1217, __pyx_L1_error)
      }
      __pyx_t_4 = PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1217, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_5 = __pyx_t_4;
      for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
        __pyx_9genexpr28__pyx_v__ = __pyx_t_6;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_int_0))) __PYX_ERR(0, 1217, __pyx_L1_error)
      }
    } /* exit inner scope */
    __pyx_v_newspectrum = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":1218
 * 		if self.addReverseComplements:
 * 			newspectrum = [ 0 for _ in range(len(self.spectrum)) ]
 * 			nspectrum = self.degree + 1             # <<<<<<<<<<<<<<
 * 			for ki in range(len(self.spectrum)):
 * 				kiRC = 0
 */
    __pyx_v_nspectrum = (__pyx_cur_scope->__pyx_v_self->degree + 1);

    /* "gnocis/sequences.pyx":1219
 * 			newspectrum = [ 0 for _ in range(len(self.spectrum)) ]
 * 			nspectrum = self.degree + 1
 * 			for ki in range(len(self.spectrum)):             # <<<<<<<<<<<<<<
 * 				kiRC = 0
 * 				tki = ki
 */
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_self->spectrum;
    __Pyx_INCREF(__pyx_t_2);
    if (unlikely(__pyx_t_2 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 1219, __pyx_L1_error)
    }
    __pyx_t_4 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1219, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_5; __pyx_t_7+=1) {
      __pyx_cur_scope->__pyx_v_ki = __pyx_t_7;

      /* "gnocis/sequences.pyx":1220
 * 			nspectrum = self.degree + 1
 * 			for ki in range(len(self.spectrum)):
 * 				kiRC = 0             # <<<<<<<<<<<<<<
 * 				tki = ki
 * 				for x in range(nspectrum):
 */
      __pyx_v_kiRC = 0;

      /* "gnocis/sequences.pyx":1221
 * 			for ki in range(len(self.spectrum)):
 * 				kiRC = 0
 * 				tki = ki             # <<<<<<<<<<<<<<
 * 				for x in range(nspectrum):
 * 					kiRC = (kiRC << 2) | ((tki & 3)^1)
 */
      __pyx_v_tki = __pyx_cur_scope->__pyx_v_ki;

      /* "gnocis/sequences.pyx":1222
 * 				kiRC = 0
 * 				tki = ki
 * 				for x in range(nspectrum):             # <<<<<<<<<<<<<<
 * 					kiRC = (kiRC << 2) | ((tki & 3)^1)
 * 					tki = tki >> 2
 */
      __pyx_t_8 = __pyx_v_nspectrum;
      __pyx_t_9 = __pyx_t_8;
      for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
        __pyx_v_x = __pyx_t_10;

        /* "gnocis/sequences.pyx":1223
 * 				tki = ki
 * 				for x in range(nspectrum):
 * 					kiRC = (kiRC << 2) | ((tki & 3)^1)             # <<<<<<<<<<<<<<
 * 					tki = tki >> 2
 * 				newspectrum[ki] = self.spectrum[ki] + self.spectrum[kiRC]
 */
        __pyx_v_kiRC = ((__pyx_v_kiRC << 2) | ((__pyx_v_tki & 3) ^ 1));

        /* "gnocis/sequences.pyx":1224
 * 				for x in range(nspectrum):
 * 					kiRC = (kiRC << 2) | ((tki & 3)^1)
 * 					tki = tki >> 2             # <<<<<<<<<<<<<<
 * 				newspectrum[ki] = self.spectrum[ki] + self.spectrum[kiRC]
 * 			self.spectrum = newspectrum
 */
        __pyx_v_tki = (__pyx_v_tki >> 2);
      }

      /* "gnocis/sequences.pyx":1225
 * 					kiRC = (kiRC << 2) | ((tki & 3)^1)
 * 					tki = tki >> 2
 * 				newspectrum[ki] = self.spectrum[ki] + self.spectrum[kiRC]             # <<<<<<<<<<<<<<
 * 			self.spectrum = newspectrum
 * 		# Add pseudocounts
 */
      if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1225, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_cur_scope->__pyx_v_self->spectrum, __pyx_cur_scope->__pyx_v_ki, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1225, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1225, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_cur_scope->__pyx_v_self->spectrum, __pyx_v_kiRC, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1225, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1225, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(__Pyx_SetItemInt(__pyx_v_newspectrum, __pyx_cur_scope->__pyx_v_ki, __pyx_t_11, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(0, 1225, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }

    /* "gnocis/sequences.pyx":1226
 * 					tki = tki >> 2
 * 				newspectrum[ki] = self.spectrum[ki] + self.spectrum[kiRC]
 * 			self.spectrum = newspectrum             # <<<<<<<<<<<<<<
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:
 */
    __Pyx_INCREF(__pyx_v_newspectrum);
    __Pyx_GIVEREF(__pyx_v_newspectrum);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->spectrum);
    __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->spectrum);
    __pyx_cur_scope->__pyx_v_self->spectrum = __pyx_v_newspectrum;

    /* "gnocis/sequences.pyx":1216
 * 		cdef int nspectrum, ki, kiRC, tki
 * 		# Add reverse complements
 * 		if self.addReverseComplements:             # <<<<<<<<<<<<<<
 * 			newspectrum = [ 0 for _ in range(len(self.spectrum)) ]
 * 			nspectrum = self.degree + 1
 */
  }

  /* "gnocis/sequences.pyx":1228
 * 			self.spectrum = newspectrum
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:             # <<<<<<<<<<<<<<
 * 			for i in range(len(self.spectrum)):
 * 				self.spectrum[i] += self.pseudoCounts
 */
  __pyx_t_1 = ((__pyx_cur_scope->__pyx_v_self->pseudoCounts > 0) != 0);
  if (__pyx_t_1) {

    /* "gnocis/sequences.pyx":1229
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:
 * 			for i in range(len(self.spectrum)):             # <<<<<<<<<<<<<<
 * 				self.spectrum[i] += self.pseudoCounts
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 */
    __pyx_t_11 = __pyx_cur_scope->__pyx_v_self->spectrum;
    __Pyx_INCREF(__pyx_t_11);
    if (unlikely(__pyx_t_11 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 1229, __pyx_L1_error)
    }
    __pyx_t_4 = PyList_GET_SIZE(__pyx_t_11); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1229, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_i = __pyx_t_6;

      /* "gnocis/sequences.pyx":1230
 * 		if self.pseudoCounts > 0:
 * 			for i in range(len(self.spectrum)):
 * 				self.spectrum[i] += self.pseudoCounts             # <<<<<<<<<<<<<<
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 * 		nOccT = sum( self.spectrum )
 */
      if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1230, __pyx_L1_error)
      }
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->spectrum);
      __pyx_t_12 = __pyx_cur_scope->__pyx_v_self->spectrum;
      __pyx_t_13 = __pyx_v_i;
      if (unlikely(__pyx_t_12 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1230, __pyx_L1_error)
      }
      __pyx_t_11 = __Pyx_GetItemInt_List(__pyx_t_12, __pyx_t_13, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1230, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_self->pseudoCounts); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1230, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1230, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(__pyx_t_12 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1230, __pyx_L1_error)
      }
      if (unlikely(__Pyx_SetItemInt(__pyx_t_12, __pyx_t_13, __pyx_t_2, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1) < 0)) __PYX_ERR(0, 1230, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    }

    /* "gnocis/sequences.pyx":1228
 * 			self.spectrum = newspectrum
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:             # <<<<<<<<<<<<<<
 * 			for i in range(len(self.spectrum)):
 * 				self.spectrum[i] += self.pseudoCounts
 */
  }

  /* "gnocis/sequences.pyx":1232
 * 				self.spectrum[i] += self.pseudoCounts
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 * 		nOccT = sum( self.spectrum )             # <<<<<<<<<<<<<<
 * 		self.initialDistribution = []
 * 		self.probspectrum = [ [] for _ in range( 4 ** self.degree ) ]
 */
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_cur_scope->__pyx_v_self->spectrum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_nOccT = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1233
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 * 		nOccT = sum( self.spectrum )
 * 		self.initialDistribution = []             # <<<<<<<<<<<<<<
 * 		self.probspectrum = [ [] for _ in range( 4 ** self.degree ) ]
 * 		for ki in range(len(self.probspectrum)):
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->initialDistribution);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->initialDistribution);
  __pyx_cur_scope->__pyx_v_self->initialDistribution = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1234
 * 		nOccT = sum( self.spectrum )
 * 		self.initialDistribution = []
 * 		self.probspectrum = [ [] for _ in range( 4 ** self.degree ) ]             # <<<<<<<<<<<<<<
 * 		for ki in range(len(self.probspectrum)):
 * 			kis = ki << 2
 */
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1234, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_14 = __Pyx_pow_long(4, ((long)__pyx_cur_scope->__pyx_v_self->degree));
    __pyx_t_15 = __pyx_t_14;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_9genexpr29__pyx_v__ = __pyx_t_16;
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1234, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1234, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->probspectrum);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->probspectrum);
  __pyx_cur_scope->__pyx_v_self->probspectrum = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1235
 * 		self.initialDistribution = []
 * 		self.probspectrum = [ [] for _ in range( 4 ** self.degree ) ]
 * 		for ki in range(len(self.probspectrum)):             # <<<<<<<<<<<<<<
 * 			kis = ki << 2
 * 			obsT = sum( self.spectrum[ kis | nti ] for nti in range(4) )
 */
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_self->probspectrum;
  __Pyx_INCREF(__pyx_t_2);
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 1235, __pyx_L1_error)
  }
  __pyx_t_4 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __pyx_t_4;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_5; __pyx_t_7+=1) {
    __pyx_cur_scope->__pyx_v_ki = __pyx_t_7;

    /* "gnocis/sequences.pyx":1236
 * 		self.probspectrum = [ [] for _ in range( 4 ** self.degree ) ]
 * 		for ki in range(len(self.probspectrum)):
 * 			kis = ki << 2             # <<<<<<<<<<<<<<
 * 			obsT = sum( self.spectrum[ kis | nti ] for nti in range(4) )
 * 			if obsT > 0:
 */
    __pyx_cur_scope->__pyx_v_kis = (__pyx_cur_scope->__pyx_v_ki << 2);

    /* "gnocis/sequences.pyx":1237
 * 		for ki in range(len(self.probspectrum)):
 * 			kis = ki << 2
 * 			obsT = sum( self.spectrum[ kis | nti ] for nti in range(4) )             # <<<<<<<<<<<<<<
 * 			if obsT > 0:
 * 				self.probspectrum[ki] = [ (nti, self.spectrum[ kis | nti ] / obsT) for nti in range(4) ]
 */
    __pyx_t_2 = __pyx_pf_6gnocis_9sequences_11MarkovChain_8_prepare_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_obsT, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1238
 * 			kis = ki << 2
 * 			obsT = sum( self.spectrum[ kis | nti ] for nti in range(4) )
 * 			if obsT > 0:             # <<<<<<<<<<<<<<
 * 				self.probspectrum[ki] = [ (nti, self.spectrum[ kis | nti ] / obsT) for nti in range(4) ]
 * 				self.initialDistribution.append( (ki, obsT / nOccT) )
 */
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_obsT, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1238, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1238, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_1) {

      /* "gnocis/sequences.pyx":1239
 * 			obsT = sum( self.spectrum[ kis | nti ] for nti in range(4) )
 * 			if obsT > 0:
 * 				self.probspectrum[ki] = [ (nti, self.spectrum[ kis | nti ] / obsT) for nti in range(4) ]             # <<<<<<<<<<<<<<
 * 				self.initialDistribution.append( (ki, obsT / nOccT) )
 * 			else:
 */
      { /* enter inner scope */
        __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1239, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        for (__pyx_t_14 = 0; __pyx_t_14 < 4; __pyx_t_14+=1) {
          __pyx_9genexpr31__pyx_v_nti = __pyx_t_14;
          __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_9genexpr31__pyx_v_nti); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 1239, __pyx_L1_error)
          }
          __pyx_t_15 = (__pyx_cur_scope->__pyx_v_kis | __pyx_9genexpr31__pyx_v_nti);
          __pyx_t_11 = __Pyx_GetItemInt_List(__pyx_cur_scope->__pyx_v_self->spectrum, __pyx_t_15, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1239, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_17 = __Pyx_PyNumber_Divide(__pyx_t_11, __pyx_v_obsT); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1239, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1239, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_17);
          PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_17);
          __pyx_t_2 = 0;
          __pyx_t_17 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 1239, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
      } /* exit inner scope */
      if (unlikely(__pyx_cur_scope->__pyx_v_self->probspectrum == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1239, __pyx_L1_error)
      }
      if (unlikely(__Pyx_SetItemInt(__pyx_cur_scope->__pyx_v_self->probspectrum, __pyx_cur_scope->__pyx_v_ki, __pyx_t_3, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(0, 1239, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "gnocis/sequences.pyx":1240
 * 			if obsT > 0:
 * 				self.probspectrum[ki] = [ (nti, self.spectrum[ kis | nti ] / obsT) for nti in range(4) ]
 * 				self.initialDistribution.append( (ki, obsT / nOccT) )             # <<<<<<<<<<<<<<
 * 			else:
 * 				self.probspectrum[ki] = [ (nti, 0.0) for nti in range(4) ]
 */
      if (unlikely(__pyx_cur_scope->__pyx_v_self->initialDistribution == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
        __PYX_ERR(0, 1240, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_ki); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = __Pyx_PyNumber_Divide(__pyx_v_obsT, __pyx_v_nOccT); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_11);
      __pyx_t_3 = 0;
      __pyx_t_11 = 0;
      __pyx_t_18 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_self->initialDistribution, __pyx_t_17); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 1240, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;

      /* "gnocis/sequences.pyx":1238
 * 			kis = ki << 2
 * 			obsT = sum( self.spectrum[ kis | nti ] for nti in range(4) )
 * 			if obsT > 0:             # <<<<<<<<<<<<<<
 * 				self.probspectrum[ki] = [ (nti, self.spectrum[ kis | nti ] / obsT) for nti in range(4) ]
 * 				self.initialDistribution.append( (ki, obsT / nOccT) )
 */
      goto __pyx_L17;
    }

    /* "gnocis/sequences.pyx":1242
 * 				self.initialDistribution.append( (ki, obsT / nOccT) )
 * 			else:
 * 				self.probspectrum[ki] = [ (nti, 0.0) for nti in range(4) ]             # <<<<<<<<<<<<<<
 * 		# Construct comparable spectrum for debugging purposes
 * 		self.comparableSpectrum = {}
 */
    /*else*/ {
      { /* enter inner scope */
        __pyx_t_17 = PyList_New(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1242, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        for (__pyx_t_14 = 0; __pyx_t_14 < 4; __pyx_t_14+=1) {
          __pyx_9genexpr32__pyx_v_nti = __pyx_t_14;
          __pyx_t_11 = __Pyx_PyInt_From_long(__pyx_9genexpr32__pyx_v_nti); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1242, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1242, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_11);
          __Pyx_INCREF(__pyx_float_0_0);
          __Pyx_GIVEREF(__pyx_float_0_0);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_float_0_0);
          __pyx_t_11 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_17, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1242, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
      } /* exit inner scope */
      if (unlikely(__pyx_cur_scope->__pyx_v_self->probspectrum == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1242, __pyx_L1_error)
      }
      if (unlikely(__Pyx_SetItemInt(__pyx_cur_scope->__pyx_v_self->probspectrum, __pyx_cur_scope->__pyx_v_ki, __pyx_t_17, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(0, 1242, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    }
    __pyx_L17:;
  }

  /* "gnocis/sequences.pyx":1244
 * 				self.probspectrum[ki] = [ (nti, 0.0) for nti in range(4) ]
 * 		# Construct comparable spectrum for debugging purposes
 * 		self.comparableSpectrum = {}             # <<<<<<<<<<<<<<
 * 		for ki in range(len(self.probspectrum)):
 * 			kmer = ''.join( kSpectrumIndex2NT[(ki >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )
 */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_17);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->comparableSpectrum);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->comparableSpectrum);
  __pyx_cur_scope->__pyx_v_self->comparableSpectrum = ((PyObject*)__pyx_t_17);
  __pyx_t_17 = 0;

  /* "gnocis/sequences.pyx":1245
 * 		# Construct comparable spectrum for debugging purposes
 * 		self.comparableSpectrum = {}
 * 		for ki in range(len(self.probspectrum)):             # <<<<<<<<<<<<<<
 * 			kmer = ''.join( kSpectrumIndex2NT[(ki >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )
 * 
 */
  __pyx_t_17 = __pyx_cur_scope->__pyx_v_self->probspectrum;
  __Pyx_INCREF(__pyx_t_17);
  if (unlikely(__pyx_t_17 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 1245, __pyx_L1_error)
  }
  __pyx_t_4 = PyList_GET_SIZE(__pyx_t_17); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1245, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_5 = __pyx_t_4;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_5; __pyx_t_7+=1) {
    __pyx_cur_scope->__pyx_v_ki = __pyx_t_7;

    /* "gnocis/sequences.pyx":1246
 * 		self.comparableSpectrum = {}
 * 		for ki in range(len(self.probspectrum)):
 * 			kmer = ''.join( kSpectrumIndex2NT[(ki >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )             # <<<<<<<<<<<<<<
 * 
 * 			self.comparableSpectrum[kmer] =  { nt: self.spectrum[(ki << 2) | kSpectrumNT2Index[nt]] for nt in [ 'A', 'T', 'G', 'C' ] }
 */
    __pyx_t_17 = __pyx_pf_6gnocis_9sequences_11MarkovChain_8_prepare_3genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_3 = __Pyx_Generator_Next(__pyx_t_17); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __pyx_t_17 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_kmer, ((PyObject*)__pyx_t_17));
    __pyx_t_17 = 0;

    /* "gnocis/sequences.pyx":1248
 * 			kmer = ''.join( kSpectrumIndex2NT[(ki >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )
 * 
 * 			self.comparableSpectrum[kmer] =  { nt: self.spectrum[(ki << 2) | kSpectrumNT2Index[nt]] for nt in [ 'A', 'T', 'G', 'C' ] }             # <<<<<<<<<<<<<<
 * 		self.prepared = True
 * 
 */
    { /* enter inner scope */
      __pyx_t_17 = PyDict_New(); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1248, __pyx_L26_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_3 = __pyx_tuple__33; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
      for (;;) {
        if (__pyx_t_6 >= 4) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_11); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1248, __pyx_L26_error)
        #else
        __pyx_t_11 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1248, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
        __Pyx_XDECREF_SET(__pyx_9genexpr34__pyx_v_nt, ((PyObject*)__pyx_t_11));
        __pyx_t_11 = 0;
        if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1248, __pyx_L26_error)
        }
        __pyx_t_11 = __Pyx_PyInt_From_long((__pyx_cur_scope->__pyx_v_ki << 2)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1248, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_kSpectrumNT2Index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1248, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_19 = __Pyx_PyObject_Dict_GetItem(__pyx_t_2, __pyx_9genexpr34__pyx_v_nt); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1248, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_Or(__pyx_t_11, __pyx_t_19); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1248, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __pyx_t_19 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_self->spectrum, __pyx_t_2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1248, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(PyDict_SetItem(__pyx_t_17, (PyObject*)__pyx_9genexpr34__pyx_v_nt, (PyObject*)__pyx_t_19))) __PYX_ERR(0, 1248, __pyx_L26_error)
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_nt); __pyx_9genexpr34__pyx_v_nt = 0;
      goto __pyx_L29_exit_scope;
      __pyx_L26_error:;
      __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_nt); __pyx_9genexpr34__pyx_v_nt = 0;
      goto __pyx_L1_error;
      __pyx_L29_exit_scope:;
    } /* exit inner scope */
    if (unlikely(__pyx_cur_scope->__pyx_v_self->comparableSpectrum == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 1248, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->comparableSpectrum, __pyx_v_kmer, __pyx_t_17) < 0)) __PYX_ERR(0, 1248, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  }

  /* "gnocis/sequences.pyx":1249
 * 
 * 			self.comparableSpectrum[kmer] =  { nt: self.spectrum[(ki << 2) | kSpectrumNT2Index[nt]] for nt in [ 'A', 'T', 'G', 'C' ] }
 * 		self.prepared = True             # <<<<<<<<<<<<<<
 * 
 * 	# Trains model on a sequence set
 */
  __pyx_cur_scope->__pyx_v_self->prepared = 1;

  /* "gnocis/sequences.pyx":1209
 * 
 * 	# Prepares model for use
 * 	def _prepare(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Prepares model for use.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain._prepare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_newspectrum);
  __Pyx_XDECREF(__pyx_v_nOccT);
  __Pyx_XDECREF(__pyx_v_obsT);
  __Pyx_XDECREF(__pyx_v_kmer);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_11MarkovChain_8_prepare_2generator24);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_11MarkovChain_8_prepare_5generator25);
  __Pyx_XDECREF(__pyx_9genexpr34__pyx_v_nt);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1252
 * 
 * 	# Trains model on a sequence set
 * 	def _trainOnSequences(self, trainingSequences):             # <<<<<<<<<<<<<<
 * 		"""Trains on sequences.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_9_trainOnSequences(PyObject *__pyx_v_self, PyObject *__pyx_v_trainingSequences); /*proto*/
static char __pyx_doc_6gnocis_9sequences_11MarkovChain_8_trainOnSequences[] = "Trains on sequences.\n\t\t\n\t\t:param trainingSequences: Training sequences.\n\t\t:type trainingSequences: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_9_trainOnSequences(PyObject *__pyx_v_self, PyObject *__pyx_v_trainingSequences) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_trainOnSequences (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_8_trainOnSequences(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_trainingSequences));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8_trainOnSequences(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_trainingSequences) {
  PyObject *__pyx_v_spectrum = 0;
  int __pyx_v_nspectrum;
  int __pyx_v_bitmask;
  int __pyx_v_ki;
  int __pyx_v_nnt;
  PyObject *__pyx_v_seq = 0;
  PyObject *__pyx_v_seqseq = 0;
  PyObject *__pyx_v_c = 0;
  int __pyx_v_v;
  PyObject *__pyx_v_convtable = 0;
  PyObject *__pyx_v_k = NULL;
  CYTHON_UNUSED long __pyx_9genexpr35__pyx_v__;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  long __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *(*__pyx_t_10)(PyObject *);
  PyObject *__pyx_t_11 = NULL;
  Py_ssize_t __pyx_t_12;
  void *__pyx_t_13;
  Py_ssize_t __pyx_t_14;
  PyObject *__pyx_t_15 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_trainOnSequences", 0);

  /* "gnocis/sequences.pyx":1258
 * 		:type trainingSequences: sequences
 * 		"""
 * 		if self.prepared:             # <<<<<<<<<<<<<<
 * 			raise Exception('Tried to train Markov model that is already prepared for use')
 * 		cdef list spectrum
 */
  __pyx_t_1 = (__pyx_v_self->prepared != 0);
  if (unlikely(__pyx_t_1)) {

    /* "gnocis/sequences.pyx":1259
 * 		"""
 * 		if self.prepared:
 * 			raise Exception('Tried to train Markov model that is already prepared for use')             # <<<<<<<<<<<<<<
 * 		cdef list spectrum
 * 		cdef int nspectrum, bitmask, ki, nnt
 */
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1259, __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, 1259, __pyx_L1_error)

    /* "gnocis/sequences.pyx":1258
 * 		:type trainingSequences: sequences
 * 		"""
 * 		if self.prepared:             # <<<<<<<<<<<<<<
 * 			raise Exception('Tried to train Markov model that is already prepared for use')
 * 		cdef list spectrum
 */
  }

  /* "gnocis/sequences.pyx":1267
 * 		cdef int v
 * 		cdef list convtable
 * 		spectrum = self.spectrum             # <<<<<<<<<<<<<<
 * 		nspectrum = self.degree + 1
 * 		bitmask = (4 ** (self.degree + 1))-1
 */
  __pyx_t_2 = __pyx_v_self->spectrum;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_spectrum = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1268
 * 		cdef list convtable
 * 		spectrum = self.spectrum
 * 		nspectrum = self.degree + 1             # <<<<<<<<<<<<<<
 * 		bitmask = (4 ** (self.degree + 1))-1
 * 		convtable = [ -1 for _ in range(256) ]
 */
  __pyx_v_nspectrum = (__pyx_v_self->degree + 1);

  /* "gnocis/sequences.pyx":1269
 * 		spectrum = self.spectrum
 * 		nspectrum = self.degree + 1
 * 		bitmask = (4 ** (self.degree + 1))-1             # <<<<<<<<<<<<<<
 * 		convtable = [ -1 for _ in range(256) ]
 * 		for k in kSpectrumNT2Index.keys():
 */
  __pyx_v_bitmask = (__Pyx_pow_long(4, (__pyx_v_self->degree + 1)) - 1);

  /* "gnocis/sequences.pyx":1270
 * 		nspectrum = self.degree + 1
 * 		bitmask = (4 ** (self.degree + 1))-1
 * 		convtable = [ -1 for _ in range(256) ]             # <<<<<<<<<<<<<<
 * 		for k in kSpectrumNT2Index.keys():
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 */
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    for (__pyx_t_3 = 0; __pyx_t_3 < 0x100; __pyx_t_3+=1) {
      __pyx_9genexpr35__pyx_v__ = __pyx_t_3;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_int_neg_1))) __PYX_ERR(0, 1270, __pyx_L1_error)
    }
  } /* exit inner scope */
  __pyx_v_convtable = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1271
 * 		bitmask = (4 ** (self.degree + 1))-1
 * 		convtable = [ -1 for _ in range(256) ]
 * 		for k in kSpectrumNT2Index.keys():             # <<<<<<<<<<<<<<
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 * 		for seq in trainingSequences:
 */
  __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_kSpectrumNT2Index); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (unlikely(__pyx_t_7 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys");
    __PYX_ERR(0, 1271, __pyx_L1_error)
  }
  __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_7, 0, __pyx_n_s_keys, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_8;
  __pyx_t_8 = 0;
  while (1) {
    __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_5, &__pyx_t_4, &__pyx_t_8, NULL, NULL, __pyx_t_6);
    if (unlikely(__pyx_t_9 == 0)) break;
    if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "gnocis/sequences.pyx":1272
 * 		convtable = [ -1 for _ in range(256) ]
 * 		for k in kSpectrumNT2Index.keys():
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]             # <<<<<<<<<<<<<<
 * 		for seq in trainingSequences:
 * 			ki = 0
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_kSpectrumNT2Index); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_8, __pyx_v_k); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1272, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyInt_From_int(((int)__pyx_t_9)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __Pyx_PyObject_Ord(__pyx_v_k); if (unlikely(__pyx_t_3 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 1272, __pyx_L1_error)
    __pyx_t_9 = ((int)__pyx_t_3);
    if (unlikely(__Pyx_SetItemInt(__pyx_v_convtable, __pyx_t_9, __pyx_t_7, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(0, 1272, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1273
 * 		for k in kSpectrumNT2Index.keys():
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 * 		for seq in trainingSequences:             # <<<<<<<<<<<<<<
 * 			ki = 0
 * 			nnt = 0
 */
  if (likely(PyList_CheckExact(__pyx_v_trainingSequences)) || PyTuple_CheckExact(__pyx_v_trainingSequences)) {
    __pyx_t_2 = __pyx_v_trainingSequences; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_trainingSequences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1273, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1273, __pyx_L1_error)
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1273, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        #endif
      } else {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1273, __pyx_L1_error)
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1273, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        #endif
      }
    } else {
      __pyx_t_7 = __pyx_t_10(__pyx_t_2);
      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, 1273, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_7);
    }
    __Pyx_XDECREF_SET(__pyx_v_seq, __pyx_t_7);
    __pyx_t_7 = 0;

    /* "gnocis/sequences.pyx":1274
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 * 		for seq in trainingSequences:
 * 			ki = 0             # <<<<<<<<<<<<<<
 * 			nnt = 0
 * 			seqseq = seq.seq
 */
    __pyx_v_ki = 0;

    /* "gnocis/sequences.pyx":1275
 * 		for seq in trainingSequences:
 * 			ki = 0
 * 			nnt = 0             # <<<<<<<<<<<<<<
 * 			seqseq = seq.seq
 * 			for c in seqseq:
 */
    __pyx_v_nnt = 0;

    /* "gnocis/sequences.pyx":1276
 * 			ki = 0
 * 			nnt = 0
 * 			seqseq = seq.seq             # <<<<<<<<<<<<<<
 * 			for c in seqseq:
 * 				v = convtable[<int>ord(c)]
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_seq, __pyx_n_s_seq); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 1276, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_seqseq, ((PyObject*)__pyx_t_7));
    __pyx_t_7 = 0;

    /* "gnocis/sequences.pyx":1277
 * 			nnt = 0
 * 			seqseq = seq.seq
 * 			for c in seqseq:             # <<<<<<<<<<<<<<
 * 				v = convtable[<int>ord(c)]
 * 				if v == -1:
 */
    if (unlikely(__pyx_v_seqseq == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
      __PYX_ERR(0, 1277, __pyx_L1_error)
    }
    __Pyx_INCREF(__pyx_v_seqseq);
    __pyx_t_11 = __pyx_v_seqseq;
    __pyx_t_9 = __Pyx_init_unicode_iteration(__pyx_t_11, (&__pyx_t_12), (&__pyx_t_13), (&__pyx_t_6)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1277, __pyx_L1_error)
    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_12; __pyx_t_14++) {
      __pyx_t_4 = __pyx_t_14;
      __pyx_t_7 = PyUnicode_FromOrdinal(__Pyx_PyUnicode_READ(__pyx_t_6, __pyx_t_13, __pyx_t_4)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1277, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 1277, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_c, ((PyObject*)__pyx_t_7));
      __pyx_t_7 = 0;

      /* "gnocis/sequences.pyx":1278
 * 			seqseq = seq.seq
 * 			for c in seqseq:
 * 				v = convtable[<int>ord(c)]             # <<<<<<<<<<<<<<
 * 				if v == -1:
 * 					ki = 0
 */
      __pyx_t_3 = __Pyx_PyObject_Ord(__pyx_v_c); if (unlikely(__pyx_t_3 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 1278, __pyx_L1_error)
      __pyx_t_9 = ((int)__pyx_t_3);
      __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_convtable, __pyx_t_9, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1278, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1278, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_v_v = __pyx_t_9;

      /* "gnocis/sequences.pyx":1279
 * 			for c in seqseq:
 * 				v = convtable[<int>ord(c)]
 * 				if v == -1:             # <<<<<<<<<<<<<<
 * 					ki = 0
 * 					nnt = 0
 */
      __pyx_t_1 = ((__pyx_v_v == -1L) != 0);
      if (__pyx_t_1) {

        /* "gnocis/sequences.pyx":1280
 * 				v = convtable[<int>ord(c)]
 * 				if v == -1:
 * 					ki = 0             # <<<<<<<<<<<<<<
 * 					nnt = 0
 * 					continue
 */
        __pyx_v_ki = 0;

        /* "gnocis/sequences.pyx":1281
 * 				if v == -1:
 * 					ki = 0
 * 					nnt = 0             # <<<<<<<<<<<<<<
 * 					continue
 * 				ki = ( ( ki << 2 ) | v ) & bitmask
 */
        __pyx_v_nnt = 0;

        /* "gnocis/sequences.pyx":1282
 * 					ki = 0
 * 					nnt = 0
 * 					continue             # <<<<<<<<<<<<<<
 * 				ki = ( ( ki << 2 ) | v ) & bitmask
 * 				nnt += 1
 */
        goto __pyx_L10_continue;

        /* "gnocis/sequences.pyx":1279
 * 			for c in seqseq:
 * 				v = convtable[<int>ord(c)]
 * 				if v == -1:             # <<<<<<<<<<<<<<
 * 					ki = 0
 * 					nnt = 0
 */
      }

      /* "gnocis/sequences.pyx":1283
 * 					nnt = 0
 * 					continue
 * 				ki = ( ( ki << 2 ) | v ) & bitmask             # <<<<<<<<<<<<<<
 * 				nnt += 1
 * 				if nnt >= nspectrum:
 */
      __pyx_v_ki = (((__pyx_v_ki << 2) | __pyx_v_v) & __pyx_v_bitmask);

      /* "gnocis/sequences.pyx":1284
 * 					continue
 * 				ki = ( ( ki << 2 ) | v ) & bitmask
 * 				nnt += 1             # <<<<<<<<<<<<<<
 * 				if nnt >= nspectrum:
 * 					spectrum[ki] += 1
 */
      __pyx_v_nnt = (__pyx_v_nnt + 1);

      /* "gnocis/sequences.pyx":1285
 * 				ki = ( ( ki << 2 ) | v ) & bitmask
 * 				nnt += 1
 * 				if nnt >= nspectrum:             # <<<<<<<<<<<<<<
 * 					spectrum[ki] += 1
 * 					nnt -= 1
 */
      __pyx_t_1 = ((__pyx_v_nnt >= __pyx_v_nspectrum) != 0);
      if (__pyx_t_1) {

        /* "gnocis/sequences.pyx":1286
 * 				nnt += 1
 * 				if nnt >= nspectrum:
 * 					spectrum[ki] += 1             # <<<<<<<<<<<<<<
 * 					nnt -= 1
 * 
 */
        if (unlikely(__pyx_v_spectrum == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1286, __pyx_L1_error)
        }
        __Pyx_INCREF(__pyx_v_spectrum);
        __pyx_t_15 = __pyx_v_spectrum;
        __pyx_t_9 = __pyx_v_ki;
        if (unlikely(__pyx_t_15 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1286, __pyx_L1_error)
        }
        __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_t_15, __pyx_t_9, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1286, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_7, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1286, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(__pyx_t_15 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1286, __pyx_L1_error)
        }
        if (unlikely(__Pyx_SetItemInt(__pyx_t_15, __pyx_t_9, __pyx_t_8, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(0, 1286, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;

        /* "gnocis/sequences.pyx":1287
 * 				if nnt >= nspectrum:
 * 					spectrum[ki] += 1
 * 					nnt -= 1             # <<<<<<<<<<<<<<
 * 
 * 	# Trains model on a sequence stream
 */
        __pyx_v_nnt = (__pyx_v_nnt - 1);

        /* "gnocis/sequences.pyx":1285
 * 				ki = ( ( ki << 2 ) | v ) & bitmask
 * 				nnt += 1
 * 				if nnt >= nspectrum:             # <<<<<<<<<<<<<<
 * 					spectrum[ki] += 1
 * 					nnt -= 1
 */
      }
      __pyx_L10_continue:;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;

    /* "gnocis/sequences.pyx":1273
 * 		for k in kSpectrumNT2Index.keys():
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 * 		for seq in trainingSequences:             # <<<<<<<<<<<<<<
 * 			ki = 0
 * 			nnt = 0
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1252
 * 
 * 	# Trains model on a sequence set
 * 	def _trainOnSequences(self, trainingSequences):             # <<<<<<<<<<<<<<
 * 		"""Trains on sequences.
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain._trainOnSequences", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_spectrum);
  __Pyx_XDECREF(__pyx_v_seq);
  __Pyx_XDECREF(__pyx_v_seqseq);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF(__pyx_v_convtable);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1290
 * 
 * 	# Trains model on a sequence stream
 * 	def _trainOnSequenceStream(self, trainingSequences):             # <<<<<<<<<<<<<<
 * 		"""Trains on sequence stream.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_11_trainOnSequenceStream(PyObject *__pyx_v_self, PyObject *__pyx_v_trainingSequences); /*proto*/
static char __pyx_doc_6gnocis_9sequences_11MarkovChain_10_trainOnSequenceStream[] = "Trains on sequence stream.\n\t\t\n\t\t:param trainingSequences: Training sequences.\n\t\t:type trainingSequences: sequenceStream\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_11_trainOnSequenceStream(PyObject *__pyx_v_self, PyObject *__pyx_v_trainingSequences) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_trainOnSequenceStream (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_10_trainOnSequenceStream(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_trainingSequences));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_10_trainOnSequenceStream(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_trainingSequences) {
  PyObject *__pyx_v_spectrum = 0;
  int __pyx_v_nspectrum;
  int __pyx_v_bitmask;
  int __pyx_v_ki;
  int __pyx_v_nnt;
  PyObject *__pyx_v_seq = 0;
  PyObject *__pyx_v_blk = 0;
  PyObject *__pyx_v_c = 0;
  int __pyx_v_v;
  PyObject *__pyx_v_convtable = 0;
  PyObject *__pyx_v_k = NULL;
  CYTHON_UNUSED long __pyx_9genexpr36__pyx_v__;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  long __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *(*__pyx_t_10)(PyObject *);
  PyObject *(*__pyx_t_11)(PyObject *);
  PyObject *__pyx_t_12 = NULL;
  Py_ssize_t __pyx_t_13;
  Py_ssize_t __pyx_t_14;
  void *__pyx_t_15;
  Py_ssize_t __pyx_t_16;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_trainOnSequenceStream", 0);

  /* "gnocis/sequences.pyx":1296
 * 		:type trainingSequences: sequenceStream
 * 		"""
 * 		if self.prepared:             # <<<<<<<<<<<<<<
 * 			raise Exception('Tried to train Markov model that is already prepared for use')
 * 		cdef list spectrum
 */
  __pyx_t_1 = (__pyx_v_self->prepared != 0);
  if (unlikely(__pyx_t_1)) {

    /* "gnocis/sequences.pyx":1297
 * 		"""
 * 		if self.prepared:
 * 			raise Exception('Tried to train Markov model that is already prepared for use')             # <<<<<<<<<<<<<<
 * 		cdef list spectrum
 * 		cdef int nspectrum, bitmask, ki, nnt
 */
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1297, __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, 1297, __pyx_L1_error)

    /* "gnocis/sequences.pyx":1296
 * 		:type trainingSequences: sequenceStream
 * 		"""
 * 		if self.prepared:             # <<<<<<<<<<<<<<
 * 			raise Exception('Tried to train Markov model that is already prepared for use')
 * 		cdef list spectrum
 */
  }

  /* "gnocis/sequences.pyx":1305
 * 		cdef int v
 * 		cdef list convtable
 * 		spectrum = self.spectrum             # <<<<<<<<<<<<<<
 * 		nspectrum = self.degree + 1
 * 		bitmask = (4 ** (self.degree + 1))-1
 */
  __pyx_t_2 = __pyx_v_self->spectrum;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_spectrum = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1306
 * 		cdef list convtable
 * 		spectrum = self.spectrum
 * 		nspectrum = self.degree + 1             # <<<<<<<<<<<<<<
 * 		bitmask = (4 ** (self.degree + 1))-1
 * 		convtable = [ -1 for _ in range(256) ]
 */
  __pyx_v_nspectrum = (__pyx_v_self->degree + 1);

  /* "gnocis/sequences.pyx":1307
 * 		spectrum = self.spectrum
 * 		nspectrum = self.degree + 1
 * 		bitmask = (4 ** (self.degree + 1))-1             # <<<<<<<<<<<<<<
 * 		convtable = [ -1 for _ in range(256) ]
 * 		for k in kSpectrumNT2Index.keys():
 */
  __pyx_v_bitmask = (__Pyx_pow_long(4, (__pyx_v_self->degree + 1)) - 1);

  /* "gnocis/sequences.pyx":1308
 * 		nspectrum = self.degree + 1
 * 		bitmask = (4 ** (self.degree + 1))-1
 * 		convtable = [ -1 for _ in range(256) ]             # <<<<<<<<<<<<<<
 * 		for k in kSpectrumNT2Index.keys():
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 */
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    for (__pyx_t_3 = 0; __pyx_t_3 < 0x100; __pyx_t_3+=1) {
      __pyx_9genexpr36__pyx_v__ = __pyx_t_3;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_int_neg_1))) __PYX_ERR(0, 1308, __pyx_L1_error)
    }
  } /* exit inner scope */
  __pyx_v_convtable = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1309
 * 		bitmask = (4 ** (self.degree + 1))-1
 * 		convtable = [ -1 for _ in range(256) ]
 * 		for k in kSpectrumNT2Index.keys():             # <<<<<<<<<<<<<<
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 * 		for seq in trainingSequences:
 */
  __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_kSpectrumNT2Index); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (unlikely(__pyx_t_7 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys");
    __PYX_ERR(0, 1309, __pyx_L1_error)
  }
  __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_7, 0, __pyx_n_s_keys, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_XDECREF(__pyx_t_2);
  __pyx_t_2 = __pyx_t_8;
  __pyx_t_8 = 0;
  while (1) {
    __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_5, &__pyx_t_4, &__pyx_t_8, NULL, NULL, __pyx_t_6);
    if (unlikely(__pyx_t_9 == 0)) break;
    if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "gnocis/sequences.pyx":1310
 * 		convtable = [ -1 for _ in range(256) ]
 * 		for k in kSpectrumNT2Index.keys():
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]             # <<<<<<<<<<<<<<
 * 		for seq in trainingSequences:
 * 			ki = 0
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_kSpectrumNT2Index); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1310, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_8, __pyx_v_k); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1310, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1310, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyInt_From_int(((int)__pyx_t_9)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1310, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __Pyx_PyObject_Ord(__pyx_v_k); if (unlikely(__pyx_t_3 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 1310, __pyx_L1_error)
    __pyx_t_9 = ((int)__pyx_t_3);
    if (unlikely(__Pyx_SetItemInt(__pyx_v_convtable, __pyx_t_9, __pyx_t_7, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(0, 1310, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1311
 * 		for k in kSpectrumNT2Index.keys():
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 * 		for seq in trainingSequences:             # <<<<<<<<<<<<<<
 * 			ki = 0
 * 			nnt = 0
 */
  if (likely(PyList_CheckExact(__pyx_v_trainingSequences)) || PyTuple_CheckExact(__pyx_v_trainingSequences)) {
    __pyx_t_2 = __pyx_v_trainingSequences; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_trainingSequences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1311, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1311, __pyx_L1_error)
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1311, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        #endif
      } else {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1311, __pyx_L1_error)
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1311, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        #endif
      }
    } else {
      __pyx_t_7 = __pyx_t_10(__pyx_t_2);
      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, 1311, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_7);
    }
    __Pyx_XDECREF_SET(__pyx_v_seq, __pyx_t_7);
    __pyx_t_7 = 0;

    /* "gnocis/sequences.pyx":1312
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 * 		for seq in trainingSequences:
 * 			ki = 0             # <<<<<<<<<<<<<<
 * 			nnt = 0
 * 			for blk in seq:
 */
    __pyx_v_ki = 0;

    /* "gnocis/sequences.pyx":1313
 * 		for seq in trainingSequences:
 * 			ki = 0
 * 			nnt = 0             # <<<<<<<<<<<<<<
 * 			for blk in seq:
 * 				for c in blk:
 */
    __pyx_v_nnt = 0;

    /* "gnocis/sequences.pyx":1314
 * 			ki = 0
 * 			nnt = 0
 * 			for blk in seq:             # <<<<<<<<<<<<<<
 * 				for c in blk:
 * 					v = convtable[<int>ord(c)]
 */
    if (likely(PyList_CheckExact(__pyx_v_seq)) || PyTuple_CheckExact(__pyx_v_seq)) {
      __pyx_t_7 = __pyx_v_seq; __Pyx_INCREF(__pyx_t_7); __pyx_t_4 = 0;
      __pyx_t_11 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_seq); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1314, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_11 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1314, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_11)) {
        if (likely(PyList_CheckExact(__pyx_t_7))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_7)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1314, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1314, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1314, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1314, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        }
      } else {
        __pyx_t_8 = __pyx_t_11(__pyx_t_7);
        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, 1314, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_8);
      }
      if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 1314, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_blk, ((PyObject*)__pyx_t_8));
      __pyx_t_8 = 0;

      /* "gnocis/sequences.pyx":1315
 * 			nnt = 0
 * 			for blk in seq:
 * 				for c in blk:             # <<<<<<<<<<<<<<
 * 					v = convtable[<int>ord(c)]
 * 					if v == -1:
 */
      if (unlikely(__pyx_v_blk == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
        __PYX_ERR(0, 1315, __pyx_L1_error)
      }
      __Pyx_INCREF(__pyx_v_blk);
      __pyx_t_12 = __pyx_v_blk;
      __pyx_t_9 = __Pyx_init_unicode_iteration(__pyx_t_12, (&__pyx_t_14), (&__pyx_t_15), (&__pyx_t_6)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1315, __pyx_L1_error)
      for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_14; __pyx_t_16++) {
        __pyx_t_13 = __pyx_t_16;
        __pyx_t_8 = PyUnicode_FromOrdinal(__Pyx_PyUnicode_READ(__pyx_t_6, __pyx_t_15, __pyx_t_13)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1315, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 1315, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_c, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;

        /* "gnocis/sequences.pyx":1316
 * 			for blk in seq:
 * 				for c in blk:
 * 					v = convtable[<int>ord(c)]             # <<<<<<<<<<<<<<
 * 					if v == -1:
 * 						ki = 0
 */
        __pyx_t_3 = __Pyx_PyObject_Ord(__pyx_v_c); if (unlikely(__pyx_t_3 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 1316, __pyx_L1_error)
        __pyx_t_9 = ((int)__pyx_t_3);
        __pyx_t_8 = __Pyx_GetItemInt_List(__pyx_v_convtable, __pyx_t_9, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1316, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1316, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_v_v = __pyx_t_9;

        /* "gnocis/sequences.pyx":1317
 * 				for c in blk:
 * 					v = convtable[<int>ord(c)]
 * 					if v == -1:             # <<<<<<<<<<<<<<
 * 						ki = 0
 * 						nnt = 0
 */
        __pyx_t_1 = ((__pyx_v_v == -1L) != 0);
        if (__pyx_t_1) {

          /* "gnocis/sequences.pyx":1318
 * 					v = convtable[<int>ord(c)]
 * 					if v == -1:
 * 						ki = 0             # <<<<<<<<<<<<<<
 * 						nnt = 0
 * 						continue
 */
          __pyx_v_ki = 0;

          /* "gnocis/sequences.pyx":1319
 * 					if v == -1:
 * 						ki = 0
 * 						nnt = 0             # <<<<<<<<<<<<<<
 * 						continue
 * 					ki = ( ( ki << 2 ) + v ) & bitmask
 */
          __pyx_v_nnt = 0;

          /* "gnocis/sequences.pyx":1320
 * 						ki = 0
 * 						nnt = 0
 * 						continue             # <<<<<<<<<<<<<<
 * 					ki = ( ( ki << 2 ) + v ) & bitmask
 * 					nnt += 1
 */
          goto __pyx_L12_continue;

          /* "gnocis/sequences.pyx":1317
 * 				for c in blk:
 * 					v = convtable[<int>ord(c)]
 * 					if v == -1:             # <<<<<<<<<<<<<<
 * 						ki = 0
 * 						nnt = 0
 */
        }

        /* "gnocis/sequences.pyx":1321
 * 						nnt = 0
 * 						continue
 * 					ki = ( ( ki << 2 ) + v ) & bitmask             # <<<<<<<<<<<<<<
 * 					nnt += 1
 * 					if nnt >= nspectrum:
 */
        __pyx_v_ki = (((__pyx_v_ki << 2) + __pyx_v_v) & __pyx_v_bitmask);

        /* "gnocis/sequences.pyx":1322
 * 						continue
 * 					ki = ( ( ki << 2 ) + v ) & bitmask
 * 					nnt += 1             # <<<<<<<<<<<<<<
 * 					if nnt >= nspectrum:
 * 						spectrum[ki] += 1
 */
        __pyx_v_nnt = (__pyx_v_nnt + 1);

        /* "gnocis/sequences.pyx":1323
 * 					ki = ( ( ki << 2 ) + v ) & bitmask
 * 					nnt += 1
 * 					if nnt >= nspectrum:             # <<<<<<<<<<<<<<
 * 						spectrum[ki] += 1
 * 						nnt -= 1
 */
        __pyx_t_1 = ((__pyx_v_nnt >= __pyx_v_nspectrum) != 0);
        if (__pyx_t_1) {

          /* "gnocis/sequences.pyx":1324
 * 					nnt += 1
 * 					if nnt >= nspectrum:
 * 						spectrum[ki] += 1             # <<<<<<<<<<<<<<
 * 						nnt -= 1
 * 
 */
          if (unlikely(__pyx_v_spectrum == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 1324, __pyx_L1_error)
          }
          __Pyx_INCREF(__pyx_v_spectrum);
          __pyx_t_17 = __pyx_v_spectrum;
          __pyx_t_9 = __pyx_v_ki;
          if (unlikely(__pyx_t_17 == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 1324, __pyx_L1_error)
          }
          __pyx_t_8 = __Pyx_GetItemInt_List(__pyx_t_17, __pyx_t_9, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_18 = __Pyx_PyInt_AddObjC(__pyx_t_8, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(__pyx_t_17 == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 1324, __pyx_L1_error)
          }
          if (unlikely(__Pyx_SetItemInt(__pyx_t_17, __pyx_t_9, __pyx_t_18, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(0, 1324, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;

          /* "gnocis/sequences.pyx":1325
 * 					if nnt >= nspectrum:
 * 						spectrum[ki] += 1
 * 						nnt -= 1             # <<<<<<<<<<<<<<
 * 
 * 	# Generates a sequence
 */
          __pyx_v_nnt = (__pyx_v_nnt - 1);

          /* "gnocis/sequences.pyx":1323
 * 					ki = ( ( ki << 2 ) + v ) & bitmask
 * 					nnt += 1
 * 					if nnt >= nspectrum:             # <<<<<<<<<<<<<<
 * 						spectrum[ki] += 1
 * 						nnt -= 1
 */
        }
        __pyx_L12_continue:;
      }
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;

      /* "gnocis/sequences.pyx":1314
 * 			ki = 0
 * 			nnt = 0
 * 			for blk in seq:             # <<<<<<<<<<<<<<
 * 				for c in blk:
 * 					v = convtable[<int>ord(c)]
 */
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

    /* "gnocis/sequences.pyx":1311
 * 		for k in kSpectrumNT2Index.keys():
 * 			convtable[<int>(ord(k))] = <int>kSpectrumNT2Index[k]
 * 		for seq in trainingSequences:             # <<<<<<<<<<<<<<
 * 			ki = 0
 * 			nnt = 0
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1290
 * 
 * 	# Trains model on a sequence stream
 * 	def _trainOnSequenceStream(self, trainingSequences):             # <<<<<<<<<<<<<<
 * 		"""Trains on sequence stream.
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain._trainOnSequenceStream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_spectrum);
  __Pyx_XDECREF(__pyx_v_seq);
  __Pyx_XDECREF(__pyx_v_blk);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF(__pyx_v_convtable);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1328
 * 
 * 	# Generates a sequence
 * 	def generate(self, int length):             # <<<<<<<<<<<<<<
 * 		""" Generates a sequence.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_13generate(PyObject *__pyx_v_self, PyObject *__pyx_arg_length); /*proto*/
static char __pyx_doc_6gnocis_9sequences_11MarkovChain_12generate[] = " Generates a sequence.\n\t\t\n\t\t:param length: Length of the sequence to generate.\n\t\t:type length: int\n\t\t\n\t\t:return: Random sequence.\n\t\t:rtype: sequence\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_13generate(PyObject *__pyx_v_self, PyObject *__pyx_arg_length) {
  int __pyx_v_length;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("generate (wrapper)", 0);
  assert(__pyx_arg_length); {
    __pyx_v_length = __Pyx_PyInt_As_int(__pyx_arg_length); if (unlikely((__pyx_v_length == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1328, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.generate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_12generate(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((int)__pyx_v_length));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_11MarkovChain_8generate_2generator26(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":1350
 * 		random.seed(seed)
 * 		state = weightedRandomChoice(self.initialDistribution)
 * 		kmer = ''.join( kSpectrumIndex2NT[(state >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )             # <<<<<<<<<<<<<<
 * 		seq = '' + kmer
 * 		andMask = ((4 ** (degree))-1)
 */

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8generate_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_34_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_34_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1350, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_11MarkovChain_8generate_2generator26, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_generate_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.generate.genexpr", __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_6gnocis_9sequences_11MarkovChain_8generate_2generator26(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1350, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->degree); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
    __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1350, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1350, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1350, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1350, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1350, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_4(__pyx_t_1);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1350, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_x);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_x, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_kSpectrumIndex2NT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_state); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1350, __pyx_L1_error) }
    __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->degree - 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyNumber_Subtract(__pyx_t_6, __pyx_cur_scope->__pyx_v_x); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Multiply(__pyx_t_7, __pyx_int_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Rshift(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyInt_AndObjC(__pyx_t_7, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 1350, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __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("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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;
}

/* "gnocis/sequences.pyx":1328
 * 
 * 	# Generates a sequence
 * 	def generate(self, int length):             # <<<<<<<<<<<<<<
 * 		""" Generates a sequence.
 * 
 */

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_12generate(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, int __pyx_v_length) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *__pyx_cur_scope;
  int __pyx_v_andMask;
  int __pyx_v_nnt;
  int __pyx_v_degree;
  PyObject *__pyx_v_seq = 0;
  PyObject *__pyx_v_kmer = 0;
  float __pyx_v_r;
  float __pyx_v_cw;
  float __pyx_v_w;
  PyObject *__pyx_v_choices = 0;
  int __pyx_v_c;
  PyObject *__pyx_v_seed = NULL;
  char *__pyx_v_gbuf;
  char *__pyx_v_index2NT;
  char *__pyx_v_cseq;
  CYTHON_UNUSED int __pyx_v__;
  PyObject *__pyx_gb_6gnocis_9sequences_11MarkovChain_8generate_2generator26 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  Py_UCS4 __pyx_t_8;
  float __pyx_t_9;
  Py_ssize_t __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *(*__pyx_t_13)(PyObject *);
  int __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("generate", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_33_generate(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_33_generate, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1328, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);

  /* "gnocis/sequences.pyx":1337
 * 		:rtype: sequence
 * 		"""
 * 		if not self.prepared:             # <<<<<<<<<<<<<<
 * 			self.prepare()
 * 		cdef int state, andMask, nnt, degree
 */
  __pyx_t_1 = ((!(__pyx_cur_scope->__pyx_v_self->prepared != 0)) != 0);
  if (__pyx_t_1) {

    /* "gnocis/sequences.pyx":1338
 * 		"""
 * 		if not self.prepared:
 * 			self.prepare()             # <<<<<<<<<<<<<<
 * 		cdef int state, andMask, nnt, degree
 * 		cdef str seq, kmer
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_prepare_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":1337
 * 		:rtype: sequence
 * 		"""
 * 		if not self.prepared:             # <<<<<<<<<<<<<<
 * 			self.prepare()
 * 		cdef int state, andMask, nnt, degree
 */
  }

  /* "gnocis/sequences.pyx":1346
 * 		cdef int c
 * 		#
 * 		degree = self.degree             # <<<<<<<<<<<<<<
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 */
  __pyx_t_5 = __pyx_cur_scope->__pyx_v_self->degree;
  __pyx_v_degree = __pyx_t_5;

  /* "gnocis/sequences.pyx":1347
 * 		#
 * 		degree = self.degree
 * 		seed = random.randint(0, 0xFFFFFFFF)             # <<<<<<<<<<<<<<
 * 		random.seed(seed)
 * 		state = weightedRandomChoice(self.initialDistribution)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_randint); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_seed = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1348
 * 		degree = self.degree
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)             # <<<<<<<<<<<<<<
 * 		state = weightedRandomChoice(self.initialDistribution)
 * 		kmer = ''.join( kSpectrumIndex2NT[(state >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_seed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_seed) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_seed);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1349
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		state = weightedRandomChoice(self.initialDistribution)             # <<<<<<<<<<<<<<
 * 		kmer = ''.join( kSpectrumIndex2NT[(state >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )
 * 		seq = '' + kmer
 */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_weightedRandomChoice); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_cur_scope->__pyx_v_self->initialDistribution) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_cur_scope->__pyx_v_self->initialDistribution);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1349, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_cur_scope->__pyx_v_state = __pyx_t_5;

  /* "gnocis/sequences.pyx":1350
 * 		random.seed(seed)
 * 		state = weightedRandomChoice(self.initialDistribution)
 * 		kmer = ''.join( kSpectrumIndex2NT[(state >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )             # <<<<<<<<<<<<<<
 * 		seq = '' + kmer
 * 		andMask = ((4 ** (degree))-1)
 */
  __pyx_t_2 = __pyx_pf_6gnocis_9sequences_11MarkovChain_8generate_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_Generator_Next(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_kmer = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1351
 * 		state = weightedRandomChoice(self.initialDistribution)
 * 		kmer = ''.join( kSpectrumIndex2NT[(state >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )
 * 		seq = '' + kmer             # <<<<<<<<<<<<<<
 * 		andMask = ((4 ** (degree))-1)
 * 
 */
  __pyx_t_2 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u__2, __pyx_v_kmer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_seq = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1352
 * 		kmer = ''.join( kSpectrumIndex2NT[(state >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )
 * 		seq = '' + kmer
 * 		andMask = ((4 ** (degree))-1)             # <<<<<<<<<<<<<<
 * 
 * 		##################################
 */
  __pyx_v_andMask = (__Pyx_pow_long(4, ((long)__pyx_v_degree)) - 1);

  /* "gnocis/sequences.pyx":1355
 * 
 * 		##################################
 * 		cdef char* gbuf = <char*> malloc(length+1)             # <<<<<<<<<<<<<<
 * 		cdef char* index2NT = <char*> malloc(4)
 * 		index2NT[0] = b'A'
 */
  __pyx_v_gbuf = ((char *)malloc((__pyx_v_length + 1)));

  /* "gnocis/sequences.pyx":1356
 * 		##################################
 * 		cdef char* gbuf = <char*> malloc(length+1)
 * 		cdef char* index2NT = <char*> malloc(4)             # <<<<<<<<<<<<<<
 * 		index2NT[0] = b'A'
 * 		index2NT[1] = b'T'
 */
  __pyx_v_index2NT = ((char *)malloc(4));

  /* "gnocis/sequences.pyx":1357
 * 		cdef char* gbuf = <char*> malloc(length+1)
 * 		cdef char* index2NT = <char*> malloc(4)
 * 		index2NT[0] = b'A'             # <<<<<<<<<<<<<<
 * 		index2NT[1] = b'T'
 * 		index2NT[2] = b'G'
 */
  (__pyx_v_index2NT[0]) = 'A';

  /* "gnocis/sequences.pyx":1358
 * 		cdef char* index2NT = <char*> malloc(4)
 * 		index2NT[0] = b'A'
 * 		index2NT[1] = b'T'             # <<<<<<<<<<<<<<
 * 		index2NT[2] = b'G'
 * 		index2NT[3] = b'C'
 */
  (__pyx_v_index2NT[1]) = 'T';

  /* "gnocis/sequences.pyx":1359
 * 		index2NT[0] = b'A'
 * 		index2NT[1] = b'T'
 * 		index2NT[2] = b'G'             # <<<<<<<<<<<<<<
 * 		index2NT[3] = b'C'
 * 		cdef char* cseq = gbuf
 */
  (__pyx_v_index2NT[2]) = 'G';

  /* "gnocis/sequences.pyx":1360
 * 		index2NT[1] = b'T'
 * 		index2NT[2] = b'G'
 * 		index2NT[3] = b'C'             # <<<<<<<<<<<<<<
 * 		cdef char* cseq = gbuf
 * 		for c in range(degree):
 */
  (__pyx_v_index2NT[3]) = 'C';

  /* "gnocis/sequences.pyx":1361
 * 		index2NT[2] = b'G'
 * 		index2NT[3] = b'C'
 * 		cdef char* cseq = gbuf             # <<<<<<<<<<<<<<
 * 		for c in range(degree):
 * 			cseq[0] = ord(seq[c])
 */
  __pyx_v_cseq = __pyx_v_gbuf;

  /* "gnocis/sequences.pyx":1362
 * 		index2NT[3] = b'C'
 * 		cdef char* cseq = gbuf
 * 		for c in range(degree):             # <<<<<<<<<<<<<<
 * 			cseq[0] = ord(seq[c])
 * 			cseq += 1
 */
  __pyx_t_5 = __pyx_v_degree;
  __pyx_t_6 = __pyx_t_5;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_c = __pyx_t_7;

    /* "gnocis/sequences.pyx":1363
 * 		cdef char* cseq = gbuf
 * 		for c in range(degree):
 * 			cseq[0] = ord(seq[c])             # <<<<<<<<<<<<<<
 * 			cseq += 1
 * 		for _ in range(length - degree):
 */
    __pyx_t_8 = __Pyx_GetItemInt_Unicode(__pyx_v_seq, __pyx_v_c, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(__pyx_t_8 == (Py_UCS4)-1)) __PYX_ERR(0, 1363, __pyx_L1_error)
    (__pyx_v_cseq[0]) = ((long)__pyx_t_8);

    /* "gnocis/sequences.pyx":1364
 * 		for c in range(degree):
 * 			cseq[0] = ord(seq[c])
 * 			cseq += 1             # <<<<<<<<<<<<<<
 * 		for _ in range(length - degree):
 * 			r = random.random()
 */
    __pyx_v_cseq = (__pyx_v_cseq + 1);
  }

  /* "gnocis/sequences.pyx":1365
 * 			cseq[0] = ord(seq[c])
 * 			cseq += 1
 * 		for _ in range(length - degree):             # <<<<<<<<<<<<<<
 * 			r = random.random()
 * 			cw = 0.0
 */
  __pyx_t_5 = (__pyx_v_length - __pyx_v_degree);
  __pyx_t_6 = __pyx_t_5;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v__ = __pyx_t_7;

    /* "gnocis/sequences.pyx":1366
 * 			cseq += 1
 * 		for _ in range(length - degree):
 * 			r = random.random()             # <<<<<<<<<<<<<<
 * 			cw = 0.0
 * 			choices = self.probspectrum[state]
 */
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_random); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1366, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1366, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1366, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = __pyx_PyFloat_AsFloat(__pyx_t_2); if (unlikely((__pyx_t_9 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1366, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_r = __pyx_t_9;

    /* "gnocis/sequences.pyx":1367
 * 		for _ in range(length - degree):
 * 			r = random.random()
 * 			cw = 0.0             # <<<<<<<<<<<<<<
 * 			choices = self.probspectrum[state]
 * 			for c, w in choices:
 */
    __pyx_v_cw = 0.0;

    /* "gnocis/sequences.pyx":1368
 * 			r = random.random()
 * 			cw = 0.0
 * 			choices = self.probspectrum[state]             # <<<<<<<<<<<<<<
 * 			for c, w in choices:
 * 				cw += w
 */
    if (unlikely(__pyx_cur_scope->__pyx_v_self->probspectrum == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 1368, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_cur_scope->__pyx_v_self->probspectrum, __pyx_cur_scope->__pyx_v_state, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1368, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_choices, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":1369
 * 			cw = 0.0
 * 			choices = self.probspectrum[state]
 * 			for c, w in choices:             # <<<<<<<<<<<<<<
 * 				cw += w
 * 				if cw >= r:
 */
    if (unlikely(__pyx_v_choices == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 1369, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_v_choices; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
    for (;;) {
      if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1369, __pyx_L1_error)
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1369, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
        PyObject* sequence = __pyx_t_3;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 1369, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_11);
        #else
        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_12 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
        index = 0; __pyx_t_4 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_4)) goto __pyx_L10_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 1; __pyx_t_11 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L10_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_11);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < 0) __PYX_ERR(0, 1369, __pyx_L1_error)
        __pyx_t_13 = NULL;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        goto __pyx_L11_unpacking_done;
        __pyx_L10_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_13 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 1369, __pyx_L1_error)
        __pyx_L11_unpacking_done:;
      }
      __pyx_t_14 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1369, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_9 = __pyx_PyFloat_AsFloat(__pyx_t_11); if (unlikely((__pyx_t_9 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1369, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_v_c = __pyx_t_14;
      __pyx_v_w = __pyx_t_9;

      /* "gnocis/sequences.pyx":1370
 * 			choices = self.probspectrum[state]
 * 			for c, w in choices:
 * 				cw += w             # <<<<<<<<<<<<<<
 * 				if cw >= r:
 * 					nnt = c
 */
      __pyx_v_cw = (__pyx_v_cw + __pyx_v_w);

      /* "gnocis/sequences.pyx":1371
 * 			for c, w in choices:
 * 				cw += w
 * 				if cw >= r:             # <<<<<<<<<<<<<<
 * 					nnt = c
 * 					break
 */
      __pyx_t_1 = ((__pyx_v_cw >= __pyx_v_r) != 0);
      if (__pyx_t_1) {

        /* "gnocis/sequences.pyx":1372
 * 				cw += w
 * 				if cw >= r:
 * 					nnt = c             # <<<<<<<<<<<<<<
 * 					break
 * 			state = ((state << 2) | nnt) & andMask
 */
        __pyx_v_nnt = __pyx_v_c;

        /* "gnocis/sequences.pyx":1373
 * 				if cw >= r:
 * 					nnt = c
 * 					break             # <<<<<<<<<<<<<<
 * 			state = ((state << 2) | nnt) & andMask
 * 			cseq[0] = index2NT[nnt]
 */
        goto __pyx_L9_break;

        /* "gnocis/sequences.pyx":1371
 * 			for c, w in choices:
 * 				cw += w
 * 				if cw >= r:             # <<<<<<<<<<<<<<
 * 					nnt = c
 * 					break
 */
      }

      /* "gnocis/sequences.pyx":1369
 * 			cw = 0.0
 * 			choices = self.probspectrum[state]
 * 			for c, w in choices:             # <<<<<<<<<<<<<<
 * 				cw += w
 * 				if cw >= r:
 */
    }
    __pyx_L9_break:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":1374
 * 					nnt = c
 * 					break
 * 			state = ((state << 2) | nnt) & andMask             # <<<<<<<<<<<<<<
 * 			cseq[0] = index2NT[nnt]
 * 			cseq += 1
 */
    __pyx_cur_scope->__pyx_v_state = (((__pyx_cur_scope->__pyx_v_state << 2) | __pyx_v_nnt) & __pyx_v_andMask);

    /* "gnocis/sequences.pyx":1375
 * 					break
 * 			state = ((state << 2) | nnt) & andMask
 * 			cseq[0] = index2NT[nnt]             # <<<<<<<<<<<<<<
 * 			cseq += 1
 * 		cseq[0] = 0
 */
    (__pyx_v_cseq[0]) = (__pyx_v_index2NT[__pyx_v_nnt]);

    /* "gnocis/sequences.pyx":1376
 * 			state = ((state << 2) | nnt) & andMask
 * 			cseq[0] = index2NT[nnt]
 * 			cseq += 1             # <<<<<<<<<<<<<<
 * 		cseq[0] = 0
 * 		seq = (<bytes>gbuf).decode('UTF-8')
 */
    __pyx_v_cseq = (__pyx_v_cseq + 1);
  }

  /* "gnocis/sequences.pyx":1377
 * 			cseq[0] = index2NT[nnt]
 * 			cseq += 1
 * 		cseq[0] = 0             # <<<<<<<<<<<<<<
 * 		seq = (<bytes>gbuf).decode('UTF-8')
 * 		free(gbuf)
 */
  (__pyx_v_cseq[0]) = 0;

  /* "gnocis/sequences.pyx":1378
 * 			cseq += 1
 * 		cseq[0] = 0
 * 		seq = (<bytes>gbuf).decode('UTF-8')             # <<<<<<<<<<<<<<
 * 		free(gbuf)
 * 		free(index2NT)
 */
  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_gbuf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(__pyx_t_2 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
    __PYX_ERR(0, 1378, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_decode_bytes(((PyObject*)__pyx_t_2), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_seq, ((PyObject*)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":1379
 * 		cseq[0] = 0
 * 		seq = (<bytes>gbuf).decode('UTF-8')
 * 		free(gbuf)             # <<<<<<<<<<<<<<
 * 		free(index2NT)
 * 		self.nGenerated += 1
 */
  free(__pyx_v_gbuf);

  /* "gnocis/sequences.pyx":1380
 * 		seq = (<bytes>gbuf).decode('UTF-8')
 * 		free(gbuf)
 * 		free(index2NT)             # <<<<<<<<<<<<<<
 * 		self.nGenerated += 1
 * 		return sequence('Generated sequence <Length: %d; Model: %s; Seed: %d>'%(length, str(self), seed), seq)
 */
  free(__pyx_v_index2NT);

  /* "gnocis/sequences.pyx":1381
 * 		free(gbuf)
 * 		free(index2NT)
 * 		self.nGenerated += 1             # <<<<<<<<<<<<<<
 * 		return sequence('Generated sequence <Length: %d; Model: %s; Seed: %d>'%(length, str(self), seed), seq)
 * 
 */
  __pyx_cur_scope->__pyx_v_self->nGenerated = (__pyx_cur_scope->__pyx_v_self->nGenerated + 1);

  /* "gnocis/sequences.pyx":1382
 * 		free(index2NT)
 * 		self.nGenerated += 1
 * 		return sequence('Generated sequence <Length: %d; Model: %s; Seed: %d>'%(length, str(self), seed), seq)             # <<<<<<<<<<<<<<
 * 
 * # IID sequence model
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyTuple_New(7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_10 = 0;
  __pyx_t_8 = 127;
  __Pyx_INCREF(__pyx_kp_u_Generated_sequence_Length);
  __pyx_t_10 += 28;
  __Pyx_GIVEREF(__pyx_kp_u_Generated_sequence_Length);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Generated_sequence_Length);
  __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_v_length, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_Model);
  __pyx_t_10 += 9;
  __Pyx_GIVEREF(__pyx_kp_u_Model);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_Model);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_cur_scope->__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8;
  __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_Seed);
  __pyx_t_10 += 8;
  __Pyx_GIVEREF(__pyx_kp_u_Seed);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_Seed);
  __pyx_t_2 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_seed), __pyx_n_u_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8;
  __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_);
  __pyx_t_10 += 1;
  __Pyx_GIVEREF(__pyx_kp_u_);
  PyTuple_SET_ITEM(__pyx_t_3, 6, __pyx_kp_u_);
  __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 7, __pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1382, __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_seq);
  __Pyx_GIVEREF(__pyx_v_seq);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_seq);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1382, __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;

  /* "gnocis/sequences.pyx":1328
 * 
 * 	# Generates a sequence
 * 	def generate(self, int length):             # <<<<<<<<<<<<<<
 * 		""" Generates a sequence.
 * 
 */

  /* 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_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.generate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seq);
  __Pyx_XDECREF(__pyx_v_kmer);
  __Pyx_XDECREF(__pyx_v_choices);
  __Pyx_XDECREF(__pyx_v_seed);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_11MarkovChain_8generate_2generator26);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":70
 * cdef class MarkovChain(sequenceGenerator):
 * 
 * 	cdef public int degree, pseudoCounts, nGenerated             # <<<<<<<<<<<<<<
 * 	cdef public bool addReverseComplements, prepared
 * 	cdef public object trainingSequences
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_6degree_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_6degree_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_6degree___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_6degree___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__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_int(__pyx_v_self->degree); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __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("gnocis.sequences.MarkovChain.degree.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_6degree_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_6degree_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_6degree_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_6degree_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 70, __pyx_L1_error)
  __pyx_v_self->degree = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.degree.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_12pseudoCounts_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_12pseudoCounts_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_12pseudoCounts___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_12pseudoCounts___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__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_int(__pyx_v_self->pseudoCounts); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __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("gnocis.sequences.MarkovChain.pseudoCounts.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_12pseudoCounts_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_12pseudoCounts_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_12pseudoCounts_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_12pseudoCounts_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 70, __pyx_L1_error)
  __pyx_v_self->pseudoCounts = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.pseudoCounts.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_10nGenerated_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_10nGenerated_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_10nGenerated___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_10nGenerated___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__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_int(__pyx_v_self->nGenerated); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 70, __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("gnocis.sequences.MarkovChain.nGenerated.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_10nGenerated_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_10nGenerated_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_10nGenerated_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_10nGenerated_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 70, __pyx_L1_error)
  __pyx_v_self->nGenerated = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.nGenerated.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":71
 * 
 * 	cdef public int degree, pseudoCounts, nGenerated
 * 	cdef public bool addReverseComplements, prepared             # <<<<<<<<<<<<<<
 * 	cdef public object trainingSequences
 * 	cdef public list spectrum, initialDistribution
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_21addReverseComplements_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_21addReverseComplements_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_21addReverseComplements___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_21addReverseComplements___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__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_PyBool_FromLong(__pyx_v_self->addReverseComplements); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 71, __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("gnocis.sequences.MarkovChain.addReverseComplements.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_21addReverseComplements_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_21addReverseComplements_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_21addReverseComplements_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_21addReverseComplements_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(1, 71, __pyx_L1_error)
  __pyx_v_self->addReverseComplements = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.addReverseComplements.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_8prepared_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_8prepared_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_8prepared___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_8prepared___get__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__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_PyBool_FromLong(__pyx_v_self->prepared); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 71, __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("gnocis.sequences.MarkovChain.prepared.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_8prepared_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_8prepared_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_8prepared_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_8prepared_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(1, 71, __pyx_L1_error)
  __pyx_v_self->prepared = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.prepared.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":72
 * 	cdef public int degree, pseudoCounts, nGenerated
 * 	cdef public bool addReverseComplements, prepared
 * 	cdef public object trainingSequences             # <<<<<<<<<<<<<<
 * 	cdef public list spectrum, initialDistribution
 * 	cdef public list probspectrum
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_17trainingSequences___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_17trainingSequences_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_17trainingSequences_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->trainingSequences);
  __Pyx_DECREF(__pyx_v_self->trainingSequences);
  __pyx_v_self->trainingSequences = __pyx_v_value;

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_17trainingSequences_4__del__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_17trainingSequences_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->trainingSequences);
  __Pyx_DECREF(__pyx_v_self->trainingSequences);
  __pyx_v_self->trainingSequences = Py_None;

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

/* "gnocis/sequences.pxd":73
 * 	cdef public bool addReverseComplements, prepared
 * 	cdef public object trainingSequences
 * 	cdef public list spectrum, initialDistribution             # <<<<<<<<<<<<<<
 * 	cdef public list probspectrum
 * 	cdef public dict comparableSpectrum
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_8spectrum___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_8spectrum_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_8spectrum_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 73, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->spectrum);
  __Pyx_DECREF(__pyx_v_self->spectrum);
  __pyx_v_self->spectrum = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.spectrum.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_8spectrum_4__del__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_8spectrum_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->spectrum);
  __Pyx_DECREF(__pyx_v_self->spectrum);
  __pyx_v_self->spectrum = ((PyObject*)Py_None);

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

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_19initialDistribution___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_19initialDistribution_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_19initialDistribution_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 73, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->initialDistribution);
  __Pyx_DECREF(__pyx_v_self->initialDistribution);
  __pyx_v_self->initialDistribution = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.initialDistribution.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_19initialDistribution_4__del__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_19initialDistribution_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->initialDistribution);
  __Pyx_DECREF(__pyx_v_self->initialDistribution);
  __pyx_v_self->initialDistribution = ((PyObject*)Py_None);

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

/* "gnocis/sequences.pxd":74
 * 	cdef public object trainingSequences
 * 	cdef public list spectrum, initialDistribution
 * 	cdef public list probspectrum             # <<<<<<<<<<<<<<
 * 	cdef public dict comparableSpectrum
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_12probspectrum___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_12probspectrum_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_12probspectrum_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 74, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->probspectrum);
  __Pyx_DECREF(__pyx_v_self->probspectrum);
  __pyx_v_self->probspectrum = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.probspectrum.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_12probspectrum_4__del__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_12probspectrum_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->probspectrum);
  __Pyx_DECREF(__pyx_v_self->probspectrum);
  __pyx_v_self->probspectrum = ((PyObject*)Py_None);

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

/* "gnocis/sequences.pxd":75
 * 	cdef public list spectrum, initialDistribution
 * 	cdef public list probspectrum
 * 	cdef public dict comparableSpectrum             # <<<<<<<<<<<<<<
 * 
 * # IID sequence model
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_18comparableSpectrum___get__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_2__set__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_2__set__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 75, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->comparableSpectrum);
  __Pyx_DECREF(__pyx_v_self->comparableSpectrum);
  __pyx_v_self->comparableSpectrum = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.comparableSpectrum.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_4__del__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_4__del__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->comparableSpectrum);
  __Pyx_DECREF(__pyx_v_self->comparableSpectrum);
  __pyx_v_self->comparableSpectrum = ((PyObject*)Py_None);

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_14__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_14__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_t_8;
  int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.addReverseComplements, self.comparableSpectrum, self.degree, self.initialDistribution, self.nGenerated, self.prepared, self.probspectrum, self.pseudoCounts, self.spectrum, self.trainingSequences)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->addReverseComplements); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->degree); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->nGenerated); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_self->prepared); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->pseudoCounts); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(10); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_self->comparableSpectrum);
  __Pyx_GIVEREF(__pyx_v_self->comparableSpectrum);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_self->comparableSpectrum);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_self->initialDistribution);
  __Pyx_GIVEREF(__pyx_v_self->initialDistribution);
  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_v_self->initialDistribution);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 4, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 5, __pyx_t_4);
  __Pyx_INCREF(__pyx_v_self->probspectrum);
  __Pyx_GIVEREF(__pyx_v_self->probspectrum);
  PyTuple_SET_ITEM(__pyx_t_6, 6, __pyx_v_self->probspectrum);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 7, __pyx_t_5);
  __Pyx_INCREF(__pyx_v_self->spectrum);
  __Pyx_GIVEREF(__pyx_v_self->spectrum);
  PyTuple_SET_ITEM(__pyx_t_6, 8, __pyx_v_self->spectrum);
  __Pyx_INCREF(__pyx_v_self->trainingSequences);
  __Pyx_GIVEREF(__pyx_v_self->trainingSequences);
  PyTuple_SET_ITEM(__pyx_t_6, 9, __pyx_v_self->trainingSequences);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.addReverseComplements, self.comparableSpectrum, self.degree, self.initialDistribution, self.nGenerated, self.prepared, self.probspectrum, self.pseudoCounts, self.spectrum, self.trainingSequences)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_6 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v__dict = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "(tree fragment)":7
 *     state = (self.addReverseComplements, self.comparableSpectrum, self.degree, self.initialDistribution, self.nGenerated, self.prepared, self.probspectrum, self.pseudoCounts, self.spectrum, self.trainingSequences)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_7 = (__pyx_v__dict != Py_None);
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v__dict);
    __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.comparableSpectrum is not None or self.initialDistribution is not None or self.probspectrum is not None or self.spectrum is not None or self.trainingSequences is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.addReverseComplements, self.comparableSpectrum, self.degree, self.initialDistribution, self.nGenerated, self.prepared, self.probspectrum, self.pseudoCounts, self.spectrum, self.trainingSequences)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.comparableSpectrum is not None or self.initialDistribution is not None or self.probspectrum is not None or self.spectrum is not None or self.trainingSequences is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, None), state
 */
  /*else*/ {
    __pyx_t_7 = (__pyx_v_self->comparableSpectrum != ((PyObject*)Py_None));
    __pyx_t_9 = (__pyx_t_7 != 0);
    if (!__pyx_t_9) {
    } else {
      __pyx_t_8 = __pyx_t_9;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_9 = (__pyx_v_self->initialDistribution != ((PyObject*)Py_None));
    __pyx_t_7 = (__pyx_t_9 != 0);
    if (!__pyx_t_7) {
    } else {
      __pyx_t_8 = __pyx_t_7;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_7 = (__pyx_v_self->probspectrum != ((PyObject*)Py_None));
    __pyx_t_9 = (__pyx_t_7 != 0);
    if (!__pyx_t_9) {
    } else {
      __pyx_t_8 = __pyx_t_9;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_9 = (__pyx_v_self->spectrum != ((PyObject*)Py_None));
    __pyx_t_7 = (__pyx_t_9 != 0);
    if (!__pyx_t_7) {
    } else {
      __pyx_t_8 = __pyx_t_7;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_7 = (__pyx_v_self->trainingSequences != Py_None);
    __pyx_t_9 = (__pyx_t_7 != 0);
    __pyx_t_8 = __pyx_t_9;
    __pyx_L4_bool_binop_done:;
    __pyx_v_use_setstate = __pyx_t_8;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.comparableSpectrum is not None or self.initialDistribution is not None or self.probspectrum is not None or self.spectrum is not None or self.trainingSequences is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, None), state
 *     else:
 */
  __pyx_t_8 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_8) {

    /* "(tree fragment)":13
 *         use_setstate = self.comparableSpectrum is not None or self.initialDistribution is not None or self.probspectrum is not None or self.spectrum is not None or self.trainingSequences is not None
 *     if use_setstate:
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_MarkovChain); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_208533218);
    __Pyx_GIVEREF(__pyx_int_208533218);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_208533218);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_6, 2, Py_None);
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state);
    __pyx_t_5 = 0;
    __pyx_t_6 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.comparableSpectrum is not None or self.initialDistribution is not None or self.probspectrum is not None or self.spectrum is not None or self.trainingSequences is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, None), state
 *     else:
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_MarkovChain__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_MarkovChain); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_208533218);
    __Pyx_GIVEREF(__pyx_int_208533218);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_208533218);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
    __pyx_t_4 = 0;
    __pyx_t_6 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_MarkovChain__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_11MarkovChain_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_11MarkovChain_16__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_11MarkovChain_16__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_MarkovChain__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_MarkovChain__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_MarkovChain, (type(self), 0xc6df6e2, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_MarkovChain__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.MarkovChain.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1398
 * 	"""
 * 
 * 	def __init__(self, trainingSequences, pseudoCounts = True, addComplements = True):             # <<<<<<<<<<<<<<
 * 		self.pseudoCounts = pseudoCounts
 * 		self.addComplements = addComplements
 */

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_trainingSequences = 0;
  PyObject *__pyx_v_pseudoCounts = 0;
  PyObject *__pyx_v_addComplements = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trainingSequences,&__pyx_n_s_pseudoCounts,&__pyx_n_s_addComplements,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_True);
    values[2] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_trainingSequences)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pseudoCounts);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_addComplements);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1398, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_trainingSequences = values[0];
    __pyx_v_pseudoCounts = values[1];
    __pyx_v_addComplements = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1398, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.IID.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID___init__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), __pyx_v_trainingSequences, __pyx_v_pseudoCounts, __pyx_v_addComplements);

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

static int __pyx_pf_6gnocis_9sequences_3IID___init__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_trainingSequences, PyObject *__pyx_v_pseudoCounts, PyObject *__pyx_v_addComplements) {
  PyObject *__pyx_9genexpr38__pyx_v_nt = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  bool __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  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_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF(__pyx_v_trainingSequences);

  /* "gnocis/sequences.pyx":1399
 * 
 * 	def __init__(self, trainingSequences, pseudoCounts = True, addComplements = True):
 * 		self.pseudoCounts = pseudoCounts             # <<<<<<<<<<<<<<
 * 		self.addComplements = addComplements
 * 		self.trainingSequences = trainingSequences
 */
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_pseudoCounts); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1399, __pyx_L1_error)
  __pyx_v_self->pseudoCounts = __pyx_t_1;

  /* "gnocis/sequences.pyx":1400
 * 	def __init__(self, trainingSequences, pseudoCounts = True, addComplements = True):
 * 		self.pseudoCounts = pseudoCounts
 * 		self.addComplements = addComplements             # <<<<<<<<<<<<<<
 * 		self.trainingSequences = trainingSequences
 * 		self.nGenerated = 0
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_addComplements); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1400, __pyx_L1_error)
  __pyx_v_self->addComplements = __pyx_t_2;

  /* "gnocis/sequences.pyx":1401
 * 		self.pseudoCounts = pseudoCounts
 * 		self.addComplements = addComplements
 * 		self.trainingSequences = trainingSequences             # <<<<<<<<<<<<<<
 * 		self.nGenerated = 0
 * 		self.prepared = False
 */
  __Pyx_INCREF(__pyx_v_trainingSequences);
  __Pyx_GIVEREF(__pyx_v_trainingSequences);
  __Pyx_GOTREF(__pyx_v_self->trainingSequences);
  __Pyx_DECREF(__pyx_v_self->trainingSequences);
  __pyx_v_self->trainingSequences = __pyx_v_trainingSequences;

  /* "gnocis/sequences.pyx":1402
 * 		self.addComplements = addComplements
 * 		self.trainingSequences = trainingSequences
 * 		self.nGenerated = 0             # <<<<<<<<<<<<<<
 * 		self.prepared = False
 * 		# Initialize spectrum
 */
  __pyx_v_self->nGenerated = 0;

  /* "gnocis/sequences.pyx":1403
 * 		self.trainingSequences = trainingSequences
 * 		self.nGenerated = 0
 * 		self.prepared = False             # <<<<<<<<<<<<<<
 * 		# Initialize spectrum
 * 		self.spectrum = { nt: 0 for nt in nucleotides }
 */
  __pyx_v_self->prepared = 0;

  /* "gnocis/sequences.pyx":1405
 * 		self.prepared = False
 * 		# Initialize spectrum
 * 		self.spectrum = { nt: 0 for nt in nucleotides }             # <<<<<<<<<<<<<<
 * 		# Train
 * 		if trainingSequences == None:
 */
  { /* enter inner scope */
    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1405, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_nucleotides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1405, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
      __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1405, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1405, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1405, __pyx_L5_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1405, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1405, __pyx_L5_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1405, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_7(__pyx_t_5);
        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, 1405, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_XDECREF_SET(__pyx_9genexpr38__pyx_v_nt, __pyx_t_4);
      __pyx_t_4 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_3, (PyObject*)__pyx_9genexpr38__pyx_v_nt, (PyObject*)__pyx_int_0))) __PYX_ERR(0, 1405, __pyx_L5_error)
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_9genexpr38__pyx_v_nt); __pyx_9genexpr38__pyx_v_nt = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr38__pyx_v_nt); __pyx_9genexpr38__pyx_v_nt = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->spectrum);
  __Pyx_DECREF(__pyx_v_self->spectrum);
  __pyx_v_self->spectrum = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "gnocis/sequences.pyx":1407
 * 		self.spectrum = { nt: 0 for nt in nucleotides }
 * 		# Train
 * 		if trainingSequences == None:             # <<<<<<<<<<<<<<
 * 			return
 * 		if isinstance(trainingSequences, str):
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_trainingSequences, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1407, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1407, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_8) {

    /* "gnocis/sequences.pyx":1408
 * 		# Train
 * 		if trainingSequences == None:
 * 			return             # <<<<<<<<<<<<<<
 * 		if isinstance(trainingSequences, str):
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 */
    __pyx_r = 0;
    goto __pyx_L0;

    /* "gnocis/sequences.pyx":1407
 * 		self.spectrum = { nt: 0 for nt in nucleotides }
 * 		# Train
 * 		if trainingSequences == None:             # <<<<<<<<<<<<<<
 * 			return
 * 		if isinstance(trainingSequences, str):
 */
  }

  /* "gnocis/sequences.pyx":1409
 * 		if trainingSequences == None:
 * 			return
 * 		if isinstance(trainingSequences, str):             # <<<<<<<<<<<<<<
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':
 */
  __pyx_t_8 = PyUnicode_Check(__pyx_v_trainingSequences); 
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (__pyx_t_9) {

    /* "gnocis/sequences.pyx":1410
 * 			return
 * 		if isinstance(trainingSequences, str):
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)             # <<<<<<<<<<<<<<
 * 		if type(trainingSequences).__name__ == 'genome':
 * 			trainingSequences = trainingSequences.sequences
 */
    __pyx_t_3 = __pyx_f_6gnocis_9sequences_getSequenceStreamFromPath(__pyx_v_trainingSequences, 0, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_trainingSequences, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1409
 * 		if trainingSequences == None:
 * 			return
 * 		if isinstance(trainingSequences, str):             # <<<<<<<<<<<<<<
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':
 */
  }

  /* "gnocis/sequences.pyx":1411
 * 		if isinstance(trainingSequences, str):
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':             # <<<<<<<<<<<<<<
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_trainingSequences)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_n_u_genome, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_9) {

    /* "gnocis/sequences.pyx":1412
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':
 * 			trainingSequences = trainingSequences.sequences             # <<<<<<<<<<<<<<
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 * 			self._trainOnSequences(trainingSequences)
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_trainingSequences, __pyx_n_s_sequences); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1412, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_trainingSequences, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1411
 * 		if isinstance(trainingSequences, str):
 * 			trainingSequences = getSequenceStreamFromPath(trainingSequences)
 * 		if type(trainingSequences).__name__ == 'genome':             # <<<<<<<<<<<<<<
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 */
  }

  /* "gnocis/sequences.pyx":1413
 * 		if type(trainingSequences).__name__ == 'genome':
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):             # <<<<<<<<<<<<<<
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()
 */
  __pyx_t_8 = __Pyx_TypeCheck(__pyx_v_trainingSequences, __pyx_ptype_6gnocis_9sequences_sequences); 
  __pyx_t_10 = (__pyx_t_8 != 0);
  if (!__pyx_t_10) {
  } else {
    __pyx_t_9 = __pyx_t_10;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_10 = PyList_Check(__pyx_v_trainingSequences); 
  __pyx_t_8 = (__pyx_t_10 != 0);
  __pyx_t_9 = __pyx_t_8;
  __pyx_L13_bool_binop_done:;
  if (__pyx_t_9) {

    /* "gnocis/sequences.pyx":1414
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 * 			self._trainOnSequences(trainingSequences)             # <<<<<<<<<<<<<<
 * 			self._prepare()
 * 		elif isinstance(trainingSequences, sequenceStream):
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trainOnSequences); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_trainingSequences) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_trainingSequences);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1415
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()             # <<<<<<<<<<<<<<
 * 		elif isinstance(trainingSequences, sequenceStream):
 * 			self._trainOnSequenceStream(trainingSequences)
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prepare); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1413
 * 		if type(trainingSequences).__name__ == 'genome':
 * 			trainingSequences = trainingSequences.sequences
 * 		if isinstance(trainingSequences, sequences) or isinstance(trainingSequences, list):             # <<<<<<<<<<<<<<
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()
 */
    goto __pyx_L12;
  }

  /* "gnocis/sequences.pyx":1416
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()
 * 		elif isinstance(trainingSequences, sequenceStream):             # <<<<<<<<<<<<<<
 * 			self._trainOnSequenceStream(trainingSequences)
 * 			self._prepare()
 */
  __pyx_t_9 = __Pyx_TypeCheck(__pyx_v_trainingSequences, __pyx_ptype_6gnocis_9sequences_sequenceStream); 
  __pyx_t_8 = (__pyx_t_9 != 0);
  if (__pyx_t_8) {

    /* "gnocis/sequences.pyx":1417
 * 			self._prepare()
 * 		elif isinstance(trainingSequences, sequenceStream):
 * 			self._trainOnSequenceStream(trainingSequences)             # <<<<<<<<<<<<<<
 * 			self._prepare()
 * 
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trainOnSequenceStream); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_trainingSequences) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_trainingSequences);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1418
 * 		elif isinstance(trainingSequences, sequenceStream):
 * 			self._trainOnSequenceStream(trainingSequences)
 * 			self._prepare()             # <<<<<<<<<<<<<<
 * 
 * 	def __str__(self):
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_prepare); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "gnocis/sequences.pyx":1416
 * 			self._trainOnSequences(trainingSequences)
 * 			self._prepare()
 * 		elif isinstance(trainingSequences, sequenceStream):             # <<<<<<<<<<<<<<
 * 			self._trainOnSequenceStream(trainingSequences)
 * 			self._prepare()
 */
  }
  __pyx_L12:;

  /* "gnocis/sequences.pyx":1398
 * 	"""
 * 
 * 	def __init__(self, trainingSequences, pseudoCounts = True, addComplements = True):             # <<<<<<<<<<<<<<
 * 		self.pseudoCounts = pseudoCounts
 * 		self.addComplements = addComplements
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.IID.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_9genexpr38__pyx_v_nt);
  __Pyx_XDECREF(__pyx_v_trainingSequences);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1420
 * 			self._prepare()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'IID<Pseudocounts: %d; Add complements: %s; Training set: %s>'%(self.pseudoCounts, 'Yes' if self.addComplements else 'No', self.trainingSequences)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_3__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_3__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_2__str__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_2__str__(struct __pyx_obj_6gnocis_9sequences_IID *__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("__str__", 0);

  /* "gnocis/sequences.pyx":1421
 * 
 * 	def __str__(self):
 * 		return 'IID<Pseudocounts: %d; Add complements: %s; Training set: %s>'%(self.pseudoCounts, 'Yes' if self.addComplements else 'No', self.trainingSequences)             # <<<<<<<<<<<<<<
 * 
 * 	def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_IID_Pseudocounts);
  __pyx_t_2 += 18;
  __Pyx_GIVEREF(__pyx_kp_u_IID_Pseudocounts);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_IID_Pseudocounts);
  __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_self->pseudoCounts, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_Add_complements);
  __pyx_t_2 += 19;
  __Pyx_GIVEREF(__pyx_kp_u_Add_complements);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_Add_complements);
  if ((__pyx_v_self->addComplements != 0)) {
    __Pyx_INCREF(__pyx_n_u_Yes);
    __pyx_t_4 = __pyx_n_u_Yes;
  } else {
    __Pyx_INCREF(__pyx_n_u_No);
    __pyx_t_4 = __pyx_n_u_No;
  }
  __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1421, __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, 3, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_Training_set);
  __pyx_t_2 += 16;
  __Pyx_GIVEREF(__pyx_kp_u_Training_set);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_Training_set);
  __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_v_self->trainingSequences), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __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, 5, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u_);
  PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u_);
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 7, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":1420
 * 			self._prepare()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'IID<Pseudocounts: %d; Add complements: %s; Training set: %s>'%(self.pseudoCounts, 'Yes' if self.addComplements else 'No', self.trainingSequences)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.IID.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1423
 * 		return 'IID<Pseudocounts: %d; Add complements: %s; Training set: %s>'%(self.pseudoCounts, 'Yes' if self.addComplements else 'No', self.trainingSequences)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_5__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_4__repr__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_4__repr__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "gnocis/sequences.pyx":1424
 * 
 * 	def __repr__(self):
 * 		return self.__str__()             # <<<<<<<<<<<<<<
 * 
 * 	# Trains model on a sequence seq
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1424, __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;

  /* "gnocis/sequences.pyx":1423
 * 		return 'IID<Pseudocounts: %d; Add complements: %s; Training set: %s>'%(self.pseudoCounts, 'Yes' if self.addComplements else 'No', self.trainingSequences)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("gnocis.sequences.IID.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1427
 * 
 * 	# Trains model on a sequence seq
 * 	def _trainOnSequences(self, trainingSequences):             # <<<<<<<<<<<<<<
 * 		"""Trains on sequences.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_7_trainOnSequences(PyObject *__pyx_v_self, PyObject *__pyx_v_trainingSequences); /*proto*/
static char __pyx_doc_6gnocis_9sequences_3IID_6_trainOnSequences[] = "Trains on sequences.\n\t\t\n\t\t:param trainingSequences: Training sequences.\n\t\t:type trainingSequences: sequences\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_7_trainOnSequences(PyObject *__pyx_v_self, PyObject *__pyx_v_trainingSequences) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_trainOnSequences (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_6_trainOnSequences(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_trainingSequences));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_6_trainOnSequences(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_trainingSequences) {
  PyObject *__pyx_v_seq = 0;
  PyObject *__pyx_v_nt = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  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;
  Py_ssize_t __pyx_t_7;
  PyObject *(*__pyx_t_8)(PyObject *);
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_trainOnSequences", 0);

  /* "gnocis/sequences.pyx":1435
 * 		cdef object seq
 * 		cdef str nt
 * 		if self.prepared:             # <<<<<<<<<<<<<<
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:
 */
  __pyx_t_1 = (__pyx_v_self->prepared != 0);
  if (unlikely(__pyx_t_1)) {

    /* "gnocis/sequences.pyx":1436
 * 		cdef str nt
 * 		if self.prepared:
 * 			raise Exception('Tried to train IID model that is already prepared for use')             # <<<<<<<<<<<<<<
 * 		for seq in trainingSequences:
 * 			for nt in seq.seq:
 */
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1436, __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, 1436, __pyx_L1_error)

    /* "gnocis/sequences.pyx":1435
 * 		cdef object seq
 * 		cdef str nt
 * 		if self.prepared:             # <<<<<<<<<<<<<<
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:
 */
  }

  /* "gnocis/sequences.pyx":1437
 * 		if self.prepared:
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:             # <<<<<<<<<<<<<<
 * 			for nt in seq.seq:
 * 				if not nt in nucleotides: continue
 */
  if (likely(PyList_CheckExact(__pyx_v_trainingSequences)) || PyTuple_CheckExact(__pyx_v_trainingSequences)) {
    __pyx_t_2 = __pyx_v_trainingSequences; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_trainingSequences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1437, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1437, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1437, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1437, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1437, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      }
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1437, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XDECREF_SET(__pyx_v_seq, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "gnocis/sequences.pyx":1438
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:
 * 			for nt in seq.seq:             # <<<<<<<<<<<<<<
 * 				if not nt in nucleotides: continue
 * 				self.spectrum[nt] += 1
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_seq, __pyx_n_s_seq); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
      __pyx_t_6 = __pyx_t_5; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1438, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1438, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_6))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1438, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1438, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1438, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1438, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_8(__pyx_t_6);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1438, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 1438, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_nt, ((PyObject*)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "gnocis/sequences.pyx":1439
 * 		for seq in trainingSequences:
 * 			for nt in seq.seq:
 * 				if not nt in nucleotides: continue             # <<<<<<<<<<<<<<
 * 				self.spectrum[nt] += 1
 * 
 */
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_nucleotides); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1439, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_nt, __pyx_t_5, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1439, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_9 = (__pyx_t_1 != 0);
      if (__pyx_t_9) {
        goto __pyx_L6_continue;
      }

      /* "gnocis/sequences.pyx":1440
 * 			for nt in seq.seq:
 * 				if not nt in nucleotides: continue
 * 				self.spectrum[nt] += 1             # <<<<<<<<<<<<<<
 * 
 * 	# Trains model on a sequence stream
 */
      if (unlikely(__pyx_v_self->spectrum == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1440, __pyx_L1_error)
      }
      __Pyx_INCREF(__pyx_v_self->spectrum);
      __pyx_t_10 = __pyx_v_self->spectrum;
      __Pyx_INCREF(__pyx_v_nt);
      __pyx_t_11 = __pyx_v_nt;
      if (unlikely(__pyx_t_10 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1440, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1440, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_12 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1440, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__pyx_t_10 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1440, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_t_10, __pyx_t_11, __pyx_t_12) < 0)) __PYX_ERR(0, 1440, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;

      /* "gnocis/sequences.pyx":1438
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:
 * 			for nt in seq.seq:             # <<<<<<<<<<<<<<
 * 				if not nt in nucleotides: continue
 * 				self.spectrum[nt] += 1
 */
      __pyx_L6_continue:;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "gnocis/sequences.pyx":1437
 * 		if self.prepared:
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:             # <<<<<<<<<<<<<<
 * 			for nt in seq.seq:
 * 				if not nt in nucleotides: continue
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1427
 * 
 * 	# Trains model on a sequence seq
 * 	def _trainOnSequences(self, trainingSequences):             # <<<<<<<<<<<<<<
 * 		"""Trains on sequences.
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("gnocis.sequences.IID._trainOnSequences", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seq);
  __Pyx_XDECREF(__pyx_v_nt);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1443
 * 
 * 	# Trains model on a sequence stream
 * 	def _trainOnSequenceStream(self, trainingSequences):             # <<<<<<<<<<<<<<
 * 		"""Trains on sequence stream.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_9_trainOnSequenceStream(PyObject *__pyx_v_self, PyObject *__pyx_v_trainingSequences); /*proto*/
static char __pyx_doc_6gnocis_9sequences_3IID_8_trainOnSequenceStream[] = "Trains on sequence stream.\n\t\t\n\t\t:param trainingSequences: Training sequences.\n\t\t:type trainingSequences: sequenceStream\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_9_trainOnSequenceStream(PyObject *__pyx_v_self, PyObject *__pyx_v_trainingSequences) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_trainOnSequenceStream (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_8_trainOnSequenceStream(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_trainingSequences));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8_trainOnSequenceStream(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_trainingSequences) {
  PyObject *__pyx_v_seq = 0;
  PyObject *__pyx_v_blk = 0;
  PyObject *__pyx_v_nt = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  void *__pyx_t_12;
  int __pyx_t_13;
  int __pyx_t_14;
  Py_ssize_t __pyx_t_15;
  int __pyx_t_16;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_trainOnSequenceStream", 0);

  /* "gnocis/sequences.pyx":1451
 * 		cdef object seq
 * 		cdef str blk, nt
 * 		if self.prepared:             # <<<<<<<<<<<<<<
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:
 */
  __pyx_t_1 = (__pyx_v_self->prepared != 0);
  if (unlikely(__pyx_t_1)) {

    /* "gnocis/sequences.pyx":1452
 * 		cdef str blk, nt
 * 		if self.prepared:
 * 			raise Exception('Tried to train IID model that is already prepared for use')             # <<<<<<<<<<<<<<
 * 		for seq in trainingSequences:
 * 			for blk in seq:
 */
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1452, __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, 1452, __pyx_L1_error)

    /* "gnocis/sequences.pyx":1451
 * 		cdef object seq
 * 		cdef str blk, nt
 * 		if self.prepared:             # <<<<<<<<<<<<<<
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:
 */
  }

  /* "gnocis/sequences.pyx":1453
 * 		if self.prepared:
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:             # <<<<<<<<<<<<<<
 * 			for blk in seq:
 * 				for nt in blk:
 */
  if (likely(PyList_CheckExact(__pyx_v_trainingSequences)) || PyTuple_CheckExact(__pyx_v_trainingSequences)) {
    __pyx_t_2 = __pyx_v_trainingSequences; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_trainingSequences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1453, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1453, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1453, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1453, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 1453, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1453, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      }
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1453, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XDECREF_SET(__pyx_v_seq, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "gnocis/sequences.pyx":1454
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:
 * 			for blk in seq:             # <<<<<<<<<<<<<<
 * 				for nt in blk:
 * 					if not nt in nucleotides: continue
 */
    if (likely(PyList_CheckExact(__pyx_v_seq)) || PyTuple_CheckExact(__pyx_v_seq)) {
      __pyx_t_5 = __pyx_v_seq; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_seq); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1454, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1454, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1454, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1454, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1454, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1454, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        }
      } else {
        __pyx_t_8 = __pyx_t_7(__pyx_t_5);
        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, 1454, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_8);
      }
      if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 1454, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_blk, ((PyObject*)__pyx_t_8));
      __pyx_t_8 = 0;

      /* "gnocis/sequences.pyx":1455
 * 		for seq in trainingSequences:
 * 			for blk in seq:
 * 				for nt in blk:             # <<<<<<<<<<<<<<
 * 					if not nt in nucleotides: continue
 * 					self.spectrum[nt] += 1
 */
      if (unlikely(__pyx_v_blk == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
        __PYX_ERR(0, 1455, __pyx_L1_error)
      }
      __Pyx_INCREF(__pyx_v_blk);
      __pyx_t_9 = __pyx_v_blk;
      __pyx_t_14 = __Pyx_init_unicode_iteration(__pyx_t_9, (&__pyx_t_11), (&__pyx_t_12), (&__pyx_t_13)); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 1455, __pyx_L1_error)
      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_11; __pyx_t_15++) {
        __pyx_t_10 = __pyx_t_15;
        __pyx_t_8 = PyUnicode_FromOrdinal(__Pyx_PyUnicode_READ(__pyx_t_13, __pyx_t_12, __pyx_t_10)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1455, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 1455, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_nt, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;

        /* "gnocis/sequences.pyx":1456
 * 			for blk in seq:
 * 				for nt in blk:
 * 					if not nt in nucleotides: continue             # <<<<<<<<<<<<<<
 * 					self.spectrum[nt] += 1
 * 
 */
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_nucleotides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1456, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_nt, __pyx_t_8, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1456, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_16 = (__pyx_t_1 != 0);
        if (__pyx_t_16) {
          goto __pyx_L8_continue;
        }

        /* "gnocis/sequences.pyx":1457
 * 				for nt in blk:
 * 					if not nt in nucleotides: continue
 * 					self.spectrum[nt] += 1             # <<<<<<<<<<<<<<
 * 
 * 	# Prepares model for use
 */
        if (unlikely(__pyx_v_self->spectrum == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1457, __pyx_L1_error)
        }
        __Pyx_INCREF(__pyx_v_self->spectrum);
        __pyx_t_17 = __pyx_v_self->spectrum;
        __Pyx_INCREF(__pyx_v_nt);
        __pyx_t_18 = __pyx_v_nt;
        if (unlikely(__pyx_t_17 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1457, __pyx_L1_error)
        }
        __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_t_17, __pyx_t_18); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1457, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_19 = __Pyx_PyInt_AddObjC(__pyx_t_8, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1457, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(__pyx_t_17 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1457, __pyx_L1_error)
        }
        if (unlikely(PyDict_SetItem(__pyx_t_17, __pyx_t_18, __pyx_t_19) < 0)) __PYX_ERR(0, 1457, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __pyx_L8_continue:;
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "gnocis/sequences.pyx":1454
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:
 * 			for blk in seq:             # <<<<<<<<<<<<<<
 * 				for nt in blk:
 * 					if not nt in nucleotides: continue
 */
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "gnocis/sequences.pyx":1453
 * 		if self.prepared:
 * 			raise Exception('Tried to train IID model that is already prepared for use')
 * 		for seq in trainingSequences:             # <<<<<<<<<<<<<<
 * 			for blk in seq:
 * 				for nt in blk:
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1443
 * 
 * 	# Trains model on a sequence stream
 * 	def _trainOnSequenceStream(self, trainingSequences):             # <<<<<<<<<<<<<<
 * 		"""Trains on sequence stream.
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("gnocis.sequences.IID._trainOnSequenceStream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seq);
  __Pyx_XDECREF(__pyx_v_blk);
  __Pyx_XDECREF(__pyx_v_nt);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1460
 * 
 * 	# Prepares model for use
 * 	def _prepare(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Prepares model for use.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_11_prepare(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gnocis_9sequences_3IID_10_prepare[] = "\n\t\tPrepares model for use.\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_11_prepare(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_prepare (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_10_prepare(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_3IID_8_prepare_2generator27(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":1473
 * 				self.spectrum[nt] += self.pseudoCounts
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 * 		ntT = sum( self.spectrum[nt] for nt in nucleotides )             # <<<<<<<<<<<<<<
 * 		self.ntDistribution = [ (nt, float(self.spectrum[nt])/ ntT) for nt in nucleotides ]
 * 		self.prepared = True
 */

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8_prepare_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_36_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_36_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1473, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_3IID_8_prepare_2generator27, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_prepare_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 1473, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.IID._prepare.genexpr", __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_6gnocis_9sequences_3IID_8_prepare_2generator27(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 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, 1473, __pyx_L1_error)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_nucleotides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1473, __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, 1473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1473, __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, 1473, __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, 1473, __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, 1473, __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, 1473, __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, 1473, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_nt);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_nt, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1473, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->spectrum == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 1473, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->spectrum, __pyx_cur_scope->__pyx_v_nt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    __Pyx_XGIVEREF(__pyx_t_2);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_4;
    __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_2 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1473, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

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

/* "gnocis/sequences.pyx":1460
 * 
 * 	# Prepares model for use
 * 	def _prepare(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Prepares model for use.
 */

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_10_prepare(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *__pyx_cur_scope;
  PyObject *__pyx_v_newSpectrum = NULL;
  PyObject *__pyx_v_nt = NULL;
  PyObject *__pyx_v_ntT = NULL;
  PyObject *__pyx_9genexpr39__pyx_v_nt = NULL;
  PyObject *__pyx_gb_6gnocis_9sequences_3IID_8_prepare_2generator27 = 0;
  PyObject *__pyx_9genexpr41__pyx_v_nt = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  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 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_prepare", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_35__prepare(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_35__prepare, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1460, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);

  /* "gnocis/sequences.pyx":1465
 * 		"""
 * 		# Add complements
 * 		if self.addComplements:             # <<<<<<<<<<<<<<
 * 			newSpectrum = { nt: (self.spectrum[nt] + self.spectrum[complementaryNucleotides[nt]]) for nt in nucleotides }
 * 			self.spectrum = newSpectrum
 */
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_self->addComplements != 0);
  if (__pyx_t_1) {

    /* "gnocis/sequences.pyx":1466
 * 		# Add complements
 * 		if self.addComplements:
 * 			newSpectrum = { nt: (self.spectrum[nt] + self.spectrum[complementaryNucleotides[nt]]) for nt in nucleotides }             # <<<<<<<<<<<<<<
 * 			self.spectrum = newSpectrum
 * 		# Add pseudocounts
 */
    { /* enter inner scope */
      __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1466, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_nucleotides); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1466, __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, 1466, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1466, __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, 1466, __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, 1466, __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, 1466, __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, 1466, __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, 1466, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_XDECREF_SET(__pyx_9genexpr39__pyx_v_nt, __pyx_t_3);
        __pyx_t_3 = 0;
        if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1466, __pyx_L6_error)
        }
        __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->spectrum, __pyx_9genexpr39__pyx_v_nt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1466, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1466, __pyx_L6_error)
        }
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_complementaryNucleotides); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1466, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_9genexpr39__pyx_v_nt); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1466, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->spectrum, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1466, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = PyNumber_Add(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1466, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(PyDict_SetItem(__pyx_t_2, (PyObject*)__pyx_9genexpr39__pyx_v_nt, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 1466, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_9genexpr39__pyx_v_nt); __pyx_9genexpr39__pyx_v_nt = 0;
      goto __pyx_L9_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_9genexpr39__pyx_v_nt); __pyx_9genexpr39__pyx_v_nt = 0;
      goto __pyx_L1_error;
      __pyx_L9_exit_scope:;
    } /* exit inner scope */
    __pyx_v_newSpectrum = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":1467
 * 		if self.addComplements:
 * 			newSpectrum = { nt: (self.spectrum[nt] + self.spectrum[complementaryNucleotides[nt]]) for nt in nucleotides }
 * 			self.spectrum = newSpectrum             # <<<<<<<<<<<<<<
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:
 */
    __Pyx_INCREF(__pyx_v_newSpectrum);
    __Pyx_GIVEREF(__pyx_v_newSpectrum);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->spectrum);
    __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->spectrum);
    __pyx_cur_scope->__pyx_v_self->spectrum = __pyx_v_newSpectrum;

    /* "gnocis/sequences.pyx":1465
 * 		"""
 * 		# Add complements
 * 		if self.addComplements:             # <<<<<<<<<<<<<<
 * 			newSpectrum = { nt: (self.spectrum[nt] + self.spectrum[complementaryNucleotides[nt]]) for nt in nucleotides }
 * 			self.spectrum = newSpectrum
 */
  }

  /* "gnocis/sequences.pyx":1469
 * 			self.spectrum = newSpectrum
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:             # <<<<<<<<<<<<<<
 * 			for nt in ['A','T','G','C']:
 * 				self.spectrum[nt] += self.pseudoCounts
 */
  __pyx_t_1 = ((__pyx_cur_scope->__pyx_v_self->pseudoCounts > 0) != 0);
  if (__pyx_t_1) {

    /* "gnocis/sequences.pyx":1470
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:
 * 			for nt in ['A','T','G','C']:             # <<<<<<<<<<<<<<
 * 				self.spectrum[nt] += self.pseudoCounts
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 */
    __pyx_t_2 = __pyx_tuple__33; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
    for (;;) {
      if (__pyx_t_5 >= 4) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1470, __pyx_L1_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1470, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_nt, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;

      /* "gnocis/sequences.pyx":1471
 * 		if self.pseudoCounts > 0:
 * 			for nt in ['A','T','G','C']:
 * 				self.spectrum[nt] += self.pseudoCounts             # <<<<<<<<<<<<<<
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 * 		ntT = sum( self.spectrum[nt] for nt in nucleotides )
 */
      if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1471, __pyx_L1_error)
      }
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->spectrum);
      __pyx_t_9 = __pyx_cur_scope->__pyx_v_self->spectrum;
      __Pyx_INCREF(__pyx_v_nt);
      __pyx_t_10 = __pyx_v_nt;
      if (unlikely(__pyx_t_9 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1471, __pyx_L1_error)
      }
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_cur_scope->__pyx_v_self->pseudoCounts); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(__pyx_t_9 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1471, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_t_9, __pyx_t_10, __pyx_t_7) < 0)) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "gnocis/sequences.pyx":1470
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:
 * 			for nt in ['A','T','G','C']:             # <<<<<<<<<<<<<<
 * 				self.spectrum[nt] += self.pseudoCounts
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":1469
 * 			self.spectrum = newSpectrum
 * 		# Add pseudocounts
 * 		if self.pseudoCounts > 0:             # <<<<<<<<<<<<<<
 * 			for nt in ['A','T','G','C']:
 * 				self.spectrum[nt] += self.pseudoCounts
 */
  }

  /* "gnocis/sequences.pyx":1473
 * 				self.spectrum[nt] += self.pseudoCounts
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 * 		ntT = sum( self.spectrum[nt] for nt in nucleotides )             # <<<<<<<<<<<<<<
 * 		self.ntDistribution = [ (nt, float(self.spectrum[nt])/ ntT) for nt in nucleotides ]
 * 		self.prepared = True
 */
  __pyx_t_2 = __pyx_pf_6gnocis_9sequences_3IID_8_prepare_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_sum, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_ntT = __pyx_t_7;
  __pyx_t_7 = 0;

  /* "gnocis/sequences.pyx":1474
 * 		# Generate normalized sequence spectrum with occurrence probabilities
 * 		ntT = sum( self.spectrum[nt] for nt in nucleotides )
 * 		self.ntDistribution = [ (nt, float(self.spectrum[nt])/ ntT) for nt in nucleotides ]             # <<<<<<<<<<<<<<
 * 		self.prepared = True
 * 
 */
  { /* enter inner scope */
    __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1474, __pyx_L15_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_nucleotides); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1474, __pyx_L15_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
      __pyx_t_8 = __pyx_t_2; __Pyx_INCREF(__pyx_t_8); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1474, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1474, __pyx_L15_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    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_2 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1474, __pyx_L15_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1474, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1474, __pyx_L15_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1474, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_6(__pyx_t_8);
        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, 1474, __pyx_L15_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_9genexpr41__pyx_v_nt, __pyx_t_2);
      __pyx_t_2 = 0;
      if (unlikely(__pyx_cur_scope->__pyx_v_self->spectrum == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1474, __pyx_L15_error)
      }
      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->spectrum, __pyx_9genexpr41__pyx_v_nt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1474, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyNumber_Float(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1474, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_v_ntT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1474, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1474, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_9genexpr41__pyx_v_nt);
      __Pyx_GIVEREF(__pyx_9genexpr41__pyx_v_nt);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_9genexpr41__pyx_v_nt);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
      __pyx_t_2 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 1474, __pyx_L15_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_9genexpr41__pyx_v_nt); __pyx_9genexpr41__pyx_v_nt = 0;
    goto __pyx_L18_exit_scope;
    __pyx_L15_error:;
    __Pyx_XDECREF(__pyx_9genexpr41__pyx_v_nt); __pyx_9genexpr41__pyx_v_nt = 0;
    goto __pyx_L1_error;
    __pyx_L18_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_7);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->ntDistribution);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->ntDistribution);
  __pyx_cur_scope->__pyx_v_self->ntDistribution = ((PyObject*)__pyx_t_7);
  __pyx_t_7 = 0;

  /* "gnocis/sequences.pyx":1475
 * 		ntT = sum( self.spectrum[nt] for nt in nucleotides )
 * 		self.ntDistribution = [ (nt, float(self.spectrum[nt])/ ntT) for nt in nucleotides ]
 * 		self.prepared = True             # <<<<<<<<<<<<<<
 * 
 * 	# Generates a sequence
 */
  __pyx_cur_scope->__pyx_v_self->prepared = 1;

  /* "gnocis/sequences.pyx":1460
 * 
 * 	# Prepares model for use
 * 	def _prepare(self):             # <<<<<<<<<<<<<<
 * 		"""
 * 		Prepares model for use.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("gnocis.sequences.IID._prepare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_newSpectrum);
  __Pyx_XDECREF(__pyx_v_nt);
  __Pyx_XDECREF(__pyx_v_ntT);
  __Pyx_XDECREF(__pyx_9genexpr39__pyx_v_nt);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_3IID_8_prepare_2generator27);
  __Pyx_XDECREF(__pyx_9genexpr41__pyx_v_nt);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pyx":1478
 * 
 * 	# Generates a sequence
 * 	def generate(self, length):             # <<<<<<<<<<<<<<
 * 		""" Generates a sequence.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_13generate(PyObject *__pyx_v_self, PyObject *__pyx_v_length); /*proto*/
static char __pyx_doc_6gnocis_9sequences_3IID_12generate[] = " Generates a sequence.\n\t\t\n\t\t:param length: Length of the sequence to generate.\n\t\t:type length: int\n\t\t\n\t\t:return: Random sequence.\n\t\t:rtype: sequence\n\t\t";
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_13generate(PyObject *__pyx_v_self, PyObject *__pyx_v_length) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("generate (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_12generate(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_length));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6gnocis_9sequences_3IID_8generate_2generator28(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "gnocis/sequences.pyx":1491
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		seq = ''.join( weightedRandomChoice(self.ntDistribution) for _ in range(length) )             # <<<<<<<<<<<<<<
 * 		self.nGenerated += 1
 * 		return sequence('Generated sequence <Length: %d, Model: %s; Seed: %d>'%(length, str(self), seed), seq)
 */

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8generate_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_38_genexpr(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_38_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1491, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6gnocis_9sequences_3IID_8generate_2generator28, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_generate_locals_genexpr, __pyx_n_s_gnocis_sequences); if (unlikely(!gen)) __PYX_ERR(0, 1491, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.IID.generate.genexpr", __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_6gnocis_9sequences_3IID_8generate_2generator28(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *__pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_length)) { __Pyx_RaiseClosureNameError("length"); __PYX_ERR(0, 1491, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1491, __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, 1491, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1491, __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, 1491, __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, 1491, __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, 1491, __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, 1491, __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, 1491, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v__);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v__, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_weightedRandomChoice); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1491, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1491, __pyx_L1_error) }
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->ntDistribution) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->ntDistribution);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1491, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1491, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #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;
}

/* "gnocis/sequences.pyx":1478
 * 
 * 	# Generates a sequence
 * 	def generate(self, length):             # <<<<<<<<<<<<<<
 * 		""" Generates a sequence.
 * 
 */

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_12generate(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_length) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *__pyx_cur_scope;
  PyObject *__pyx_v_seed = NULL;
  PyObject *__pyx_v_seq = NULL;
  PyObject *__pyx_gb_6gnocis_9sequences_3IID_8generate_2generator28 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  Py_UCS4 __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("generate", 0);
  __pyx_cur_scope = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *)__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_37_generate(__pyx_ptype_6gnocis_9sequences___pyx_scope_struct_37_generate, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1478, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_length = __pyx_v_length;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_length);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_length);

  /* "gnocis/sequences.pyx":1487
 * 		:rtype: sequence
 * 		"""
 * 		if not self.prepared:             # <<<<<<<<<<<<<<
 * 			self.prepare()
 * 		seed = random.randint(0, 0xFFFFFFFF)
 */
  __pyx_t_1 = ((!(__pyx_cur_scope->__pyx_v_self->prepared != 0)) != 0);
  if (__pyx_t_1) {

    /* "gnocis/sequences.pyx":1488
 * 		"""
 * 		if not self.prepared:
 * 			self.prepare()             # <<<<<<<<<<<<<<
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_prepare_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "gnocis/sequences.pyx":1487
 * 		:rtype: sequence
 * 		"""
 * 		if not self.prepared:             # <<<<<<<<<<<<<<
 * 			self.prepare()
 * 		seed = random.randint(0, 0xFFFFFFFF)
 */
  }

  /* "gnocis/sequences.pyx":1489
 * 		if not self.prepared:
 * 			self.prepare()
 * 		seed = random.randint(0, 0xFFFFFFFF)             # <<<<<<<<<<<<<<
 * 		random.seed(seed)
 * 		seq = ''.join( weightedRandomChoice(self.ntDistribution) for _ in range(length) )
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_randint); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_seed = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1490
 * 			self.prepare()
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)             # <<<<<<<<<<<<<<
 * 		seq = ''.join( weightedRandomChoice(self.ntDistribution) for _ in range(length) )
 * 		self.nGenerated += 1
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_seed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_seed) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_seed);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1491
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 * 		seq = ''.join( weightedRandomChoice(self.ntDistribution) for _ in range(length) )             # <<<<<<<<<<<<<<
 * 		self.nGenerated += 1
 * 		return sequence('Generated sequence <Length: %d, Model: %s; Seed: %d>'%(length, str(self), seed), seq)
 */
  __pyx_t_2 = __pyx_pf_6gnocis_9sequences_3IID_8generate_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_Generator_Next(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_seq = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1492
 * 		random.seed(seed)
 * 		seq = ''.join( weightedRandomChoice(self.ntDistribution) for _ in range(length) )
 * 		self.nGenerated += 1             # <<<<<<<<<<<<<<
 * 		return sequence('Generated sequence <Length: %d, Model: %s; Seed: %d>'%(length, str(self), seed), seq)
 * 
 */
  __pyx_cur_scope->__pyx_v_self->nGenerated = (__pyx_cur_scope->__pyx_v_self->nGenerated + 1);

  /* "gnocis/sequences.pyx":1493
 * 		seq = ''.join( weightedRandomChoice(self.ntDistribution) for _ in range(length) )
 * 		self.nGenerated += 1
 * 		return sequence('Generated sequence <Length: %d, Model: %s; Seed: %d>'%(length, str(self), seed), seq)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = 0;
  __pyx_t_6 = 127;
  __Pyx_INCREF(__pyx_kp_u_Generated_sequence_Length);
  __pyx_t_5 += 28;
  __Pyx_GIVEREF(__pyx_kp_u_Generated_sequence_Length);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Generated_sequence_Length);
  __pyx_t_4 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_cur_scope->__pyx_v_length), __pyx_n_u_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_6;
  __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_Model_2);
  __pyx_t_5 += 9;
  __Pyx_GIVEREF(__pyx_kp_u_Model_2);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_Model_2);
  __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_cur_scope->__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_6;
  __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_Seed);
  __pyx_t_5 += 8;
  __Pyx_GIVEREF(__pyx_kp_u_Seed);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_Seed);
  __pyx_t_4 = __Pyx_PyObject_FormatAndDecref(__Pyx_PyNumber_IntOrLong(__pyx_v_seed), __pyx_n_u_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_6;
  __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_);
  __pyx_t_5 += 1;
  __Pyx_GIVEREF(__pyx_kp_u_);
  PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_kp_u_);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_2, 7, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __Pyx_INCREF(__pyx_v_seq);
  __Pyx_GIVEREF(__pyx_v_seq);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_seq);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "gnocis/sequences.pyx":1478
 * 
 * 	# Generates a sequence
 * 	def generate(self, length):             # <<<<<<<<<<<<<<
 * 		""" Generates a sequence.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("gnocis.sequences.IID.generate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seed);
  __Pyx_XDECREF(__pyx_v_seq);
  __Pyx_XDECREF(__pyx_gb_6gnocis_9sequences_3IID_8generate_2generator28);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":80
 * cdef class IID(sequenceGenerator):
 * 
 * 	cdef public int pseudoCounts, nGenerated             # <<<<<<<<<<<<<<
 * 	cdef public bool addComplements, prepared
 * 	cdef public object trainingSequences
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_12pseudoCounts_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_12pseudoCounts_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_12pseudoCounts___get__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_12pseudoCounts___get__(struct __pyx_obj_6gnocis_9sequences_IID *__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_int(__pyx_v_self->pseudoCounts); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 80, __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("gnocis.sequences.IID.pseudoCounts.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_12pseudoCounts_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_12pseudoCounts_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_12pseudoCounts_2__set__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_3IID_12pseudoCounts_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 80, __pyx_L1_error)
  __pyx_v_self->pseudoCounts = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.IID.pseudoCounts.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_10nGenerated_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_10nGenerated_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_10nGenerated___get__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_10nGenerated___get__(struct __pyx_obj_6gnocis_9sequences_IID *__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_int(__pyx_v_self->nGenerated); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 80, __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("gnocis.sequences.IID.nGenerated.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_10nGenerated_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_10nGenerated_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_10nGenerated_2__set__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_3IID_10nGenerated_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 80, __pyx_L1_error)
  __pyx_v_self->nGenerated = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.IID.nGenerated.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":81
 * 
 * 	cdef public int pseudoCounts, nGenerated
 * 	cdef public bool addComplements, prepared             # <<<<<<<<<<<<<<
 * 	cdef public object trainingSequences
 * 	cdef public dict spectrum
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_14addComplements_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_14addComplements_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_14addComplements___get__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_14addComplements___get__(struct __pyx_obj_6gnocis_9sequences_IID *__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_PyBool_FromLong(__pyx_v_self->addComplements); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 81, __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("gnocis.sequences.IID.addComplements.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_14addComplements_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_14addComplements_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_14addComplements_2__set__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_3IID_14addComplements_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(1, 81, __pyx_L1_error)
  __pyx_v_self->addComplements = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.IID.addComplements.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_8prepared_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_8prepared_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_8prepared___get__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_8prepared___get__(struct __pyx_obj_6gnocis_9sequences_IID *__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_PyBool_FromLong(__pyx_v_self->prepared); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 81, __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("gnocis.sequences.IID.prepared.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_8prepared_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_8prepared_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_8prepared_2__set__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_3IID_8prepared_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(1, 81, __pyx_L1_error)
  __pyx_v_self->prepared = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("gnocis.sequences.IID.prepared.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "gnocis/sequences.pxd":82
 * 	cdef public int pseudoCounts, nGenerated
 * 	cdef public bool addComplements, prepared
 * 	cdef public object trainingSequences             # <<<<<<<<<<<<<<
 * 	cdef public dict spectrum
 * 	cdef public list ntDistribution
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_17trainingSequences___get__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_17trainingSequences_2__set__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_3IID_17trainingSequences_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->trainingSequences);
  __Pyx_DECREF(__pyx_v_self->trainingSequences);
  __pyx_v_self->trainingSequences = __pyx_v_value;

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_17trainingSequences_4__del__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_3IID_17trainingSequences_4__del__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->trainingSequences);
  __Pyx_DECREF(__pyx_v_self->trainingSequences);
  __pyx_v_self->trainingSequences = Py_None;

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

/* "gnocis/sequences.pxd":83
 * 	cdef public bool addComplements, prepared
 * 	cdef public object trainingSequences
 * 	cdef public dict spectrum             # <<<<<<<<<<<<<<
 * 	cdef public list ntDistribution
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_8spectrum_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_8spectrum_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_8spectrum___get__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_8spectrum_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_8spectrum_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_8spectrum_2__set__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_3IID_8spectrum_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 83, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->spectrum);
  __Pyx_DECREF(__pyx_v_self->spectrum);
  __pyx_v_self->spectrum = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.IID.spectrum.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_8spectrum_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_8spectrum_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_8spectrum_4__del__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_3IID_8spectrum_4__del__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->spectrum);
  __Pyx_DECREF(__pyx_v_self->spectrum);
  __pyx_v_self->spectrum = ((PyObject*)Py_None);

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

/* "gnocis/sequences.pxd":84
 * 	cdef public object trainingSequences
 * 	cdef public dict spectrum
 * 	cdef public list ntDistribution             # <<<<<<<<<<<<<<
 * 
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_14ntDistribution___get__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

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

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

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_14ntDistribution_2__set__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_6gnocis_9sequences_3IID_14ntDistribution_2__set__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 84, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->ntDistribution);
  __Pyx_DECREF(__pyx_v_self->ntDistribution);
  __pyx_v_self->ntDistribution = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.IID.ntDistribution.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_14ntDistribution_4__del__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static int __pyx_pf_6gnocis_9sequences_3IID_14ntDistribution_4__del__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->ntDistribution);
  __Pyx_DECREF(__pyx_v_self->ntDistribution);
  __pyx_v_self->ntDistribution = ((PyObject*)Py_None);

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_14__reduce_cython__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_14__reduce_cython__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  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_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.addComplements, self.nGenerated, self.ntDistribution, self.prepared, self.pseudoCounts, self.spectrum, self.trainingSequences)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->addComplements); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nGenerated); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->prepared); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->pseudoCounts); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_self->ntDistribution);
  __Pyx_GIVEREF(__pyx_v_self->ntDistribution);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_self->ntDistribution);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_t_4);
  __Pyx_INCREF(__pyx_v_self->spectrum);
  __Pyx_GIVEREF(__pyx_v_self->spectrum);
  PyTuple_SET_ITEM(__pyx_t_5, 5, __pyx_v_self->spectrum);
  __Pyx_INCREF(__pyx_v_self->trainingSequences);
  __Pyx_GIVEREF(__pyx_v_self->trainingSequences);
  PyTuple_SET_ITEM(__pyx_t_5, 6, __pyx_v_self->trainingSequences);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.addComplements, self.nGenerated, self.ntDistribution, self.prepared, self.pseudoCounts, self.spectrum, self.trainingSequences)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_5 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v__dict = __pyx_t_5;
  __pyx_t_5 = 0;

  /* "(tree fragment)":7
 *     state = (self.addComplements, self.nGenerated, self.ntDistribution, self.prepared, self.pseudoCounts, self.spectrum, self.trainingSequences)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_6 = (__pyx_v__dict != Py_None);
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v__dict);
    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.ntDistribution is not None or self.spectrum is not None or self.trainingSequences is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.addComplements, self.nGenerated, self.ntDistribution, self.prepared, self.pseudoCounts, self.spectrum, self.trainingSequences)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.ntDistribution is not None or self.spectrum is not None or self.trainingSequences is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, None), state
 */
  /*else*/ {
    __pyx_t_6 = (__pyx_v_self->ntDistribution != ((PyObject*)Py_None));
    __pyx_t_8 = (__pyx_t_6 != 0);
    if (!__pyx_t_8) {
    } else {
      __pyx_t_7 = __pyx_t_8;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_8 = (__pyx_v_self->spectrum != ((PyObject*)Py_None));
    __pyx_t_6 = (__pyx_t_8 != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_7 = __pyx_t_6;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_6 = (__pyx_v_self->trainingSequences != Py_None);
    __pyx_t_8 = (__pyx_t_6 != 0);
    __pyx_t_7 = __pyx_t_8;
    __pyx_L4_bool_binop_done:;
    __pyx_v_use_setstate = __pyx_t_7;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.ntDistribution is not None or self.spectrum is not None or self.trainingSequences is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, None), state
 *     else:
 */
  __pyx_t_7 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_7) {

    /* "(tree fragment)":13
 *         use_setstate = self.ntDistribution is not None or self.spectrum is not None or self.trainingSequences is not None
 *     if use_setstate:
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_IID); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_87241720);
    __Pyx_GIVEREF(__pyx_int_87241720);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_87241720);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_5, 2, Py_None);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state);
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.ntDistribution is not None or self.spectrum is not None or self.trainingSequences is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, None), state
 *     else:
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_IID__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_IID); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_87241720);
    __Pyx_GIVEREF(__pyx_int_87241720);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_87241720);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.IID.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_IID__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_6gnocis_9sequences_3IID_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6gnocis_9sequences_3IID_16__setstate_cython__(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_6gnocis_9sequences_3IID_16__setstate_cython__(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  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("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_IID__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_6gnocis_9sequences___pyx_unpickle_IID__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_IID, (type(self), 0x53333f8, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_IID__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("gnocis.sequences.IID.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_sequenceLabel(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_20__pyx_unpickle_sequenceLabel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_20__pyx_unpickle_sequenceLabel = {"__pyx_unpickle_sequenceLabel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_20__pyx_unpickle_sequenceLabel, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_20__pyx_unpickle_sequenceLabel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceLabel (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceLabel", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceLabel", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_sequenceLabel") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceLabel", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_19__pyx_unpickle_sequenceLabel(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_19__pyx_unpickle_sequenceLabel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceLabel", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xfa7a105:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xfa7a105 = (name, value))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xfa7a105) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xfa7a105:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xfa7a105 = (name, value))" % __pyx_checksum)
 *     __pyx_result = sequenceLabel.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0xfa7a105:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xfa7a105 = (name, value))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = sequenceLabel.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xfa, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xfa7a105:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xfa7a105 = (name, value))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xfa7a105 = (name, value))" % __pyx_checksum)
 *     __pyx_result = sequenceLabel.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceLabel__set_state(<sequenceLabel> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceLabel), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xfa7a105 = (name, value))" % __pyx_checksum)
 *     __pyx_result = sequenceLabel.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequenceLabel__set_state(<sequenceLabel> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = sequenceLabel.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceLabel__set_state(<sequenceLabel> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceLabel__set_state(sequenceLabel __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceLabel__set_state(((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xfa7a105 = (name, value))" % __pyx_checksum)
 *     __pyx_result = sequenceLabel.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequenceLabel__set_state(<sequenceLabel> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceLabel__set_state(<sequenceLabel> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_sequenceLabel__set_state(sequenceLabel __pyx_result, tuple __pyx_state):
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.value = __pyx_state[1]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_sequenceLabel(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_sequenceLabel__set_state(<sequenceLabel> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceLabel__set_state(sequenceLabel __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.value = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceLabel__set_state(struct __pyx_obj_6gnocis_9sequences_sequenceLabel *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  float __pyx_t_2;
  int __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceLabel__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceLabel__set_state(sequenceLabel __pyx_result, tuple __pyx_state):
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.value = __pyx_state[1]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->name);
  __Pyx_DECREF(__pyx_v___pyx_result->name);
  __pyx_v___pyx_result->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->value = __pyx_t_2;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_sequenceLabel__set_state(sequenceLabel __pyx_result, tuple __pyx_state):
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.value = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_5 = ((__pyx_t_4 > 2) != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_3 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_6 = (__pyx_t_5 != 0);
  __pyx_t_3 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {

    /* "(tree fragment)":14
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.value = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[2])             # <<<<<<<<<<<<<<
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_sequenceLabel__set_state(sequenceLabel __pyx_result, tuple __pyx_state):
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.value = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_sequenceLabel__set_state(<sequenceLabel> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceLabel__set_state(sequenceLabel __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.value = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 */

  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceLabel__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_sequence(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_22__pyx_unpickle_sequence(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_22__pyx_unpickle_sequence = {"__pyx_unpickle_sequence", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_22__pyx_unpickle_sequence, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_22__pyx_unpickle_sequence(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequence (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequence", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequence", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_sequence") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequence", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequence", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_21__pyx_unpickle_sequence(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_21__pyx_unpickle_sequence(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequence", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xac23688:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xac23688 = (annotation, cbytes, cbytesIndexed, labels, name, path, seq, sourceRegion))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xac23688) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xac23688:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xac23688 = (annotation, cbytes, cbytesIndexed, labels, name, path, seq, sourceRegion))" % __pyx_checksum)
 *     __pyx_result = sequence.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0xac23688:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xac23688 = (annotation, cbytes, cbytesIndexed, labels, name, path, seq, sourceRegion))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = sequence.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xac, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xac23688:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xac23688 = (annotation, cbytes, cbytesIndexed, labels, name, path, seq, sourceRegion))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xac23688 = (annotation, cbytes, cbytesIndexed, labels, name, path, seq, sourceRegion))" % __pyx_checksum)
 *     __pyx_result = sequence.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequence__set_state(<sequence> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequence), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xac23688 = (annotation, cbytes, cbytesIndexed, labels, name, path, seq, sourceRegion))" % __pyx_checksum)
 *     __pyx_result = sequence.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequence__set_state(<sequence> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = sequence.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequence__set_state(<sequence> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_sequence__set_state(sequence __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequence__set_state(((struct __pyx_obj_6gnocis_9sequences_sequence *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xac23688 = (annotation, cbytes, cbytesIndexed, labels, name, path, seq, sourceRegion))" % __pyx_checksum)
 *     __pyx_result = sequence.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequence__set_state(<sequence> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequence__set_state(<sequence> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_sequence__set_state(sequence __pyx_result, tuple __pyx_state):
 *     __pyx_result.annotation = __pyx_state[0]; __pyx_result.cbytes = __pyx_state[1]; __pyx_result.cbytesIndexed = __pyx_state[2]; __pyx_result.labels = __pyx_state[3]; __pyx_result.name = __pyx_state[4]; __pyx_result.path = __pyx_state[5]; __pyx_result.seq = __pyx_state[6]; __pyx_result.sourceRegion = __pyx_state[7]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_sequence(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequence", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_sequence__set_state(<sequence> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequence__set_state(sequence __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.annotation = __pyx_state[0]; __pyx_result.cbytes = __pyx_state[1]; __pyx_result.cbytesIndexed = __pyx_state[2]; __pyx_result.labels = __pyx_state[3]; __pyx_result.name = __pyx_state[4]; __pyx_result.path = __pyx_state[5]; __pyx_result.seq = __pyx_state[6]; __pyx_result.sourceRegion = __pyx_state[7]
 *     if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequence__set_state(struct __pyx_obj_6gnocis_9sequences_sequence *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequence__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_sequence__set_state(sequence __pyx_result, tuple __pyx_state):
 *     __pyx_result.annotation = __pyx_state[0]; __pyx_result.cbytes = __pyx_state[1]; __pyx_result.cbytesIndexed = __pyx_state[2]; __pyx_result.labels = __pyx_state[3]; __pyx_result.name = __pyx_state[4]; __pyx_result.path = __pyx_state[5]; __pyx_result.seq = __pyx_state[6]; __pyx_result.sourceRegion = __pyx_state[7]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[8])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->annotation);
  __Pyx_DECREF(__pyx_v___pyx_result->annotation);
  __pyx_v___pyx_result->annotation = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->cbytes);
  __Pyx_DECREF(__pyx_v___pyx_result->cbytes);
  __pyx_v___pyx_result->cbytes = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->cbytesIndexed);
  __Pyx_DECREF(__pyx_v___pyx_result->cbytesIndexed);
  __pyx_v___pyx_result->cbytesIndexed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->labels);
  __Pyx_DECREF(__pyx_v___pyx_result->labels);
  __pyx_v___pyx_result->labels = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->name);
  __Pyx_DECREF(__pyx_v___pyx_result->name);
  __pyx_v___pyx_result->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->path);
  __Pyx_DECREF(__pyx_v___pyx_result->path);
  __pyx_v___pyx_result->path = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->seq);
  __Pyx_DECREF(__pyx_v___pyx_result->seq);
  __pyx_v___pyx_result->seq = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6gnocis_7regions_region))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->sourceRegion);
  __Pyx_DECREF(((PyObject *)__pyx_v___pyx_result->sourceRegion));
  __pyx_v___pyx_result->sourceRegion = ((struct __pyx_obj_6gnocis_7regions_region *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_sequence__set_state(sequence __pyx_result, tuple __pyx_state):
 *     __pyx_result.annotation = __pyx_state[0]; __pyx_result.cbytes = __pyx_state[1]; __pyx_result.cbytesIndexed = __pyx_state[2]; __pyx_result.labels = __pyx_state[3]; __pyx_result.name = __pyx_state[4]; __pyx_result.path = __pyx_state[5]; __pyx_result.seq = __pyx_state[6]; __pyx_result.sourceRegion = __pyx_state[7]
 *     if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[8])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_4 = ((__pyx_t_3 > 8) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_5 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":14
 *     __pyx_result.annotation = __pyx_state[0]; __pyx_result.cbytes = __pyx_state[1]; __pyx_result.cbytesIndexed = __pyx_state[2]; __pyx_result.labels = __pyx_state[3]; __pyx_result.name = __pyx_state[4]; __pyx_result.path = __pyx_state[5]; __pyx_result.seq = __pyx_state[6]; __pyx_result.sourceRegion = __pyx_state[7]
 *     if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[8])             # <<<<<<<<<<<<<<
 */
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_sequence__set_state(sequence __pyx_result, tuple __pyx_state):
 *     __pyx_result.annotation = __pyx_state[0]; __pyx_result.cbytes = __pyx_state[1]; __pyx_result.cbytesIndexed = __pyx_state[2]; __pyx_result.labels = __pyx_state[3]; __pyx_result.name = __pyx_state[4]; __pyx_result.path = __pyx_state[5]; __pyx_result.seq = __pyx_state[6]; __pyx_result.sourceRegion = __pyx_state[7]
 *     if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[8])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_sequence__set_state(<sequence> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequence__set_state(sequence __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.annotation = __pyx_state[0]; __pyx_result.cbytes = __pyx_state[1]; __pyx_result.cbytesIndexed = __pyx_state[2]; __pyx_result.labels = __pyx_state[3]; __pyx_result.name = __pyx_state[4]; __pyx_result.path = __pyx_state[5]; __pyx_result.seq = __pyx_state[6]; __pyx_result.sourceRegion = __pyx_state[7]
 *     if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'):
 */

  /* 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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequence__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_sequences(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_24__pyx_unpickle_sequences(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_24__pyx_unpickle_sequences = {"__pyx_unpickle_sequences", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_24__pyx_unpickle_sequences, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_24__pyx_unpickle_sequences(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequences (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequences", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequences", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_sequences") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequences", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequences", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_23__pyx_unpickle_sequences(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_23__pyx_unpickle_sequences(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequences", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xb3d3e1e:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb3d3e1e = (name, sequences))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb3d3e1e) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xb3d3e1e:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb3d3e1e = (name, sequences))" % __pyx_checksum)
 *     __pyx_result = sequences.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0xb3d3e1e:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb3d3e1e = (name, sequences))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = sequences.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xb3d3e1e:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb3d3e1e = (name, sequences))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb3d3e1e = (name, sequences))" % __pyx_checksum)
 *     __pyx_result = sequences.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequences__set_state(<sequences> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequences), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb3d3e1e = (name, sequences))" % __pyx_checksum)
 *     __pyx_result = sequences.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequences__set_state(<sequences> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = sequences.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequences__set_state(<sequences> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_sequences__set_state(sequences __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequences__set_state(((struct __pyx_obj_6gnocis_9sequences_sequences *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb3d3e1e = (name, sequences))" % __pyx_checksum)
 *     __pyx_result = sequences.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequences__set_state(<sequences> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequences__set_state(<sequences> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_sequences__set_state(sequences __pyx_result, tuple __pyx_state):
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.sequences = __pyx_state[1]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_sequences(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequences", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_sequences__set_state(<sequences> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequences__set_state(sequences __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.sequences = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequences__set_state(struct __pyx_obj_6gnocis_9sequences_sequences *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequences__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_sequences__set_state(sequences __pyx_result, tuple __pyx_state):
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.sequences = __pyx_state[1]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->name);
  __Pyx_DECREF(__pyx_v___pyx_result->name);
  __pyx_v___pyx_result->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->sequences);
  __Pyx_DECREF(__pyx_v___pyx_result->sequences);
  __pyx_v___pyx_result->sequences = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_sequences__set_state(sequences __pyx_result, tuple __pyx_state):
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.sequences = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_4 = ((__pyx_t_3 > 2) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_5 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":14
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.sequences = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[2])             # <<<<<<<<<<<<<<
 */
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_sequences__set_state(sequences __pyx_result, tuple __pyx_state):
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.sequences = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_sequences__set_state(<sequences> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequences__set_state(sequences __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.sequences = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 */

  /* 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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequences__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_sequenceStream(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_26__pyx_unpickle_sequenceStream(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_26__pyx_unpickle_sequenceStream = {"__pyx_unpickle_sequenceStream", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_26__pyx_unpickle_sequenceStream, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_26__pyx_unpickle_sequenceStream(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceStream (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceStream", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceStream", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_sequenceStream") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceStream", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceStream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_25__pyx_unpickle_sequenceStream(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_25__pyx_unpickle_sequenceStream(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceStream", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xd41d8cd) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = sequenceStream.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0xd41d8cd:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = sequenceStream.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = sequenceStream.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceStream__set_state(<sequenceStream> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = sequenceStream.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequenceStream__set_state(<sequenceStream> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = sequenceStream.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceStream__set_state(<sequenceStream> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceStream__set_state(sequenceStream __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceStream__set_state(((struct __pyx_obj_6gnocis_9sequences_sequenceStream *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = sequenceStream.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequenceStream__set_state(<sequenceStream> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceStream__set_state(<sequenceStream> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_sequenceStream__set_state(sequenceStream __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_sequenceStream(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceStream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_sequenceStream__set_state(<sequenceStream> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceStream__set_state(sequenceStream __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceStream__set_state(struct __pyx_obj_6gnocis_9sequences_sequenceStream *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceStream__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceStream__set_state(sequenceStream __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_2 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 12, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_2 > 0) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 12, __pyx_L1_error)
  __pyx_t_4 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_sequenceStream__set_state(sequenceStream __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])             # <<<<<<<<<<<<<<
 */
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 13, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceStream__set_state(sequenceStream __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_sequenceStream__set_state(<sequenceStream> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceStream__set_state(sequenceStream __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceStream__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_streamFASTASeq(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_28__pyx_unpickle_streamFASTASeq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_28__pyx_unpickle_streamFASTASeq = {"__pyx_unpickle_streamFASTASeq", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_28__pyx_unpickle_streamFASTASeq, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_28__pyx_unpickle_streamFASTASeq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_streamFASTASeq (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_streamFASTASeq", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_streamFASTASeq", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_streamFASTASeq") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_streamFASTASeq", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_streamFASTASeq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_27__pyx_unpickle_streamFASTASeq(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_27__pyx_unpickle_streamFASTASeq(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_streamFASTASeq", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x656a346:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x656a346 = (fstream, lastLine, name, parsingCompleted, wantBlockSize))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x656a346) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x656a346:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x656a346 = (fstream, lastLine, name, parsingCompleted, wantBlockSize))" % __pyx_checksum)
 *     __pyx_result = streamFASTASeq.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0x656a346:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x656a346 = (fstream, lastLine, name, parsingCompleted, wantBlockSize))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = streamFASTASeq.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x65, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x656a346:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x656a346 = (fstream, lastLine, name, parsingCompleted, wantBlockSize))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x656a346 = (fstream, lastLine, name, parsingCompleted, wantBlockSize))" % __pyx_checksum)
 *     __pyx_result = streamFASTASeq.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_streamFASTASeq__set_state(<streamFASTASeq> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_streamFASTASeq), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x656a346 = (fstream, lastLine, name, parsingCompleted, wantBlockSize))" % __pyx_checksum)
 *     __pyx_result = streamFASTASeq.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_streamFASTASeq__set_state(<streamFASTASeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = streamFASTASeq.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_streamFASTASeq__set_state(<streamFASTASeq> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_streamFASTASeq__set_state(streamFASTASeq __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_streamFASTASeq__set_state(((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x656a346 = (fstream, lastLine, name, parsingCompleted, wantBlockSize))" % __pyx_checksum)
 *     __pyx_result = streamFASTASeq.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_streamFASTASeq__set_state(<streamFASTASeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_streamFASTASeq__set_state(<streamFASTASeq> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_streamFASTASeq__set_state(streamFASTASeq __pyx_result, tuple __pyx_state):
 *     __pyx_result.fstream = __pyx_state[0]; __pyx_result.lastLine = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.parsingCompleted = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_streamFASTASeq(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_streamFASTASeq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_streamFASTASeq__set_state(<streamFASTASeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_streamFASTASeq__set_state(streamFASTASeq __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.fstream = __pyx_state[0]; __pyx_result.lastLine = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.parsingCompleted = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_streamFASTASeq__set_state(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  bool __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_streamFASTASeq__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_streamFASTASeq__set_state(streamFASTASeq __pyx_result, tuple __pyx_state):
 *     __pyx_result.fstream = __pyx_state[0]; __pyx_result.lastLine = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.parsingCompleted = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[5])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->fstream);
  __Pyx_DECREF(__pyx_v___pyx_result->fstream);
  __pyx_v___pyx_result->fstream = __pyx_t_1;
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->lastLine);
  __Pyx_DECREF(__pyx_v___pyx_result->lastLine);
  __pyx_v___pyx_result->lastLine = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->name);
  __Pyx_DECREF(__pyx_v___pyx_result->name);
  __pyx_v___pyx_result->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->parsingCompleted = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->wantBlockSize = __pyx_t_3;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_streamFASTASeq__set_state(streamFASTASeq __pyx_result, tuple __pyx_state):
 *     __pyx_result.fstream = __pyx_state[0]; __pyx_result.lastLine = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.parsingCompleted = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[5])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_6 = ((__pyx_t_5 > 5) != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_4 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_6 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_7 = (__pyx_t_6 != 0);
  __pyx_t_4 = __pyx_t_7;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_4) {

    /* "(tree fragment)":14
 *     __pyx_result.fstream = __pyx_state[0]; __pyx_result.lastLine = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.parsingCompleted = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[5])             # <<<<<<<<<<<<<<
 */
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_update); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __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;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_streamFASTASeq__set_state(streamFASTASeq __pyx_result, tuple __pyx_state):
 *     __pyx_result.fstream = __pyx_state[0]; __pyx_result.lastLine = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.parsingCompleted = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[5])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_streamFASTASeq__set_state(<streamFASTASeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_streamFASTASeq__set_state(streamFASTASeq __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.fstream = __pyx_state[0]; __pyx_result.lastLine = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.parsingCompleted = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 */

  /* 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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_streamFASTASeq__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_stream2bitNBlock(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_30__pyx_unpickle_stream2bitNBlock(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_30__pyx_unpickle_stream2bitNBlock = {"__pyx_unpickle_stream2bitNBlock", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_30__pyx_unpickle_stream2bitNBlock, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_30__pyx_unpickle_stream2bitNBlock(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_stream2bitNBlock (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_stream2bitNBlock", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_stream2bitNBlock", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_stream2bitNBlock") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_stream2bitNBlock", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_stream2bitNBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_29__pyx_unpickle_stream2bitNBlock(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_29__pyx_unpickle_stream2bitNBlock(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_stream2bitNBlock", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x3439456:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x3439456 = (size, start))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x3439456) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x3439456:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x3439456 = (size, start))" % __pyx_checksum)
 *     __pyx_result = stream2bitNBlock.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0x3439456:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x3439456 = (size, start))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = stream2bitNBlock.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x34, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x3439456:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x3439456 = (size, start))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x3439456 = (size, start))" % __pyx_checksum)
 *     __pyx_result = stream2bitNBlock.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_stream2bitNBlock__set_state(<stream2bitNBlock> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_stream2bitNBlock), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x3439456 = (size, start))" % __pyx_checksum)
 *     __pyx_result = stream2bitNBlock.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_stream2bitNBlock__set_state(<stream2bitNBlock> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = stream2bitNBlock.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_stream2bitNBlock__set_state(<stream2bitNBlock> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitNBlock__set_state(stream2bitNBlock __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_stream2bitNBlock__set_state(((struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x3439456 = (size, start))" % __pyx_checksum)
 *     __pyx_result = stream2bitNBlock.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_stream2bitNBlock__set_state(<stream2bitNBlock> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_stream2bitNBlock__set_state(<stream2bitNBlock> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_stream2bitNBlock__set_state(stream2bitNBlock __pyx_result, tuple __pyx_state):
 *     __pyx_result.size = __pyx_state[0]; __pyx_result.start = __pyx_state[1]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_stream2bitNBlock(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_stream2bitNBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_stream2bitNBlock__set_state(<stream2bitNBlock> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitNBlock__set_state(stream2bitNBlock __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.size = __pyx_state[0]; __pyx_result.start = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_stream2bitNBlock__set_state(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_stream2bitNBlock__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitNBlock__set_state(stream2bitNBlock __pyx_result, tuple __pyx_state):
 *     __pyx_result.size = __pyx_state[0]; __pyx_result.start = __pyx_state[1]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->size = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->start = __pyx_t_2;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_stream2bitNBlock__set_state(stream2bitNBlock __pyx_result, tuple __pyx_state):
 *     __pyx_result.size = __pyx_state[0]; __pyx_result.start = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_5 = ((__pyx_t_4 > 2) != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_3 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_6 = (__pyx_t_5 != 0);
  __pyx_t_3 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {

    /* "(tree fragment)":14
 *     __pyx_result.size = __pyx_state[0]; __pyx_result.start = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[2])             # <<<<<<<<<<<<<<
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_stream2bitNBlock__set_state(stream2bitNBlock __pyx_result, tuple __pyx_state):
 *     __pyx_result.size = __pyx_state[0]; __pyx_result.start = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[2])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_stream2bitNBlock__set_state(<stream2bitNBlock> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitNBlock__set_state(stream2bitNBlock __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.size = __pyx_state[0]; __pyx_result.start = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 */

  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_stream2bitNBlock__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_stream2bitSeq(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_32__pyx_unpickle_stream2bitSeq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_32__pyx_unpickle_stream2bitSeq = {"__pyx_unpickle_stream2bitSeq", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_32__pyx_unpickle_stream2bitSeq, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_32__pyx_unpickle_stream2bitSeq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_stream2bitSeq (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_stream2bitSeq", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_stream2bitSeq", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_stream2bitSeq") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_stream2bitSeq", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_stream2bitSeq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_31__pyx_unpickle_stream2bitSeq(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_31__pyx_unpickle_stream2bitSeq(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_stream2bitSeq", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x958e205:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x958e205 = (Nblocks, fstream, name, nnt, wantBlockSize))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x958e205) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x958e205:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x958e205 = (Nblocks, fstream, name, nnt, wantBlockSize))" % __pyx_checksum)
 *     __pyx_result = stream2bitSeq.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0x958e205:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x958e205 = (Nblocks, fstream, name, nnt, wantBlockSize))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = stream2bitSeq.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x95, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x958e205:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x958e205 = (Nblocks, fstream, name, nnt, wantBlockSize))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x958e205 = (Nblocks, fstream, name, nnt, wantBlockSize))" % __pyx_checksum)
 *     __pyx_result = stream2bitSeq.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_stream2bitSeq__set_state(<stream2bitSeq> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_stream2bitSeq), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x958e205 = (Nblocks, fstream, name, nnt, wantBlockSize))" % __pyx_checksum)
 *     __pyx_result = stream2bitSeq.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_stream2bitSeq__set_state(<stream2bitSeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = stream2bitSeq.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_stream2bitSeq__set_state(<stream2bitSeq> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitSeq__set_state(stream2bitSeq __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_stream2bitSeq__set_state(((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x958e205 = (Nblocks, fstream, name, nnt, wantBlockSize))" % __pyx_checksum)
 *     __pyx_result = stream2bitSeq.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_stream2bitSeq__set_state(<stream2bitSeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_stream2bitSeq__set_state(<stream2bitSeq> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_stream2bitSeq__set_state(stream2bitSeq __pyx_result, tuple __pyx_state):
 *     __pyx_result.Nblocks = __pyx_state[0]; __pyx_result.fstream = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.nnt = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_stream2bitSeq(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_stream2bitSeq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_stream2bitSeq__set_state(<stream2bitSeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitSeq__set_state(stream2bitSeq __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.Nblocks = __pyx_state[0]; __pyx_result.fstream = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.nnt = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_stream2bitSeq__set_state(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_stream2bitSeq__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitSeq__set_state(stream2bitSeq __pyx_result, tuple __pyx_state):
 *     __pyx_result.Nblocks = __pyx_state[0]; __pyx_result.fstream = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.nnt = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[5])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->Nblocks);
  __Pyx_DECREF(__pyx_v___pyx_result->Nblocks);
  __pyx_v___pyx_result->Nblocks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->fstream);
  __Pyx_DECREF(__pyx_v___pyx_result->fstream);
  __pyx_v___pyx_result->fstream = __pyx_t_1;
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->name);
  __Pyx_DECREF(__pyx_v___pyx_result->name);
  __pyx_v___pyx_result->name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->nnt = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->wantBlockSize = __pyx_t_2;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_stream2bitSeq__set_state(stream2bitSeq __pyx_result, tuple __pyx_state):
 *     __pyx_result.Nblocks = __pyx_state[0]; __pyx_result.fstream = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.nnt = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[5])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_5 = ((__pyx_t_4 > 5) != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_3 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_6 = (__pyx_t_5 != 0);
  __pyx_t_3 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {

    /* "(tree fragment)":14
 *     __pyx_result.Nblocks = __pyx_state[0]; __pyx_result.fstream = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.nnt = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[5])             # <<<<<<<<<<<<<<
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_stream2bitSeq__set_state(stream2bitSeq __pyx_result, tuple __pyx_state):
 *     __pyx_result.Nblocks = __pyx_state[0]; __pyx_result.fstream = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.nnt = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[5])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_stream2bitSeq__set_state(<stream2bitSeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitSeq__set_state(stream2bitSeq __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.Nblocks = __pyx_state[0]; __pyx_result.fstream = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.nnt = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 */

  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_stream2bitSeq__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_sequenceGenerator(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_34__pyx_unpickle_sequenceGenerator(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_34__pyx_unpickle_sequenceGenerator = {"__pyx_unpickle_sequenceGenerator", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_34__pyx_unpickle_sequenceGenerator, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_34__pyx_unpickle_sequenceGenerator(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceGenerator (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceGenerator", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceGenerator", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_sequenceGenerator") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_sequenceGenerator", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceGenerator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_33__pyx_unpickle_sequenceGenerator(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_33__pyx_unpickle_sequenceGenerator(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceGenerator", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xd41d8cd) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = sequenceGenerator.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0xd41d8cd:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = sequenceGenerator.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = sequenceGenerator.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceGenerator__set_state(<sequenceGenerator> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceGenerator), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = sequenceGenerator.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequenceGenerator__set_state(<sequenceGenerator> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = sequenceGenerator.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceGenerator__set_state(<sequenceGenerator> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceGenerator__set_state(sequenceGenerator __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceGenerator__set_state(((struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = sequenceGenerator.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_sequenceGenerator__set_state(<sequenceGenerator> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_sequenceGenerator__set_state(<sequenceGenerator> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_sequenceGenerator__set_state(sequenceGenerator __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_sequenceGenerator(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceGenerator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_sequenceGenerator__set_state(<sequenceGenerator> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceGenerator__set_state(sequenceGenerator __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_sequenceGenerator__set_state(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_sequenceGenerator__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceGenerator__set_state(sequenceGenerator __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_2 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 12, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_2 > 0) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 12, __pyx_L1_error)
  __pyx_t_4 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_sequenceGenerator__set_state(sequenceGenerator __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])             # <<<<<<<<<<<<<<
 */
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 13, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceGenerator__set_state(sequenceGenerator __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_sequenceGenerator__set_state(<sequenceGenerator> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceGenerator__set_state(sequenceGenerator __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_sequenceGenerator__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_MarkovChain(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_36__pyx_unpickle_MarkovChain(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_36__pyx_unpickle_MarkovChain = {"__pyx_unpickle_MarkovChain", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_36__pyx_unpickle_MarkovChain, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_36__pyx_unpickle_MarkovChain(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_MarkovChain (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_MarkovChain", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_MarkovChain", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_MarkovChain") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_MarkovChain", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_MarkovChain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_35__pyx_unpickle_MarkovChain(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_35__pyx_unpickle_MarkovChain(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_MarkovChain", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xc6df6e2:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6df6e2 = (addReverseComplements, comparableSpectrum, degree, initialDistribution, nGenerated, prepared, probspectrum, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xc6df6e2) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xc6df6e2:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6df6e2 = (addReverseComplements, comparableSpectrum, degree, initialDistribution, nGenerated, prepared, probspectrum, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 *     __pyx_result = MarkovChain.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0xc6df6e2:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6df6e2 = (addReverseComplements, comparableSpectrum, degree, initialDistribution, nGenerated, prepared, probspectrum, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = MarkovChain.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xc6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xc6df6e2:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6df6e2 = (addReverseComplements, comparableSpectrum, degree, initialDistribution, nGenerated, prepared, probspectrum, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6df6e2 = (addReverseComplements, comparableSpectrum, degree, initialDistribution, nGenerated, prepared, probspectrum, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 *     __pyx_result = MarkovChain.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_MarkovChain__set_state(<MarkovChain> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_MarkovChain), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6df6e2 = (addReverseComplements, comparableSpectrum, degree, initialDistribution, nGenerated, prepared, probspectrum, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 *     __pyx_result = MarkovChain.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_MarkovChain__set_state(<MarkovChain> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = MarkovChain.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_MarkovChain__set_state(<MarkovChain> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_MarkovChain__set_state(MarkovChain __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_MarkovChain__set_state(((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6df6e2 = (addReverseComplements, comparableSpectrum, degree, initialDistribution, nGenerated, prepared, probspectrum, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 *     __pyx_result = MarkovChain.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_MarkovChain__set_state(<MarkovChain> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_MarkovChain__set_state(<MarkovChain> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_MarkovChain__set_state(MarkovChain __pyx_result, tuple __pyx_state):
 *     __pyx_result.addReverseComplements = __pyx_state[0]; __pyx_result.comparableSpectrum = __pyx_state[1]; __pyx_result.degree = __pyx_state[2]; __pyx_result.initialDistribution = __pyx_state[3]; __pyx_result.nGenerated = __pyx_state[4]; __pyx_result.prepared = __pyx_state[5]; __pyx_result.probspectrum = __pyx_state[6]; __pyx_result.pseudoCounts = __pyx_state[7]; __pyx_result.spectrum = __pyx_state[8]; __pyx_result.trainingSequences = __pyx_state[9]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_MarkovChain(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_MarkovChain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_MarkovChain__set_state(<MarkovChain> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_MarkovChain__set_state(MarkovChain __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.addReverseComplements = __pyx_state[0]; __pyx_result.comparableSpectrum = __pyx_state[1]; __pyx_result.degree = __pyx_state[2]; __pyx_result.initialDistribution = __pyx_state[3]; __pyx_result.nGenerated = __pyx_state[4]; __pyx_result.prepared = __pyx_state[5]; __pyx_result.probspectrum = __pyx_state[6]; __pyx_result.pseudoCounts = __pyx_state[7]; __pyx_result.spectrum = __pyx_state[8]; __pyx_result.trainingSequences = __pyx_state[9]
 *     if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_MarkovChain__set_state(struct __pyx_obj_6gnocis_9sequences_MarkovChain *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  bool __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_MarkovChain__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_MarkovChain__set_state(MarkovChain __pyx_result, tuple __pyx_state):
 *     __pyx_result.addReverseComplements = __pyx_state[0]; __pyx_result.comparableSpectrum = __pyx_state[1]; __pyx_result.degree = __pyx_state[2]; __pyx_result.initialDistribution = __pyx_state[3]; __pyx_result.nGenerated = __pyx_state[4]; __pyx_result.prepared = __pyx_state[5]; __pyx_result.probspectrum = __pyx_state[6]; __pyx_result.pseudoCounts = __pyx_state[7]; __pyx_result.spectrum = __pyx_state[8]; __pyx_result.trainingSequences = __pyx_state[9]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[10])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->addReverseComplements = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->comparableSpectrum);
  __Pyx_DECREF(__pyx_v___pyx_result->comparableSpectrum);
  __pyx_v___pyx_result->comparableSpectrum = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->degree = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->initialDistribution);
  __Pyx_DECREF(__pyx_v___pyx_result->initialDistribution);
  __pyx_v___pyx_result->initialDistribution = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->nGenerated = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->prepared = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->probspectrum);
  __Pyx_DECREF(__pyx_v___pyx_result->probspectrum);
  __pyx_v___pyx_result->probspectrum = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->pseudoCounts = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->spectrum);
  __Pyx_DECREF(__pyx_v___pyx_result->spectrum);
  __pyx_v___pyx_result->spectrum = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->trainingSequences);
  __Pyx_DECREF(__pyx_v___pyx_result->trainingSequences);
  __pyx_v___pyx_result->trainingSequences = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_MarkovChain__set_state(MarkovChain __pyx_result, tuple __pyx_state):
 *     __pyx_result.addReverseComplements = __pyx_state[0]; __pyx_result.comparableSpectrum = __pyx_state[1]; __pyx_result.degree = __pyx_state[2]; __pyx_result.initialDistribution = __pyx_state[3]; __pyx_result.nGenerated = __pyx_state[4]; __pyx_result.prepared = __pyx_state[5]; __pyx_result.probspectrum = __pyx_state[6]; __pyx_result.pseudoCounts = __pyx_state[7]; __pyx_result.spectrum = __pyx_state[8]; __pyx_result.trainingSequences = __pyx_state[9]
 *     if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[10])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_6 = ((__pyx_t_5 > 10) != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_4 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_6 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_7 = (__pyx_t_6 != 0);
  __pyx_t_4 = __pyx_t_7;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_4) {

    /* "(tree fragment)":14
 *     __pyx_result.addReverseComplements = __pyx_state[0]; __pyx_result.comparableSpectrum = __pyx_state[1]; __pyx_result.degree = __pyx_state[2]; __pyx_result.initialDistribution = __pyx_state[3]; __pyx_result.nGenerated = __pyx_state[4]; __pyx_result.prepared = __pyx_state[5]; __pyx_result.probspectrum = __pyx_state[6]; __pyx_result.pseudoCounts = __pyx_state[7]; __pyx_result.spectrum = __pyx_state[8]; __pyx_result.trainingSequences = __pyx_state[9]
 *     if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[10])             # <<<<<<<<<<<<<<
 */
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_update); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __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;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_MarkovChain__set_state(MarkovChain __pyx_result, tuple __pyx_state):
 *     __pyx_result.addReverseComplements = __pyx_state[0]; __pyx_result.comparableSpectrum = __pyx_state[1]; __pyx_result.degree = __pyx_state[2]; __pyx_result.initialDistribution = __pyx_state[3]; __pyx_result.nGenerated = __pyx_state[4]; __pyx_result.prepared = __pyx_state[5]; __pyx_result.probspectrum = __pyx_state[6]; __pyx_result.pseudoCounts = __pyx_state[7]; __pyx_result.spectrum = __pyx_state[8]; __pyx_result.trainingSequences = __pyx_state[9]
 *     if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[10])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_MarkovChain__set_state(<MarkovChain> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_MarkovChain__set_state(MarkovChain __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.addReverseComplements = __pyx_state[0]; __pyx_result.comparableSpectrum = __pyx_state[1]; __pyx_result.degree = __pyx_state[2]; __pyx_result.initialDistribution = __pyx_state[3]; __pyx_result.nGenerated = __pyx_state[4]; __pyx_result.prepared = __pyx_state[5]; __pyx_result.probspectrum = __pyx_state[6]; __pyx_result.pseudoCounts = __pyx_state[7]; __pyx_result.spectrum = __pyx_state[8]; __pyx_result.trainingSequences = __pyx_state[9]
 *     if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'):
 */

  /* 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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_MarkovChain__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_IID(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_6gnocis_9sequences_38__pyx_unpickle_IID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6gnocis_9sequences_38__pyx_unpickle_IID = {"__pyx_unpickle_IID", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_38__pyx_unpickle_IID, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6gnocis_9sequences_38__pyx_unpickle_IID(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_IID (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_IID", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_IID", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_IID") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_IID", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_IID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6gnocis_9sequences_37__pyx_unpickle_IID(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6gnocis_9sequences_37__pyx_unpickle_IID(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_IID", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x53333f8:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x53333f8 = (addComplements, nGenerated, ntDistribution, prepared, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x53333f8) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x53333f8:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x53333f8 = (addComplements, nGenerated, ntDistribution, prepared, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 *     __pyx_result = IID.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0x53333f8:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x53333f8 = (addComplements, nGenerated, ntDistribution, prepared, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = IID.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x53, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x53333f8:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x53333f8 = (addComplements, nGenerated, ntDistribution, prepared, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x53333f8 = (addComplements, nGenerated, ntDistribution, prepared, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 *     __pyx_result = IID.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_IID__set_state(<IID> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6gnocis_9sequences_IID), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x53333f8 = (addComplements, nGenerated, ntDistribution, prepared, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 *     __pyx_result = IID.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_IID__set_state(<IID> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = IID.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_IID__set_state(<IID> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_IID__set_state(IID __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_6gnocis_9sequences___pyx_unpickle_IID__set_state(((struct __pyx_obj_6gnocis_9sequences_IID *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x53333f8 = (addComplements, nGenerated, ntDistribution, prepared, pseudoCounts, spectrum, trainingSequences))" % __pyx_checksum)
 *     __pyx_result = IID.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_IID__set_state(<IID> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_IID__set_state(<IID> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_IID__set_state(IID __pyx_result, tuple __pyx_state):
 *     __pyx_result.addComplements = __pyx_state[0]; __pyx_result.nGenerated = __pyx_state[1]; __pyx_result.ntDistribution = __pyx_state[2]; __pyx_result.prepared = __pyx_state[3]; __pyx_result.pseudoCounts = __pyx_state[4]; __pyx_result.spectrum = __pyx_state[5]; __pyx_result.trainingSequences = __pyx_state[6]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_IID(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_IID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_IID__set_state(<IID> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_IID__set_state(IID __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.addComplements = __pyx_state[0]; __pyx_result.nGenerated = __pyx_state[1]; __pyx_result.ntDistribution = __pyx_state[2]; __pyx_result.prepared = __pyx_state[3]; __pyx_result.pseudoCounts = __pyx_state[4]; __pyx_result.spectrum = __pyx_state[5]; __pyx_result.trainingSequences = __pyx_state[6]
 *     if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_6gnocis_9sequences___pyx_unpickle_IID__set_state(struct __pyx_obj_6gnocis_9sequences_IID *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  bool __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_IID__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_IID__set_state(IID __pyx_result, tuple __pyx_state):
 *     __pyx_result.addComplements = __pyx_state[0]; __pyx_result.nGenerated = __pyx_state[1]; __pyx_result.ntDistribution = __pyx_state[2]; __pyx_result.prepared = __pyx_state[3]; __pyx_result.pseudoCounts = __pyx_state[4]; __pyx_result.spectrum = __pyx_state[5]; __pyx_result.trainingSequences = __pyx_state[6]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[7])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->addComplements = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->nGenerated = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->ntDistribution);
  __Pyx_DECREF(__pyx_v___pyx_result->ntDistribution);
  __pyx_v___pyx_result->ntDistribution = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->prepared = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->pseudoCounts = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->spectrum);
  __Pyx_DECREF(__pyx_v___pyx_result->spectrum);
  __pyx_v___pyx_result->spectrum = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->trainingSequences);
  __Pyx_DECREF(__pyx_v___pyx_result->trainingSequences);
  __pyx_v___pyx_result->trainingSequences = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_IID__set_state(IID __pyx_result, tuple __pyx_state):
 *     __pyx_result.addComplements = __pyx_state[0]; __pyx_result.nGenerated = __pyx_state[1]; __pyx_result.ntDistribution = __pyx_state[2]; __pyx_result.prepared = __pyx_state[3]; __pyx_result.pseudoCounts = __pyx_state[4]; __pyx_result.spectrum = __pyx_state[5]; __pyx_result.trainingSequences = __pyx_state[6]
 *     if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[7])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_6 = ((__pyx_t_5 > 7) != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_4 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_6 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_7 = (__pyx_t_6 != 0);
  __pyx_t_4 = __pyx_t_7;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_4) {

    /* "(tree fragment)":14
 *     __pyx_result.addComplements = __pyx_state[0]; __pyx_result.nGenerated = __pyx_state[1]; __pyx_result.ntDistribution = __pyx_state[2]; __pyx_result.prepared = __pyx_state[3]; __pyx_result.pseudoCounts = __pyx_state[4]; __pyx_result.spectrum = __pyx_state[5]; __pyx_result.trainingSequences = __pyx_state[6]
 *     if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[7])             # <<<<<<<<<<<<<<
 */
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_update); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __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;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_IID__set_state(IID __pyx_result, tuple __pyx_state):
 *     __pyx_result.addComplements = __pyx_state[0]; __pyx_result.nGenerated = __pyx_state[1]; __pyx_result.ntDistribution = __pyx_state[2]; __pyx_result.prepared = __pyx_state[3]; __pyx_result.pseudoCounts = __pyx_state[4]; __pyx_result.spectrum = __pyx_state[5]; __pyx_result.trainingSequences = __pyx_state[6]
 *     if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[7])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_IID__set_state(<IID> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_IID__set_state(IID __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.addComplements = __pyx_state[0]; __pyx_result.nGenerated = __pyx_state[1]; __pyx_result.ntDistribution = __pyx_state[2]; __pyx_result.prepared = __pyx_state[3]; __pyx_result.pseudoCounts = __pyx_state[4]; __pyx_result.spectrum = __pyx_state[5]; __pyx_result.trainingSequences = __pyx_state[6]
 *     if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'):
 */

  /* 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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("gnocis.sequences.__pyx_unpickle_IID__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_tp_new_6gnocis_9sequences_sequenceLabel(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6gnocis_9sequences_sequenceLabel *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)o);
  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_sequenceLabel(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences_sequenceLabel *p = (struct __pyx_obj_6gnocis_9sequences_sequenceLabel *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  Py_CLEAR(p->name);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_tp_richcompare_6gnocis_9sequences_sequenceLabel(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_6gnocis_9sequences_13sequenceLabel_5__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_6gnocis_9sequences_13sequenceLabel_5__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret); Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_13sequenceLabel_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_13sequenceLabel_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_13sequenceLabel_4name_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_13sequenceLabel_value(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_13sequenceLabel_5value_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_13sequenceLabel_value(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_13sequenceLabel_5value_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_sequenceLabel[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_13sequenceLabel_11__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_13sequenceLabel_13__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6gnocis_9sequences_sequenceLabel[] = {
  {(char *)"name", __pyx_getprop_6gnocis_9sequences_13sequenceLabel_name, __pyx_setprop_6gnocis_9sequences_13sequenceLabel_name, (char *)0, 0},
  {(char *)"value", __pyx_getprop_6gnocis_9sequences_13sequenceLabel_value, __pyx_setprop_6gnocis_9sequences_13sequenceLabel_value, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6gnocis_9sequences_sequenceLabel = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.sequenceLabel", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_sequenceLabel), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_sequenceLabel, /*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_6gnocis_9sequences_13sequenceLabel_9__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  __pyx_pw_6gnocis_9sequences_13sequenceLabel_7__hash__, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_6gnocis_9sequences_13sequenceLabel_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*/
  "\n\tThe `sequenceLabel` class represents a label that can be assigned to sequences to be used for model training or testing, such as \"positive\" or \"negative\".\n\t\n\t:param name: Name of the sequence label.\n\t:param value: Value to represent the label.\n\t\n\t:type name: str\n\t:type value: float\n\t", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_tp_richcompare_6gnocis_9sequences_sequenceLabel, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_sequenceLabel, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6gnocis_9sequences_sequenceLabel, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_13sequenceLabel_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_sequenceLabel, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6gnocis_9sequences_sequence __pyx_vtable_6gnocis_9sequences_sequence;

static PyObject *__pyx_tp_new_6gnocis_9sequences_sequence(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6gnocis_9sequences_sequence *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6gnocis_9sequences_sequence *)o);
  p->__pyx_vtab = __pyx_vtabptr_6gnocis_9sequences_sequence;
  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->seq = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->path = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->annotation = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->sourceRegion = ((struct __pyx_obj_6gnocis_7regions_region *)Py_None); Py_INCREF(Py_None);
  p->cbytes = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->cbytesIndexed = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->labels = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_sequence(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences_sequence *p = (struct __pyx_obj_6gnocis_9sequences_sequence *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->name);
  Py_CLEAR(p->seq);
  Py_CLEAR(p->path);
  Py_CLEAR(p->annotation);
  Py_CLEAR(p->sourceRegion);
  Py_CLEAR(p->cbytes);
  Py_CLEAR(p->cbytesIndexed);
  Py_CLEAR(p->labels);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6gnocis_9sequences_sequence(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences_sequence *p = (struct __pyx_obj_6gnocis_9sequences_sequence *)o;
  if (p->sourceRegion) {
    e = (*v)(((PyObject *)p->sourceRegion), a); if (e) return e;
  }
  if (p->labels) {
    e = (*v)(p->labels, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences_sequence(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences_sequence *p = (struct __pyx_obj_6gnocis_9sequences_sequence *)o;
  tmp = ((PyObject*)p->sourceRegion);
  p->sourceRegion = ((struct __pyx_obj_6gnocis_7regions_region *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->labels);
  p->labels = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_tp_richcompare_6gnocis_9sequences_sequence(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_6gnocis_9sequences_8sequence_3__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_6gnocis_9sequences_8sequence_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_6gnocis_9sequences_8sequence_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_8sequence_4name_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_8sequence_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_8sequence_4name_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_8sequence_4name_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_8sequence_seq(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_8sequence_3seq_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_8sequence_seq(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_8sequence_3seq_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_8sequence_3seq_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_8sequence_path(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_8sequence_4path_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_8sequence_path(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_8sequence_4path_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_8sequence_4path_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_8sequence_annotation(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_8sequence_10annotation_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_8sequence_annotation(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_8sequence_10annotation_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_8sequence_10annotation_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_8sequence_sourceRegion(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_8sequence_sourceRegion(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_8sequence_12sourceRegion_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_8sequence_labels(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_8sequence_6labels_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_8sequence_labels(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_8sequence_6labels_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_8sequence_6labels_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_sequence[] = {
  {"label", (PyCFunction)__pyx_pw_6gnocis_9sequences_8sequence_13label, METH_O, __pyx_doc_6gnocis_9sequences_8sequence_12label},
  {"windows", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_8sequence_15windows, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_8sequence_14windows},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_8sequence_17__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_8sequence_19__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6gnocis_9sequences_sequence[] = {
  {(char *)"name", __pyx_getprop_6gnocis_9sequences_8sequence_name, __pyx_setprop_6gnocis_9sequences_8sequence_name, (char *)0, 0},
  {(char *)"seq", __pyx_getprop_6gnocis_9sequences_8sequence_seq, __pyx_setprop_6gnocis_9sequences_8sequence_seq, (char *)0, 0},
  {(char *)"path", __pyx_getprop_6gnocis_9sequences_8sequence_path, __pyx_setprop_6gnocis_9sequences_8sequence_path, (char *)0, 0},
  {(char *)"annotation", __pyx_getprop_6gnocis_9sequences_8sequence_annotation, __pyx_setprop_6gnocis_9sequences_8sequence_annotation, (char *)0, 0},
  {(char *)"sourceRegion", __pyx_getprop_6gnocis_9sequences_8sequence_sourceRegion, __pyx_setprop_6gnocis_9sequences_8sequence_sourceRegion, (char *)0, 0},
  {(char *)"labels", __pyx_getprop_6gnocis_9sequences_8sequence_labels, __pyx_setprop_6gnocis_9sequences_8sequence_labels, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PySequenceMethods __pyx_tp_as_sequence_sequence = {
  __pyx_pw_6gnocis_9sequences_8sequence_7__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*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_sequence = {
  __pyx_pw_6gnocis_9sequences_8sequence_7__len__, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6gnocis_9sequences_sequence = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.sequence", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_sequence), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_sequence, /*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_6gnocis_9sequences_8sequence_11__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  &__pyx_tp_as_sequence_sequence, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_sequence, /*tp_as_mapping*/
  __pyx_pw_6gnocis_9sequences_8sequence_5__hash__, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_6gnocis_9sequences_8sequence_9__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|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n\tThe `sequence` class represents a DNA sequence. \n\t\n\t:param name: Name of the sequence.\n\t:param seq: Sequence.\n\t:param path: Source file path.\n\t:param sourceRegion: Source region.\n\t:param annotation: Annotation.\n\t\n\t:type name: str\n\t:type seq: str\n\t:type path: str, optional\n\t:type sourceRegion: region, optional\n\t:type annotation: str, optional\n\t\n\tFor a `sequence` instance `S`, `len(S)` gives the sequence length. `[ nt for nt in S ]` lists the nucleotides. For two sequences `A` and `B`, `A+B` gives the concatenated sequence.\n\t", /*tp_doc*/
  __pyx_tp_traverse_6gnocis_9sequences_sequence, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences_sequence, /*tp_clear*/
  __pyx_tp_richcompare_6gnocis_9sequences_sequence, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_sequence, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6gnocis_9sequences_sequence, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_8sequence_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_sequence, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6gnocis_9sequences_sequences(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6gnocis_9sequences_sequences *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6gnocis_9sequences_sequences *)o);
  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->sequences = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_sequences(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences_sequences *p = (struct __pyx_obj_6gnocis_9sequences_sequences *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->name);
  Py_CLEAR(p->sequences);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6gnocis_9sequences_sequences(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences_sequences *p = (struct __pyx_obj_6gnocis_9sequences_sequences *)o;
  if (p->sequences) {
    e = (*v)(p->sequences, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences_sequences(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences_sequences *p = (struct __pyx_obj_6gnocis_9sequences_sequences *)o;
  tmp = ((PyObject*)p->sequences);
  p->sequences = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}
static PyObject *__pyx_sq_item_6gnocis_9sequences_sequences(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_6gnocis_9sequences_9sequences_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_9sequences_4name_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_9sequences_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_9sequences_4name_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_9sequences_4name_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_9sequences_sequences(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_9sequences_9sequences_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_9sequences_sequences(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_9sequences_9sequences_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_9sequences_9sequences_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_sequences[] = {
  {"table", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_11table, METH_NOARGS, 0},
  {"_repr_html_", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_13_repr_html_, METH_NOARGS, 0},
  {"split", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_19split, METH_O, __pyx_doc_6gnocis_9sequences_9sequences_18split},
  {"randomSplit", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_9sequences_21randomSplit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_9sequences_20randomSplit},
  {"sample", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_9sequences_23sample, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_9sequences_22sample},
  {"rename", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_25rename, METH_O, __pyx_doc_6gnocis_9sequences_9sequences_24rename},
  {"windows", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_9sequences_27windows, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_9sequences_26windows},
  {"windowRegions", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_9sequences_29windowRegions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_9sequences_28windowRegions},
  {"sourceRegions", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_31sourceRegions, METH_NOARGS, __pyx_doc_6gnocis_9sequences_9sequences_30sourceRegions},
  {"label", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_33label, METH_O, __pyx_doc_6gnocis_9sequences_9sequences_32label},
  {"withLabel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_9sequences_35withLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_9sequences_34withLabel},
  {"labels", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_37labels, METH_NOARGS, __pyx_doc_6gnocis_9sequences_9sequences_36labels},
  {"saveFASTA", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_39saveFASTA, METH_O, __pyx_doc_6gnocis_9sequences_9sequences_38saveFASTA},
  {"sequenceLengths", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_41sequenceLengths, METH_NOARGS, __pyx_doc_6gnocis_9sequences_9sequences_40sequenceLengths},
  {"printStatistics", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_43printStatistics, METH_NOARGS, __pyx_doc_6gnocis_9sequences_9sequences_42printStatistics},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_45__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_9sequences_47__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6gnocis_9sequences_sequences[] = {
  {(char *)"name", __pyx_getprop_6gnocis_9sequences_9sequences_name, __pyx_setprop_6gnocis_9sequences_9sequences_name, (char *)0, 0},
  {(char *)"sequences", __pyx_getprop_6gnocis_9sequences_9sequences_sequences, __pyx_setprop_6gnocis_9sequences_9sequences_sequences, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_sequences = {
  __pyx_pw_6gnocis_9sequences_9sequences_17__add__, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_sequences = {
  __pyx_pw_6gnocis_9sequences_9sequences_7__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6gnocis_9sequences_sequences, /*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_sequences = {
  __pyx_pw_6gnocis_9sequences_9sequences_7__len__, /*mp_length*/
  __pyx_pw_6gnocis_9sequences_9sequences_5__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6gnocis_9sequences_sequences = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.sequences", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_sequences), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_sequences, /*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_6gnocis_9sequences_9sequences_15__repr__, /*tp_repr*/
  &__pyx_tp_as_number_sequences, /*tp_as_number*/
  &__pyx_tp_as_sequence_sequences, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_sequences, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_6gnocis_9sequences_9sequences_9__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|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n\tThe `sequences` class represents a set of DNA sequences. \n\t\n\t:param name: Name of the sequence set.\n\t:param seq: List of sequences to include.\n\t\n\t:type name: str\n\t:type seq: list\n\t\n\tFor a `sequence` instance `S`, `len(S)` gives the sequence length, and `[ s for s in S ]` lists the sequences. For two sequence sets `A` and `B`, `A+B` gives the set containing all sequences from both sets.\n\t", /*tp_doc*/
  __pyx_tp_traverse_6gnocis_9sequences_sequences, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences_sequences, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_6gnocis_9sequences_9sequences_3__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_sequences, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6gnocis_9sequences_sequences, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_9sequences_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_sequences, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6gnocis_9sequences_sequenceStream(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_sequenceStream(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_sequenceStream[] = {
  {"fetch", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_14sequenceStream_3fetch, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_14sequenceStream_2fetch},
  {"streamFullSequences", (PyCFunction)__pyx_pw_6gnocis_9sequences_14sequenceStream_6streamFullSequences, METH_NOARGS, __pyx_doc_6gnocis_9sequences_14sequenceStream_5streamFullSequences},
  {"sequenceLengths", (PyCFunction)__pyx_pw_6gnocis_9sequences_14sequenceStream_9sequenceLengths, METH_NOARGS, __pyx_doc_6gnocis_9sequences_14sequenceStream_8sequenceLengths},
  {"windows", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_14sequenceStream_11windows, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_14sequenceStream_10windows},
  {"windowRegions", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_14sequenceStream_13windowRegions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_14sequenceStream_12windowRegions},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_14sequenceStream_15__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_14sequenceStream_17__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6gnocis_9sequences_sequenceStream = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.sequenceStream", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_sequenceStream), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_sequenceStream, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n\tThe `sequenceStream` class represents sequence streams. \n\t", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_sequenceStream, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_14sequenceStream_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_sequenceStream, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6gnocis_9sequences_sequenceGenerator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_sequenceGenerator(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_sequenceGenerator[] = {
  {"generateSet", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_17sequenceGenerator_3generateSet, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_17sequenceGenerator_2generateSet},
  {"generateStream", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_17sequenceGenerator_5generateStream, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_17sequenceGenerator_4generateStream},
  {"generateFASTA", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_17sequenceGenerator_7generateFASTA, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_17sequenceGenerator_6generateFASTA},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_17sequenceGenerator_9__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_17sequenceGenerator_11__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6gnocis_9sequences_sequenceGenerator = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.sequenceGenerator", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_sequenceGenerator), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_sequenceGenerator, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n\tThe `sequenceGenerator` class is an abstract class for sequence generators.\n\t", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_sequenceGenerator, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_17sequenceGenerator_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_sequenceGenerator, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6gnocis_9sequences_MarkovChain(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6gnocis_9sequences_MarkovChain *p;
  PyObject *o = __pyx_tp_new_6gnocis_9sequences_sequenceGenerator(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)o);
  p->trainingSequences = Py_None; Py_INCREF(Py_None);
  p->spectrum = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->initialDistribution = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->probspectrum = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->comparableSpectrum = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_MarkovChain(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences_MarkovChain *p = (struct __pyx_obj_6gnocis_9sequences_MarkovChain *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->trainingSequences);
  Py_CLEAR(p->spectrum);
  Py_CLEAR(p->initialDistribution);
  Py_CLEAR(p->probspectrum);
  Py_CLEAR(p->comparableSpectrum);
  #if CYTHON_USE_TYPE_SLOTS
  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
  #endif
  PyObject_GC_Track(o);
  __pyx_tp_dealloc_6gnocis_9sequences_sequenceGenerator(o);
}

static int __pyx_tp_traverse_6gnocis_9sequences_MarkovChain(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences_MarkovChain *p = (struct __pyx_obj_6gnocis_9sequences_MarkovChain *)o;
  e = ((likely(__pyx_ptype_6gnocis_9sequences_sequenceGenerator)) ? ((__pyx_ptype_6gnocis_9sequences_sequenceGenerator->tp_traverse) ? __pyx_ptype_6gnocis_9sequences_sequenceGenerator->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_6gnocis_9sequences_MarkovChain)); if (e) return e;
  if (p->trainingSequences) {
    e = (*v)(p->trainingSequences, a); if (e) return e;
  }
  if (p->spectrum) {
    e = (*v)(p->spectrum, a); if (e) return e;
  }
  if (p->initialDistribution) {
    e = (*v)(p->initialDistribution, a); if (e) return e;
  }
  if (p->probspectrum) {
    e = (*v)(p->probspectrum, a); if (e) return e;
  }
  if (p->comparableSpectrum) {
    e = (*v)(p->comparableSpectrum, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences_MarkovChain(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences_MarkovChain *p = (struct __pyx_obj_6gnocis_9sequences_MarkovChain *)o;
  if (likely(__pyx_ptype_6gnocis_9sequences_sequenceGenerator)) { if (__pyx_ptype_6gnocis_9sequences_sequenceGenerator->tp_clear) __pyx_ptype_6gnocis_9sequences_sequenceGenerator->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_6gnocis_9sequences_MarkovChain);
  tmp = ((PyObject*)p->trainingSequences);
  p->trainingSequences = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->spectrum);
  p->spectrum = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->initialDistribution);
  p->initialDistribution = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->probspectrum);
  p->probspectrum = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->comparableSpectrum);
  p->comparableSpectrum = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_degree(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_6degree_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_degree(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_6degree_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_pseudoCounts(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_12pseudoCounts_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_pseudoCounts(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_12pseudoCounts_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_nGenerated(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_10nGenerated_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_nGenerated(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_10nGenerated_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_addReverseComplements(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_21addReverseComplements_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_addReverseComplements(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_21addReverseComplements_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_prepared(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_8prepared_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_prepared(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_8prepared_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_trainingSequences(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_trainingSequences(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_17trainingSequences_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_spectrum(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_spectrum(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_8spectrum_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_initialDistribution(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_initialDistribution(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_19initialDistribution_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_probspectrum(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_probspectrum(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_12probspectrum_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_11MarkovChain_comparableSpectrum(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_11MarkovChain_comparableSpectrum(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_11MarkovChain_18comparableSpectrum_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_MarkovChain[] = {
  {"_prepare", (PyCFunction)__pyx_pw_6gnocis_9sequences_11MarkovChain_7_prepare, METH_NOARGS, __pyx_doc_6gnocis_9sequences_11MarkovChain_6_prepare},
  {"_trainOnSequences", (PyCFunction)__pyx_pw_6gnocis_9sequences_11MarkovChain_9_trainOnSequences, METH_O, __pyx_doc_6gnocis_9sequences_11MarkovChain_8_trainOnSequences},
  {"_trainOnSequenceStream", (PyCFunction)__pyx_pw_6gnocis_9sequences_11MarkovChain_11_trainOnSequenceStream, METH_O, __pyx_doc_6gnocis_9sequences_11MarkovChain_10_trainOnSequenceStream},
  {"generate", (PyCFunction)__pyx_pw_6gnocis_9sequences_11MarkovChain_13generate, METH_O, __pyx_doc_6gnocis_9sequences_11MarkovChain_12generate},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_11MarkovChain_15__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_11MarkovChain_17__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6gnocis_9sequences_MarkovChain[] = {
  {(char *)"degree", __pyx_getprop_6gnocis_9sequences_11MarkovChain_degree, __pyx_setprop_6gnocis_9sequences_11MarkovChain_degree, (char *)0, 0},
  {(char *)"pseudoCounts", __pyx_getprop_6gnocis_9sequences_11MarkovChain_pseudoCounts, __pyx_setprop_6gnocis_9sequences_11MarkovChain_pseudoCounts, (char *)0, 0},
  {(char *)"nGenerated", __pyx_getprop_6gnocis_9sequences_11MarkovChain_nGenerated, __pyx_setprop_6gnocis_9sequences_11MarkovChain_nGenerated, (char *)0, 0},
  {(char *)"addReverseComplements", __pyx_getprop_6gnocis_9sequences_11MarkovChain_addReverseComplements, __pyx_setprop_6gnocis_9sequences_11MarkovChain_addReverseComplements, (char *)0, 0},
  {(char *)"prepared", __pyx_getprop_6gnocis_9sequences_11MarkovChain_prepared, __pyx_setprop_6gnocis_9sequences_11MarkovChain_prepared, (char *)0, 0},
  {(char *)"trainingSequences", __pyx_getprop_6gnocis_9sequences_11MarkovChain_trainingSequences, __pyx_setprop_6gnocis_9sequences_11MarkovChain_trainingSequences, (char *)0, 0},
  {(char *)"spectrum", __pyx_getprop_6gnocis_9sequences_11MarkovChain_spectrum, __pyx_setprop_6gnocis_9sequences_11MarkovChain_spectrum, (char *)0, 0},
  {(char *)"initialDistribution", __pyx_getprop_6gnocis_9sequences_11MarkovChain_initialDistribution, __pyx_setprop_6gnocis_9sequences_11MarkovChain_initialDistribution, (char *)0, 0},
  {(char *)"probspectrum", __pyx_getprop_6gnocis_9sequences_11MarkovChain_probspectrum, __pyx_setprop_6gnocis_9sequences_11MarkovChain_probspectrum, (char *)0, 0},
  {(char *)"comparableSpectrum", __pyx_getprop_6gnocis_9sequences_11MarkovChain_comparableSpectrum, __pyx_setprop_6gnocis_9sequences_11MarkovChain_comparableSpectrum, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6gnocis_9sequences_MarkovChain = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.MarkovChain", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_MarkovChain), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_MarkovChain, /*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_6gnocis_9sequences_11MarkovChain_5__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_6gnocis_9sequences_11MarkovChain_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|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n\tThe `MarkovChain` class trains a Markov chain for generating sequences.\n\t\n\t:param trainingSequences: Training sequences.\n\t:param degree: Markov chain degree. Default is 4.\n\t:param pseudoCounts: Whether or not to use pseudocounts. Default is `True`.\n\t:param addReverseComplements: Whether or not to add reverse complements. Default is `True`.\n\t\n\t:type trainingSequences: sequences/sequenceStream/str\n\t:type degree: int, optional\n\t:type pseudoCounts: bool, optional\n\t:type addReverseComplements: bool, optional\n\t", /*tp_doc*/
  __pyx_tp_traverse_6gnocis_9sequences_MarkovChain, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences_MarkovChain, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_MarkovChain, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6gnocis_9sequences_MarkovChain, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_11MarkovChain_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_MarkovChain, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6gnocis_9sequences_IID(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6gnocis_9sequences_IID *p;
  PyObject *o = __pyx_tp_new_6gnocis_9sequences_sequenceGenerator(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6gnocis_9sequences_IID *)o);
  p->trainingSequences = Py_None; Py_INCREF(Py_None);
  p->spectrum = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->ntDistribution = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_IID(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences_IID *p = (struct __pyx_obj_6gnocis_9sequences_IID *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->trainingSequences);
  Py_CLEAR(p->spectrum);
  Py_CLEAR(p->ntDistribution);
  #if CYTHON_USE_TYPE_SLOTS
  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
  #endif
  PyObject_GC_Track(o);
  __pyx_tp_dealloc_6gnocis_9sequences_sequenceGenerator(o);
}

static int __pyx_tp_traverse_6gnocis_9sequences_IID(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences_IID *p = (struct __pyx_obj_6gnocis_9sequences_IID *)o;
  e = ((likely(__pyx_ptype_6gnocis_9sequences_sequenceGenerator)) ? ((__pyx_ptype_6gnocis_9sequences_sequenceGenerator->tp_traverse) ? __pyx_ptype_6gnocis_9sequences_sequenceGenerator->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_6gnocis_9sequences_IID)); if (e) return e;
  if (p->trainingSequences) {
    e = (*v)(p->trainingSequences, a); if (e) return e;
  }
  if (p->spectrum) {
    e = (*v)(p->spectrum, a); if (e) return e;
  }
  if (p->ntDistribution) {
    e = (*v)(p->ntDistribution, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences_IID(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences_IID *p = (struct __pyx_obj_6gnocis_9sequences_IID *)o;
  if (likely(__pyx_ptype_6gnocis_9sequences_sequenceGenerator)) { if (__pyx_ptype_6gnocis_9sequences_sequenceGenerator->tp_clear) __pyx_ptype_6gnocis_9sequences_sequenceGenerator->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_6gnocis_9sequences_IID);
  tmp = ((PyObject*)p->trainingSequences);
  p->trainingSequences = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->spectrum);
  p->spectrum = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->ntDistribution);
  p->ntDistribution = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6gnocis_9sequences_3IID_pseudoCounts(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_3IID_12pseudoCounts_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_3IID_pseudoCounts(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_3IID_12pseudoCounts_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_3IID_nGenerated(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_3IID_10nGenerated_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_3IID_nGenerated(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_3IID_10nGenerated_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_3IID_addComplements(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_3IID_14addComplements_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_3IID_addComplements(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_3IID_14addComplements_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_3IID_prepared(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_3IID_8prepared_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_3IID_prepared(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_3IID_8prepared_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_3IID_trainingSequences(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_3IID_trainingSequences(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_3IID_17trainingSequences_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_3IID_spectrum(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_3IID_8spectrum_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_3IID_spectrum(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_3IID_8spectrum_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_3IID_8spectrum_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_3IID_ntDistribution(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_3IID_ntDistribution(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_3IID_14ntDistribution_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_IID[] = {
  {"_trainOnSequences", (PyCFunction)__pyx_pw_6gnocis_9sequences_3IID_7_trainOnSequences, METH_O, __pyx_doc_6gnocis_9sequences_3IID_6_trainOnSequences},
  {"_trainOnSequenceStream", (PyCFunction)__pyx_pw_6gnocis_9sequences_3IID_9_trainOnSequenceStream, METH_O, __pyx_doc_6gnocis_9sequences_3IID_8_trainOnSequenceStream},
  {"_prepare", (PyCFunction)__pyx_pw_6gnocis_9sequences_3IID_11_prepare, METH_NOARGS, __pyx_doc_6gnocis_9sequences_3IID_10_prepare},
  {"generate", (PyCFunction)__pyx_pw_6gnocis_9sequences_3IID_13generate, METH_O, __pyx_doc_6gnocis_9sequences_3IID_12generate},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_3IID_15__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_3IID_17__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6gnocis_9sequences_IID[] = {
  {(char *)"pseudoCounts", __pyx_getprop_6gnocis_9sequences_3IID_pseudoCounts, __pyx_setprop_6gnocis_9sequences_3IID_pseudoCounts, (char *)0, 0},
  {(char *)"nGenerated", __pyx_getprop_6gnocis_9sequences_3IID_nGenerated, __pyx_setprop_6gnocis_9sequences_3IID_nGenerated, (char *)0, 0},
  {(char *)"addComplements", __pyx_getprop_6gnocis_9sequences_3IID_addComplements, __pyx_setprop_6gnocis_9sequences_3IID_addComplements, (char *)0, 0},
  {(char *)"prepared", __pyx_getprop_6gnocis_9sequences_3IID_prepared, __pyx_setprop_6gnocis_9sequences_3IID_prepared, (char *)0, 0},
  {(char *)"trainingSequences", __pyx_getprop_6gnocis_9sequences_3IID_trainingSequences, __pyx_setprop_6gnocis_9sequences_3IID_trainingSequences, (char *)0, 0},
  {(char *)"spectrum", __pyx_getprop_6gnocis_9sequences_3IID_spectrum, __pyx_setprop_6gnocis_9sequences_3IID_spectrum, (char *)0, 0},
  {(char *)"ntDistribution", __pyx_getprop_6gnocis_9sequences_3IID_ntDistribution, __pyx_setprop_6gnocis_9sequences_3IID_ntDistribution, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6gnocis_9sequences_IID = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.IID", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_IID), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_IID, /*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_6gnocis_9sequences_3IID_5__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_6gnocis_9sequences_3IID_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|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n\tThe `IID` class trains an i.i.d. model for generating sequences.\n\t\n\t:param trainingSequences: Training sequences.\n\t:param pseudoCounts: Whether or not to use pseudocounts. Default is `True`.\n\t:param addComplements: Whether or not to add complements. Default is `True`.\n\t\n\t:type trainingSequences: sequences/sequenceStream/str\n\t:type pseudoCounts: bool, optional\n\t:type addComplements: bool, optional\n\t", /*tp_doc*/
  __pyx_tp_traverse_6gnocis_9sequences_IID, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences_IID, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_IID, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6gnocis_9sequences_IID, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_3IID_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_IID, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6gnocis_9sequences_streamFASTASeq(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)o);
  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->lastLine = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->fstream = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_streamFASTASeq(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *p = (struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->name);
  Py_CLEAR(p->lastLine);
  Py_CLEAR(p->fstream);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6gnocis_9sequences_streamFASTASeq(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *p = (struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)o;
  if (p->fstream) {
    e = (*v)(p->fstream, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences_streamFASTASeq(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *p = (struct __pyx_obj_6gnocis_9sequences_streamFASTASeq *)o;
  tmp = ((PyObject*)p->fstream);
  p->fstream = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6gnocis_9sequences_14streamFASTASeq_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_4name_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_14streamFASTASeq_lastLine(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_lastLine(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_8lastLine_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_14streamFASTASeq_wantBlockSize(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_wantBlockSize(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_13wantBlockSize_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_14streamFASTASeq_parsingCompleted(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_parsingCompleted(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_16parsingCompleted_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_14streamFASTASeq_fstream(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_fstream(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_14streamFASTASeq_7fstream_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_streamFASTASeq[] = {
  {"stream", (PyCFunction)__pyx_pw_6gnocis_9sequences_14streamFASTASeq_9stream, METH_NOARGS, 0},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_14streamFASTASeq_12__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_14streamFASTASeq_14__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6gnocis_9sequences_streamFASTASeq[] = {
  {(char *)"name", __pyx_getprop_6gnocis_9sequences_14streamFASTASeq_name, __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_name, (char *)0, 0},
  {(char *)"lastLine", __pyx_getprop_6gnocis_9sequences_14streamFASTASeq_lastLine, __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_lastLine, (char *)0, 0},
  {(char *)"wantBlockSize", __pyx_getprop_6gnocis_9sequences_14streamFASTASeq_wantBlockSize, __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_wantBlockSize, (char *)0, 0},
  {(char *)"parsingCompleted", __pyx_getprop_6gnocis_9sequences_14streamFASTASeq_parsingCompleted, __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_parsingCompleted, (char *)0, 0},
  {(char *)"fstream", __pyx_getprop_6gnocis_9sequences_14streamFASTASeq_fstream, __pyx_setprop_6gnocis_9sequences_14streamFASTASeq_fstream, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6gnocis_9sequences_streamFASTASeq = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.streamFASTASeq", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_streamFASTASeq), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_streamFASTASeq, /*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_6gnocis_9sequences_14streamFASTASeq_7__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_6gnocis_9sequences_14streamFASTASeq_5__str__, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6gnocis_9sequences_streamFASTASeq, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences_streamFASTASeq, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_6gnocis_9sequences_14streamFASTASeq_3__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_streamFASTASeq, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6gnocis_9sequences_streamFASTASeq, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_14streamFASTASeq_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_streamFASTASeq, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6gnocis_9sequences_stream2bitNBlock(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_stream2bitNBlock(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6gnocis_9sequences_16stream2bitNBlock_start(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5start_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_16stream2bitNBlock_start(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5start_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_16stream2bitNBlock_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_4size_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_16stream2bitNBlock_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_4size_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_stream2bitNBlock[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_16stream2bitNBlock_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6gnocis_9sequences_stream2bitNBlock[] = {
  {(char *)"start", __pyx_getprop_6gnocis_9sequences_16stream2bitNBlock_start, __pyx_setprop_6gnocis_9sequences_16stream2bitNBlock_start, (char *)0, 0},
  {(char *)"size", __pyx_getprop_6gnocis_9sequences_16stream2bitNBlock_size, __pyx_setprop_6gnocis_9sequences_16stream2bitNBlock_size, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6gnocis_9sequences_stream2bitNBlock = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.stream2bitNBlock", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_stream2bitNBlock), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_stream2bitNBlock, /*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_6gnocis_9sequences_stream2bitNBlock, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6gnocis_9sequences_stream2bitNBlock, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_16stream2bitNBlock_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_stream2bitNBlock, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6gnocis_9sequences_stream2bitSeq(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)o);
  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->fstream = Py_None; Py_INCREF(Py_None);
  p->Nblocks = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences_stream2bitSeq(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *p = (struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->name);
  Py_CLEAR(p->fstream);
  Py_CLEAR(p->Nblocks);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6gnocis_9sequences_stream2bitSeq(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *p = (struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)o;
  if (p->fstream) {
    e = (*v)(p->fstream, a); if (e) return e;
  }
  if (p->Nblocks) {
    e = (*v)(p->Nblocks, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences_stream2bitSeq(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *p = (struct __pyx_obj_6gnocis_9sequences_stream2bitSeq *)o;
  tmp = ((PyObject*)p->fstream);
  p->fstream = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->Nblocks);
  p->Nblocks = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6gnocis_9sequences_13stream2bitSeq_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_4name_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_13stream2bitSeq_fstream(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_fstream(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7fstream_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_13stream2bitSeq_wantBlockSize(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_wantBlockSize(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_13wantBlockSize_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_13stream2bitSeq_nnt(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_3nnt_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_nnt(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_3nnt_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6gnocis_9sequences_13stream2bitSeq_Nblocks(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_1__get__(o);
}

static int __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_Nblocks(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_3__set__(o, v);
  }
  else {
    return __pyx_pw_6gnocis_9sequences_13stream2bitSeq_7Nblocks_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_6gnocis_9sequences_stream2bitSeq[] = {
  {"stream", (PyCFunction)__pyx_pw_6gnocis_9sequences_13stream2bitSeq_3stream, METH_NOARGS, 0},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_13stream2bitSeq_12__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_6gnocis_9sequences_13stream2bitSeq_14__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6gnocis_9sequences_stream2bitSeq[] = {
  {(char *)"name", __pyx_getprop_6gnocis_9sequences_13stream2bitSeq_name, __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_name, (char *)0, 0},
  {(char *)"fstream", __pyx_getprop_6gnocis_9sequences_13stream2bitSeq_fstream, __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_fstream, (char *)0, 0},
  {(char *)"wantBlockSize", __pyx_getprop_6gnocis_9sequences_13stream2bitSeq_wantBlockSize, __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_wantBlockSize, (char *)0, 0},
  {(char *)"nnt", __pyx_getprop_6gnocis_9sequences_13stream2bitSeq_nnt, __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_nnt, (char *)0, 0},
  {(char *)"Nblocks", __pyx_getprop_6gnocis_9sequences_13stream2bitSeq_Nblocks, __pyx_setprop_6gnocis_9sequences_13stream2bitSeq_Nblocks, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6gnocis_9sequences_stream2bitSeq = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.stream2bitSeq", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences_stream2bitSeq), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences_stream2bitSeq, /*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_6gnocis_9sequences_13stream2bitSeq_10__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_6gnocis_9sequences_13stream2bitSeq_8__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|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6gnocis_9sequences_stream2bitSeq, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences_stream2bitSeq, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_6gnocis_9sequences_13stream2bitSeq_6__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6gnocis_9sequences_stream2bitSeq, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6gnocis_9sequences_stream2bitSeq, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6gnocis_9sequences_13stream2bitSeq_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences_stream2bitSeq, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct__table[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct__table = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct__table(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct__table > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct__table[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct__table];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct__table(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_8genexpr1__pyx_v_s);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct__table < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct__table[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct__table++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct__table(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *)o;
  if (p->__pyx_8genexpr1__pyx_v_s) {
    e = (*v)(p->__pyx_8genexpr1__pyx_v_s, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct__table(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table *)o;
  tmp = ((PyObject*)p->__pyx_8genexpr1__pyx_v_s);
  p->__pyx_8genexpr1__pyx_v_s = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct__table = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct__table", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct__table), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct__table, /*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_6gnocis_9sequences___pyx_scope_struct__table, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct__table, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct__table, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_1_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_1_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_1_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_1_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_1_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_1_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_l);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_1_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_1_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_1_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_l) {
    e = (*v)(p->__pyx_v_l, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_1_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_1_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_1_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_1_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_1_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_1_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_2_withLabel[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_2_withLabel = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_2_withLabel(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_2_withLabel > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_2_withLabel[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_2_withLabel];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_2_withLabel(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_ret);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_2_withLabel < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_2_withLabel[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_2_withLabel++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_2_withLabel(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *)o;
  if (p->__pyx_v_ret) {
    e = (*v)(p->__pyx_v_ret, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_2_withLabel(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel *)o;
  tmp = ((PyObject*)p->__pyx_v_ret);
  p->__pyx_v_ret = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_2_withLabel = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_2_withLabel", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_2_withLabel), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_2_withLabel, /*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_6gnocis_9sequences___pyx_scope_struct_2_withLabel, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_2_withLabel, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_2_withLabel, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_3_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_3_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_3_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_3_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_3_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_3_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_3_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_seqs);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_3_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_3_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_3_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_3_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_seqs) {
    e = (*v)(p->__pyx_v_seqs, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_3_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_3_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_3_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_3_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_3_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_3_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_4_labels[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_4_labels = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_4_labels(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_4_labels > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_4_labels[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_4_labels];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_4_labels(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_4_labels < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_4_labels[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_4_labels++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_4_labels(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *)o;
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_4_labels(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels *)o;
  tmp = ((PyObject*)p->__pyx_v_self);
  p->__pyx_v_self = ((struct __pyx_obj_6gnocis_9sequences_sequences *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_4_labels = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_4_labels", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_4_labels), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_4_labels, /*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_6gnocis_9sequences___pyx_scope_struct_4_labels, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_4_labels, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_4_labels, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_5_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_5_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_5_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_5_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_5_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_5_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_5_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_l);
  Py_CLEAR(p->__pyx_v_s);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_5_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_5_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_5_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_5_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_l) {
    e = (*v)(p->__pyx_v_l, a); if (e) return e;
  }
  if (p->__pyx_v_s) {
    e = (*v)(p->__pyx_v_s, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_5_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_5_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_5_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_5_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_5_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_5_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_6_printStatistics[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_6_printStatistics = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_6_printStatistics(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_6_printStatistics > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_6_printStatistics[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_6_printStatistics];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_6_printStatistics(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_6_printStatistics < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_6_printStatistics[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_6_printStatistics++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_6_printStatistics(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *)o;
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_6_printStatistics(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics *)o;
  tmp = ((PyObject*)p->__pyx_v_self);
  p->__pyx_v_self = ((struct __pyx_obj_6gnocis_9sequences_sequences *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_6_printStatistics = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_6_printStatistics", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_6_printStatistics), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_6_printStatistics, /*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_6gnocis_9sequences___pyx_scope_struct_6_printStatistics, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_6_printStatistics, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_6_printStatistics, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_7_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_7_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_7_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_7_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_7_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_7_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_7_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_s);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_7_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_7_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_7_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_7_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_s) {
    e = (*v)(p->__pyx_v_s, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_7_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_7_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_7_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_7_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_7_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_7_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_8_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_8_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_8_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_8_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_8_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_8_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_8_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_s);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_8_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_8_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_8_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_8_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_s) {
    e = (*v)(p->__pyx_v_s, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_8_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_8_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_8_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_8_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_8_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_8_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_9_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_9_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_9_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_9_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_9_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_9_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_9_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_s);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_9_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_9_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_9_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_9_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_s) {
    e = (*v)(p->__pyx_v_s, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_9_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_9_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_9_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_9_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_9_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_9_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_10_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_10_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_10_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_10_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_10_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_10_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_10_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_s);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_10_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_10_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_10_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_10_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_s) {
    e = (*v)(p->__pyx_v_s, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_10_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_10_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_10_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_10_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_10_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_10_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_f);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *)o;
  if (p->__pyx_v_f) {
    e = (*v)(p->__pyx_v_f, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ *)o;
  tmp = ((PyObject*)p->__pyx_v_f);
  p->__pyx_v_f = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_11_loadFASTAGZ", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ, /*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_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_12_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_12_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_12_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_12_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_12_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_12_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_12_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_y);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_12_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_12_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_12_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_12_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_y) {
    e = (*v)(p->__pyx_v_y, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_12_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_12_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_12_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_12_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_12_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_12_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_13_fetch[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_13_fetch = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_13_fetch(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_13_fetch > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_13_fetch[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_13_fetch];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_13_fetch(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_cseq);
  Py_CLEAR(p->__pyx_v_fetched);
  Py_CLEAR(p->__pyx_v_maxnt);
  Py_CLEAR(p->__pyx_v_n);
  Py_CLEAR(p->__pyx_v_self);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_13_fetch < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_13_fetch[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_13_fetch++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_13_fetch(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch *)o;
  if (p->__pyx_v_cseq) {
    e = (*v)(((PyObject *)p->__pyx_v_cseq), a); if (e) return e;
  }
  if (p->__pyx_v_fetched) {
    e = (*v)(p->__pyx_v_fetched, a); if (e) return e;
  }
  if (p->__pyx_v_maxnt) {
    e = (*v)(p->__pyx_v_maxnt, 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_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;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_13_fetch = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_13_fetch", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_13_fetch), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_13_fetch, /*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_6gnocis_9sequences___pyx_scope_struct_13_fetch, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_13_fetch, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_cseq);
  Py_CLEAR(p->__pyx_v_genexpr);
  Py_CLEAR(p->__pyx_v_self);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences *)o;
  if (p->__pyx_v_cseq) {
    e = (*v)(p->__pyx_v_cseq, a); if (e) return e;
  }
  if (p->__pyx_v_genexpr) {
    e = (*v)(p->__pyx_v_genexpr, 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;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_14_streamFullSequences", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences, /*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_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_15_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_15_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_15_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_15_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_15_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_15_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_15_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_blk);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_15_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_15_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_15_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_15_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_blk) {
    e = (*v)(p->__pyx_v_blk, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_15_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_15_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_15_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_15_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_15_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_15_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_9genexpr18__pyx_v_cseq);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *)o;
  if (p->__pyx_9genexpr18__pyx_v_cseq) {
    e = (*v)(p->__pyx_9genexpr18__pyx_v_cseq, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths *)o;
  tmp = ((PyObject*)p->__pyx_9genexpr18__pyx_v_cseq);
  p->__pyx_9genexpr18__pyx_v_cseq = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_16_sequenceLengths", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths, /*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_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_17_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_17_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_17_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_17_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_17_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_17_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_17_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_blk);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_17_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_17_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_17_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_17_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_blk) {
    e = (*v)(p->__pyx_v_blk, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_17_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_17_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_17_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_17_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_17_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_17_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_18_stream[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_18_stream = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_18_stream(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_18_stream > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_18_stream[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_18_stream];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_18_stream(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_cbuf);
  Py_CLEAR(p->__pyx_v_cl);
  Py_CLEAR(p->__pyx_v_self);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_18_stream < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_18_stream[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_18_stream++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_18_stream(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream *)o;
  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;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_18_stream = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_18_stream", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_18_stream), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_18_stream, /*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_6gnocis_9sequences___pyx_scope_struct_18_stream, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_18_stream, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_19___iter__[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_19___iter__ = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_19___iter__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_19___iter__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_19___iter__[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_19___iter__];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_19___iter__(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_fIn);
  Py_CLEAR(p->__pyx_v_genexpr);
  Py_CLEAR(p->__pyx_v_line);
  Py_CLEAR(p->__pyx_v_lineSrc);
  Py_CLEAR(p->__pyx_v_self);
  Py_CLEAR(p->__pyx_v_seqStream);
  Py_CLEAR(p->__pyx_v_sname);
  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_6gnocis_9sequences___pyx_scope_struct_19___iter__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_19___iter__[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_19___iter__++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_19___iter__(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__ *)o;
  if (p->__pyx_v_fIn) {
    e = (*v)(p->__pyx_v_fIn, a); if (e) return e;
  }
  if (p->__pyx_v_genexpr) {
    e = (*v)(p->__pyx_v_genexpr, a); if (e) return e;
  }
  if (p->__pyx_v_lineSrc) {
    e = (*v)(p->__pyx_v_lineSrc, a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(p->__pyx_v_self, a); if (e) return e;
  }
  if (p->__pyx_v_seqStream) {
    e = (*v)(((PyObject *)p->__pyx_v_seqStream), 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;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_19___iter__ = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_19___iter__", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_19___iter__), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_19___iter__, /*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_6gnocis_9sequences___pyx_scope_struct_19___iter__, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_19___iter__, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_20_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_20_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_20_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_20_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_20_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_20_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_20_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_y);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_20_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_20_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_20_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_20_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_y) {
    e = (*v)(p->__pyx_v_y, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_20_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_20_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_20_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_20_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_20_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_20_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_21_stream[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_21_stream = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_21_stream(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_21_stream > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_21_stream[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_21_stream];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_21_stream(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_Nblocks);
  Py_CLEAR(p->__pyx_v_block);
  Py_CLEAR(p->__pyx_v_cbuf);
  Py_CLEAR(p->__pyx_v_firstValidNBlock);
  Py_CLEAR(p->__pyx_v_i);
  Py_CLEAR(p->__pyx_v_iblock);
  Py_CLEAR(p->__pyx_v_ntByIndex);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_21_stream < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_21_stream[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_21_stream++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_21_stream(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream *)o;
  if (p->__pyx_v_Nblocks) {
    e = (*v)(p->__pyx_v_Nblocks, a); if (e) return e;
  }
  if (p->__pyx_v_block) {
    e = (*v)(((PyObject *)p->__pyx_v_block), a); if (e) return e;
  }
  if (p->__pyx_v_firstValidNBlock) {
    e = (*v)(p->__pyx_v_firstValidNBlock, a); if (e) return e;
  }
  if (p->__pyx_v_i) {
    e = (*v)(p->__pyx_v_i, a); if (e) return e;
  }
  if (p->__pyx_v_iblock) {
    e = (*v)(p->__pyx_v_iblock, a); if (e) return e;
  }
  if (p->__pyx_v_ntByIndex) {
    e = (*v)(p->__pyx_v_ntByIndex, a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_21_stream = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_21_stream", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_21_stream), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_21_stream, /*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_6gnocis_9sequences___pyx_scope_struct_21_stream, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_21_stream, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_22___iter__[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_22___iter__ = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_22___iter__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_22___iter__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_22___iter__[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_22___iter__];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_22___iter__(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_Nblocks);
  Py_CLEAR(p->__pyx_v_blkSizes);
  Py_CLEAR(p->__pyx_v_blkStarts);
  Py_CLEAR(p->__pyx_9genexpr25__pyx_v_bsize);
  Py_CLEAR(p->__pyx_9genexpr25__pyx_v_bstart);
  Py_CLEAR(p->__pyx_v_fIn);
  Py_CLEAR(p->__pyx_v_genexpr);
  Py_CLEAR(p->__pyx_v_maskSizes);
  Py_CLEAR(p->__pyx_v_maskStarts);
  Py_CLEAR(p->__pyx_v_name);
  Py_CLEAR(p->__pyx_v_namebytes);
  Py_CLEAR(p->__pyx_v_namelen);
  Py_CLEAR(p->__pyx_v_nmask);
  Py_CLEAR(p->__pyx_v_self);
  Py_CLEAR(p->__pyx_v_seqInfo);
  Py_CLEAR(p->__pyx_v_seqs);
  Py_CLEAR(p->__pyx_v_sname);
  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);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_22___iter__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_22___iter__[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_22___iter__++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_22___iter__(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__ *)o;
  if (p->__pyx_v_Nblocks) {
    e = (*v)(p->__pyx_v_Nblocks, a); if (e) return e;
  }
  if (p->__pyx_v_blkSizes) {
    e = (*v)(p->__pyx_v_blkSizes, a); if (e) return e;
  }
  if (p->__pyx_v_blkStarts) {
    e = (*v)(p->__pyx_v_blkStarts, a); if (e) return e;
  }
  if (p->__pyx_9genexpr25__pyx_v_bsize) {
    e = (*v)(p->__pyx_9genexpr25__pyx_v_bsize, a); if (e) return e;
  }
  if (p->__pyx_9genexpr25__pyx_v_bstart) {
    e = (*v)(p->__pyx_9genexpr25__pyx_v_bstart, a); if (e) return e;
  }
  if (p->__pyx_v_fIn) {
    e = (*v)(p->__pyx_v_fIn, a); if (e) return e;
  }
  if (p->__pyx_v_genexpr) {
    e = (*v)(p->__pyx_v_genexpr, a); if (e) return e;
  }
  if (p->__pyx_v_maskSizes) {
    e = (*v)(p->__pyx_v_maskSizes, a); if (e) return e;
  }
  if (p->__pyx_v_maskStarts) {
    e = (*v)(p->__pyx_v_maskStarts, a); if (e) return e;
  }
  if (p->__pyx_v_namelen) {
    e = (*v)(p->__pyx_v_namelen, a); if (e) return e;
  }
  if (p->__pyx_v_nmask) {
    e = (*v)(p->__pyx_v_nmask, a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(p->__pyx_v_self, a); if (e) return e;
  }
  if (p->__pyx_v_seqInfo) {
    e = (*v)(p->__pyx_v_seqInfo, a); if (e) return e;
  }
  if (p->__pyx_v_seqs) {
    e = (*v)(p->__pyx_v_seqs, 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;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_22___iter__ = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_22___iter__", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_22___iter__), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_22___iter__, /*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_6gnocis_9sequences___pyx_scope_struct_22___iter__, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_22___iter__, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_23_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_23_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_23_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_23_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_23_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_23_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_23_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_23_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_23_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_23_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_23_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_23_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_23_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_23_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_23_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_23_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_23_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_24_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_24_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_24_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_24_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_24_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_24_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_24_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_24_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_24_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_24_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_24_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_24_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_24_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_24_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_24_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_24_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_24_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_25_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_25_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_25_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_25_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_25_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_25_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_25_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v__);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_25_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_25_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_25_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_25_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v__) {
    e = (*v)(p->__pyx_v__, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_25_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_25_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_25_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_25_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_25_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_25_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_26_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_26_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_26_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_26_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_26_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_26_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_26_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v__);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_26_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_26_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_26_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_26_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v__) {
    e = (*v)(p->__pyx_v__, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_26_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_26_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_26_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_26_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_26_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_26_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_blk);
  Py_CLEAR(p->__pyx_v_cbuf);
  Py_CLEAR(p->__pyx_v_cseq);
  Py_CLEAR(p->__pyx_v_src);
  Py_CLEAR(p->__pyx_t_0);
  Py_CLEAR(p->__pyx_t_4);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows *)o;
  if (p->__pyx_v_cseq) {
    e = (*v)(p->__pyx_v_cseq, a); if (e) return e;
  }
  if (p->__pyx_v_src) {
    e = (*v)(p->__pyx_v_src, 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_4) {
    e = (*v)(p->__pyx_t_4, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_27_streamSequenceWindows", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows, /*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_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_28_stream[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_28_stream = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_28_stream(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_28_stream > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_28_stream[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_28_stream];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_28_stream(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_ng);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_28_stream < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_28_stream[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_28_stream++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_28_stream(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream *)o;
  if (p->__pyx_v_ng) {
    e = (*v)(p->__pyx_v_ng, a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(p->__pyx_v_self, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_28_stream = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_28_stream", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_28_stream), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_28_stream, /*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_6gnocis_9sequences___pyx_scope_struct_28_stream, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_28_stream, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_29___iter__[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_29___iter__ = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_29___iter__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_29___iter__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_29___iter__[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_29___iter__];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_29___iter__(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_i);
  Py_CLEAR(p->__pyx_v_seed);
  Py_CLEAR(p->__pyx_v_self);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_29___iter__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_29___iter__[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_29___iter__++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_29___iter__(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__ *)o;
  if (p->__pyx_v_i) {
    e = (*v)(p->__pyx_v_i, a); if (e) return e;
  }
  if (p->__pyx_v_seed) {
    e = (*v)(p->__pyx_v_seed, a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(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;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_29___iter__ = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_29___iter__", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_29___iter__), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_29___iter__, /*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_6gnocis_9sequences___pyx_scope_struct_29___iter__, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_29___iter__, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_30__prepare[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_30__prepare = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_30__prepare(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_30__prepare > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_30__prepare[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_30__prepare];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_30__prepare(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_30__prepare < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_30__prepare[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_30__prepare++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_30__prepare(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *)o;
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_30__prepare(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare *)o;
  tmp = ((PyObject*)p->__pyx_v_self);
  p->__pyx_v_self = ((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_30__prepare = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_30__prepare", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_30__prepare), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_30__prepare, /*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_6gnocis_9sequences___pyx_scope_struct_30__prepare, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_30__prepare, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_30__prepare, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_31_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_31_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_31_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_31_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_31_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_31_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_31_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_31_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_31_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_31_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_31_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_31_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_31_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_31_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_31_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_31_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_31_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_32_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_32_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_32_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_32_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_32_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_32_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_32_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_x);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_32_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_32_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_32_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_32_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_x) {
    e = (*v)(p->__pyx_v_x, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_32_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_32_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_32_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_32_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_32_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_32_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_33_generate[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_33_generate = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_33_generate(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_33_generate > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_33_generate[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_33_generate];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_33_generate(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_33_generate < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_33_generate[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_33_generate++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_33_generate(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *)o;
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_33_generate(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate *)o;
  tmp = ((PyObject*)p->__pyx_v_self);
  p->__pyx_v_self = ((struct __pyx_obj_6gnocis_9sequences_MarkovChain *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_33_generate = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_33_generate", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_33_generate), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_33_generate, /*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_6gnocis_9sequences___pyx_scope_struct_33_generate, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_33_generate, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_33_generate, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_34_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_34_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_34_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_34_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_34_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_34_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_34_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_x);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_34_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_34_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_34_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_34_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_x) {
    e = (*v)(p->__pyx_v_x, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_34_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_34_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_34_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_34_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_34_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_34_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_35__prepare[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_35__prepare = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_35__prepare(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_35__prepare > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_35__prepare[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_35__prepare];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_35__prepare(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_35__prepare < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_35__prepare[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_35__prepare++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_35__prepare(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *)o;
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_35__prepare(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare *)o;
  tmp = ((PyObject*)p->__pyx_v_self);
  p->__pyx_v_self = ((struct __pyx_obj_6gnocis_9sequences_IID *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_35__prepare = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_35__prepare", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_35__prepare), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_35__prepare, /*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_6gnocis_9sequences___pyx_scope_struct_35__prepare, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_35__prepare, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_35__prepare, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_36_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_36_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_36_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_36_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_36_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_36_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_36_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_nt);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_36_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_36_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_36_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_36_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_nt) {
    e = (*v)(p->__pyx_v_nt, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_36_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_36_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_36_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_36_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_36_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_36_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_37_generate[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_37_generate = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_37_generate(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_37_generate > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_37_generate[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_37_generate];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_37_generate(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_length);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_37_generate < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_37_generate[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_37_generate++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_37_generate(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *)o;
  if (p->__pyx_v_length) {
    e = (*v)(p->__pyx_v_length, a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_37_generate(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate *)o;
  tmp = ((PyObject*)p->__pyx_v_length);
  p->__pyx_v_length = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->__pyx_v_self);
  p->__pyx_v_self = ((struct __pyx_obj_6gnocis_9sequences_IID *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_37_generate = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_37_generate", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_37_generate), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_37_generate, /*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_6gnocis_9sequences___pyx_scope_struct_37_generate, /*tp_traverse*/
  __pyx_tp_clear_6gnocis_9sequences___pyx_scope_struct_37_generate, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_37_generate, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_38_genexpr[8];
static int __pyx_freecount_6gnocis_9sequences___pyx_scope_struct_38_genexpr = 0;

static PyObject *__pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_38_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_38_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr)))) {
    o = (PyObject*)__pyx_freelist_6gnocis_9sequences___pyx_scope_struct_38_genexpr[--__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_38_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_38_genexpr(PyObject *o) {
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v__);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_38_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr)))) {
    __pyx_freelist_6gnocis_9sequences___pyx_scope_struct_38_genexpr[__pyx_freecount_6gnocis_9sequences___pyx_scope_struct_38_genexpr++] = ((struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6gnocis_9sequences___pyx_scope_struct_38_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *p = (struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v__) {
    e = (*v)(p->__pyx_v__, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_6gnocis_9sequences___pyx_scope_struct_38_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "gnocis.sequences.__pyx_scope_struct_38_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_6gnocis_9sequences___pyx_scope_struct_38_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6gnocis_9sequences___pyx_scope_struct_38_genexpr, /*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_6gnocis_9sequences___pyx_scope_struct_38_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6gnocis_9sequences___pyx_scope_struct_38_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyMethodDef __pyx_methods[] = {
  {"streamFASTA", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_5streamFASTA, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_4streamFASTA},
  {"streamFASTAGZ", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_7streamFASTAGZ, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_6streamFASTAGZ},
  {"stream2bit", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_9stream2bit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_8stream2bit},
  {"getSequenceStreamFromPath", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gnocis_9sequences_11getSequenceStreamFromPath, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gnocis_9sequences_10getSequenceStreamFromPath},
  {0, 0, 0, 0}
};

#if PY_MAJOR_VERSION >= 3
#if CYTHON_PEP489_MULTI_PHASE_INIT
static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
static int __pyx_pymod_exec_sequences(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec_sequences},
  {0, NULL}
};
#endif

static struct PyModuleDef __pyx_moduledef = {
    PyModuleDef_HEAD_INIT,
    "sequences",
    0, /* m_doc */
  #if CYTHON_PEP489_MULTI_PHASE_INIT
    0, /* m_size */
  #else
    -1, /* m_size */
  #endif
    __pyx_methods /* m_methods */,
  #if CYTHON_PEP489_MULTI_PHASE_INIT
    __pyx_moduledef_slots, /* m_slots */
  #else
    NULL, /* m_reload */
  #endif
    NULL, /* m_traverse */
    NULL, /* m_clear */
    NULL /* m_free */
};
#endif
#ifndef CYTHON_SMALL_CODE
#if defined(__clang__)
    #define CYTHON_SMALL_CODE
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
    #define CYTHON_SMALL_CODE __attribute__((cold))
#else
    #define CYTHON_SMALL_CODE
#endif
#endif

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_kp_u_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0},
  {&__pyx_kp_u_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 1, 0, 0},
  {&__pyx_kp_u_2b, __pyx_k_2b, sizeof(__pyx_k_2b), 0, 1, 0, 0},
  {&__pyx_kp_u_2bit, __pyx_k_2bit, sizeof(__pyx_k_2bit), 0, 1, 0, 0},
  {&__pyx_kp_u_2bit_sequence_stream_s, __pyx_k_2bit_sequence_stream_s, sizeof(__pyx_k_2bit_sequence_stream_s), 0, 1, 0, 0},
  {&__pyx_kp_u_2f, __pyx_k_2f, sizeof(__pyx_k_2f), 0, 1, 0, 0},
  {&__pyx_kp_u_65, __pyx_k_65, sizeof(__pyx_k_65), 0, 1, 0, 0},
  {&__pyx_n_u_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 1, 0, 1},
  {&__pyx_kp_u_Add_complements, __pyx_k_Add_complements, sizeof(__pyx_k_Add_complements), 0, 1, 0, 0},
  {&__pyx_kp_u_Add_reverse_complements, __pyx_k_Add_reverse_complements, sizeof(__pyx_k_Add_reverse_complements), 0, 1, 0, 0},
  {&__pyx_n_u_B, __pyx_k_B, sizeof(__pyx_k_B), 0, 1, 0, 1},
  {&__pyx_n_u_C, __pyx_k_C, sizeof(__pyx_k_C), 0, 1, 0, 1},
  {&__pyx_kp_u_Choice_weights_sum_up_to_more_th, __pyx_k_Choice_weights_sum_up_to_more_th, sizeof(__pyx_k_Choice_weights_sum_up_to_more_th), 0, 1, 0, 0},
  {&__pyx_n_s_DOTALL, __pyx_k_DOTALL, sizeof(__pyx_k_DOTALL), 0, 0, 1, 1},
  {&__pyx_kp_u_FASTA_file, __pyx_k_FASTA_file, sizeof(__pyx_k_FASTA_file), 0, 1, 0, 0},
  {&__pyx_kp_u_FASTA_file_syntax_error, __pyx_k_FASTA_file_syntax_error, sizeof(__pyx_k_FASTA_file_syntax_error), 0, 1, 0, 0},
  {&__pyx_kp_u_FASTA_sequence_error, __pyx_k_FASTA_sequence_error, sizeof(__pyx_k_FASTA_sequence_error), 0, 1, 0, 0},
  {&__pyx_kp_u_FASTA_sequence_stream_s, __pyx_k_FASTA_sequence_stream_s, sizeof(__pyx_k_FASTA_sequence_stream_s), 0, 1, 0, 0},
  {&__pyx_kp_u_From_FASTA_file, __pyx_k_From_FASTA_file, sizeof(__pyx_k_From_FASTA_file), 0, 1, 0, 0},
  {&__pyx_n_u_G, __pyx_k_G, sizeof(__pyx_k_G), 0, 1, 0, 1},
  {&__pyx_kp_u_Generated_sequence_Length, __pyx_k_Generated_sequence_Length, sizeof(__pyx_k_Generated_sequence_Length), 0, 1, 0, 0},
  {&__pyx_kp_u_Generated_set_Sequences, __pyx_k_Generated_set_Sequences, sizeof(__pyx_k_Generated_set_Sequences), 0, 1, 0, 0},
  {&__pyx_kp_u_Generator_sequence_stream_s, __pyx_k_Generator_sequence_stream_s, sizeof(__pyx_k_Generator_sequence_stream_s), 0, 1, 0, 0},
  {&__pyx_kp_u_Generator_sequence_stream_sequen, __pyx_k_Generator_sequence_stream_sequen, sizeof(__pyx_k_Generator_sequence_stream_sequen), 0, 1, 0, 0},
  {&__pyx_n_u_I, __pyx_k_I, sizeof(__pyx_k_I), 0, 1, 0, 1},
  {&__pyx_n_u_II, __pyx_k_II, sizeof(__pyx_k_II), 0, 1, 0, 1},
  {&__pyx_n_s_IID, __pyx_k_IID, sizeof(__pyx_k_IID), 0, 0, 1, 1},
  {&__pyx_kp_u_IID_Pseudocounts, __pyx_k_IID_Pseudocounts, sizeof(__pyx_k_IID_Pseudocounts), 0, 1, 0, 0},
  {&__pyx_n_u_IIII, __pyx_k_IIII, sizeof(__pyx_k_IIII), 0, 1, 0, 1},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0x34, __pyx_k_Incompatible_checksums_s_vs_0x34, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x34), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0x53, __pyx_k_Incompatible_checksums_s_vs_0x53, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x53), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0x65, __pyx_k_Incompatible_checksums_s_vs_0x65, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x65), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0x95, __pyx_k_Incompatible_checksums_s_vs_0x95, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x95), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xac, __pyx_k_Incompatible_checksums_s_vs_0xac, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xac), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xb3, __pyx_k_Incompatible_checksums_s_vs_0xb3, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb3), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xc6, __pyx_k_Incompatible_checksums_s_vs_0xc6, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xc6), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_k_Incompatible_checksums_s_vs_0xd4, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xd4), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xfa, __pyx_k_Incompatible_checksums_s_vs_0xfa, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xfa), 0, 0, 1, 0},
  {&__pyx_kp_u_Invalid_2bit_sequence_file_Heade, __pyx_k_Invalid_2bit_sequence_file_Heade, sizeof(__pyx_k_Invalid_2bit_sequence_file_Heade), 0, 1, 0, 0},
  {&__pyx_n_u_Labels, __pyx_k_Labels, sizeof(__pyx_k_Labels), 0, 1, 0, 1},
  {&__pyx_n_u_Length, __pyx_k_Length, sizeof(__pyx_k_Length), 0, 1, 0, 1},
  {&__pyx_kp_u_Length_each, __pyx_k_Length_each, sizeof(__pyx_k_Length_each), 0, 1, 0, 0},
  {&__pyx_n_s_MarkovChain, __pyx_k_MarkovChain, sizeof(__pyx_k_MarkovChain), 0, 0, 1, 1},
  {&__pyx_kp_u_Markov_Chain_Degree, __pyx_k_Markov_Chain_Degree, sizeof(__pyx_k_Markov_Chain_Degree), 0, 1, 0, 0},
  {&__pyx_kp_u_Mean_length, __pyx_k_Mean_length, sizeof(__pyx_k_Mean_length), 0, 1, 0, 0},
  {&__pyx_kp_u_Model, __pyx_k_Model, sizeof(__pyx_k_Model), 0, 1, 0, 0},
  {&__pyx_kp_u_Model_2, __pyx_k_Model_2, sizeof(__pyx_k_Model_2), 0, 1, 0, 0},
  {&__pyx_n_u_Name, __pyx_k_Name, sizeof(__pyx_k_Name), 0, 1, 0, 1},
  {&__pyx_n_s_Nblocks, __pyx_k_Nblocks, sizeof(__pyx_k_Nblocks), 0, 0, 1, 1},
  {&__pyx_n_u_Negative, __pyx_k_Negative, sizeof(__pyx_k_Negative), 0, 1, 0, 1},
  {&__pyx_n_u_No, __pyx_k_No, sizeof(__pyx_k_No), 0, 1, 0, 1},
  {&__pyx_kp_u_No_sequences_with_the_requested, __pyx_k_No_sequences_with_the_requested, sizeof(__pyx_k_No_sequences_with_the_requested), 0, 1, 0, 0},
  {&__pyx_kp_u_None, __pyx_k_None, sizeof(__pyx_k_None), 0, 1, 0, 0},
  {&__pyx_kp_u_Not_all_requested_labels_were_fo, __pyx_k_Not_all_requested_labels_were_fo, sizeof(__pyx_k_Not_all_requested_labels_were_fo), 0, 1, 0, 0},
  {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1},
  {&__pyx_n_u_Positive, __pyx_k_Positive, sizeof(__pyx_k_Positive), 0, 1, 0, 1},
  {&__pyx_kp_u_Pseudocounts, __pyx_k_Pseudocounts, sizeof(__pyx_k_Pseudocounts), 0, 1, 0, 0},
  {&__pyx_kp_u_Random_sequence, __pyx_k_Random_sequence, sizeof(__pyx_k_Random_sequence), 0, 1, 0, 0},
  {&__pyx_kp_u_Seed, __pyx_k_Seed, sizeof(__pyx_k_Seed), 0, 1, 0, 0},
  {&__pyx_n_u_Sequence, __pyx_k_Sequence, sizeof(__pyx_k_Sequence), 0, 1, 0, 1},
  {&__pyx_kp_u_Sequence_label, __pyx_k_Sequence_label, sizeof(__pyx_k_Sequence_label), 0, 1, 0, 0},
  {&__pyx_kp_u_Sequence_list_s, __pyx_k_Sequence_list_s, sizeof(__pyx_k_Sequence_list_s), 0, 1, 0, 0},
  {&__pyx_kp_u_Sequence_s, __pyx_k_Sequence_s, sizeof(__pyx_k_Sequence_s), 0, 1, 0, 0},
  {&__pyx_kp_u_Sequence_set_statistics, __pyx_k_Sequence_set_statistics, sizeof(__pyx_k_Sequence_set_statistics), 0, 1, 0, 0},
  {&__pyx_kp_u_Sequences, __pyx_k_Sequences, sizeof(__pyx_k_Sequences), 0, 1, 0, 0},
  {&__pyx_kp_u_Sequences_d, __pyx_k_Sequences_d, sizeof(__pyx_k_Sequences_d), 0, 1, 0, 0},
  {&__pyx_kp_u_Source_region, __pyx_k_Source_region, sizeof(__pyx_k_Source_region), 0, 1, 0, 0},
  {&__pyx_kp_s_Streams_a_2bit_file_param_path, __pyx_k_Streams_a_2bit_file_param_path, sizeof(__pyx_k_Streams_a_2bit_file_param_path), 0, 0, 1, 0},
  {&__pyx_kp_s_Streams_a_FASTA_file_param_path, __pyx_k_Streams_a_FASTA_file_param_path, sizeof(__pyx_k_Streams_a_FASTA_file_param_path), 0, 0, 1, 0},
  {&__pyx_n_u_T, __pyx_k_T, sizeof(__pyx_k_T), 0, 1, 0, 1},
  {&__pyx_kp_u_Total_length_d_nt, __pyx_k_Total_length_d_nt, sizeof(__pyx_k_Total_length_d_nt), 0, 1, 0, 0},
  {&__pyx_kp_u_Training_set, __pyx_k_Training_set, sizeof(__pyx_k_Training_set), 0, 1, 0, 0},
  {&__pyx_kp_u_Tried_to_train_IID_model_that_is, __pyx_k_Tried_to_train_IID_model_that_is, sizeof(__pyx_k_Tried_to_train_IID_model_that_is), 0, 1, 0, 0},
  {&__pyx_kp_u_Tried_to_train_Markov_model_that, __pyx_k_Tried_to_train_Markov_model_that, sizeof(__pyx_k_Tried_to_train_Markov_model_that), 0, 1, 0, 0},
  {&__pyx_kp_u_Unrecognized_sequence_format, __pyx_k_Unrecognized_sequence_format, sizeof(__pyx_k_Unrecognized_sequence_format), 0, 1, 0, 0},
  {&__pyx_kp_u_WARNING_rcursor_rbufsize_1_rcurs, __pyx_k_WARNING_rcursor_rbufsize_1_rcurs, sizeof(__pyx_k_WARNING_rcursor_rbufsize_1_rcurs), 0, 1, 0, 0},
  {&__pyx_kp_u_Windows_Window_size, __pyx_k_Windows_Window_size, sizeof(__pyx_k_Windows_Window_size), 0, 1, 0, 0},
  {&__pyx_n_u_Yes, __pyx_k_Yes, sizeof(__pyx_k_Yes), 0, 1, 0, 1},
  {&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0},
  {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0},
  {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0},
  {&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0},
  {&__pyx_kp_u__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 1, 0, 0},
  {&__pyx_n_u__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 1, 0, 1},
  {&__pyx_kp_u__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 1, 0, 0},
  {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0},
  {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0},
  {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0},
  {&__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__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0},
  {&__pyx_kp_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0},
  {&__pyx_kp_u__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 1, 0, 0},
  {&__pyx_n_s_addComplements, __pyx_k_addComplements, sizeof(__pyx_k_addComplements), 0, 0, 1, 1},
  {&__pyx_n_s_addReverseComplements, __pyx_k_addReverseComplements, sizeof(__pyx_k_addReverseComplements), 0, 0, 1, 1},
  {&__pyx_n_s_annotation, __pyx_k_annotation, sizeof(__pyx_k_annotation), 0, 0, 1, 1},
  {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
  {&__pyx_n_s_blk, __pyx_k_blk, sizeof(__pyx_k_blk), 0, 0, 1, 1},
  {&__pyx_n_s_blkSizes, __pyx_k_blkSizes, sizeof(__pyx_k_blkSizes), 0, 0, 1, 1},
  {&__pyx_n_s_blkStarts, __pyx_k_blkStarts, sizeof(__pyx_k_blkStarts), 0, 0, 1, 1},
  {&__pyx_kp_u_bootstrap_sample_of, __pyx_k_bootstrap_sample_of, sizeof(__pyx_k_bootstrap_sample_of), 0, 1, 0, 0},
  {&__pyx_kp_u_bp, __pyx_k_bp, sizeof(__pyx_k_bp), 0, 1, 0, 0},
  {&__pyx_kp_u_bp_step, __pyx_k_bp_step, sizeof(__pyx_k_bp_step), 0, 1, 0, 0},
  {&__pyx_kp_u_bp_step_size, __pyx_k_bp_step_size, sizeof(__pyx_k_bp_step_size), 0, 1, 0, 0},
  {&__pyx_n_s_bsize, __pyx_k_bsize, sizeof(__pyx_k_bsize), 0, 0, 1, 1},
  {&__pyx_n_s_bstart, __pyx_k_bstart, sizeof(__pyx_k_bstart), 0, 0, 1, 1},
  {&__pyx_n_s_bstr, __pyx_k_bstr, sizeof(__pyx_k_bstr), 0, 0, 1, 1},
  {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
  {&__pyx_n_s_cbuf, __pyx_k_cbuf, sizeof(__pyx_k_cbuf), 0, 0, 1, 1},
  {&__pyx_n_s_choice, __pyx_k_choice, sizeof(__pyx_k_choice), 0, 0, 1, 1},
  {&__pyx_n_s_choices, __pyx_k_choices, sizeof(__pyx_k_choices), 0, 0, 1, 1},
  {&__pyx_n_u_chr, __pyx_k_chr, sizeof(__pyx_k_chr), 0, 1, 0, 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_common, __pyx_k_common, sizeof(__pyx_k_common), 0, 0, 1, 1},
  {&__pyx_n_s_complementaryNucleotides, __pyx_k_complementaryNucleotides, sizeof(__pyx_k_complementaryNucleotides), 0, 0, 1, 1},
  {&__pyx_n_s_cseq, __pyx_k_cseq, sizeof(__pyx_k_cseq), 0, 0, 1, 1},
  {&__pyx_n_s_cstart, __pyx_k_cstart, sizeof(__pyx_k_cstart), 0, 0, 1, 1},
  {&__pyx_n_s_cw, __pyx_k_cw, sizeof(__pyx_k_cw), 0, 0, 1, 1},
  {&__pyx_n_u_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 1, 0, 1},
  {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1},
  {&__pyx_n_s_degree, __pyx_k_degree, sizeof(__pyx_k_degree), 0, 0, 1, 1},
  {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
  {&__pyx_n_s_dropChr, __pyx_k_dropChr, sizeof(__pyx_k_dropChr), 0, 0, 1, 1},
  {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1},
  {&__pyx_n_s_endswith, __pyx_k_endswith, sizeof(__pyx_k_endswith), 0, 0, 1, 1},
  {&__pyx_n_s_ensureAllLabels, __pyx_k_ensureAllLabels, sizeof(__pyx_k_ensureAllLabels), 0, 0, 1, 1},
  {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1},
  {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1},
  {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1},
  {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
  {&__pyx_n_s_fIn, __pyx_k_fIn, sizeof(__pyx_k_fIn), 0, 0, 1, 1},
  {&__pyx_kp_u_fa, __pyx_k_fa, sizeof(__pyx_k_fa), 0, 1, 0, 0},
  {&__pyx_kp_u_fa_gz, __pyx_k_fa_gz, sizeof(__pyx_k_fa_gz), 0, 1, 0, 0},
  {&__pyx_kp_u_fasta, __pyx_k_fasta, sizeof(__pyx_k_fasta), 0, 1, 0, 0},
  {&__pyx_kp_u_fasta_gz, __pyx_k_fasta_gz, sizeof(__pyx_k_fasta_gz), 0, 1, 0, 0},
  {&__pyx_n_s_fetch, __pyx_k_fetch, sizeof(__pyx_k_fetch), 0, 0, 1, 1},
  {&__pyx_n_s_fstream, __pyx_k_fstream, sizeof(__pyx_k_fstream), 0, 0, 1, 1},
  {&__pyx_n_s_generate, __pyx_k_generate, sizeof(__pyx_k_generate), 0, 0, 1, 1},
  {&__pyx_n_s_generate_locals_genexpr, __pyx_k_generate_locals_genexpr, sizeof(__pyx_k_generate_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_genexpr, __pyx_k_genexpr, sizeof(__pyx_k_genexpr), 0, 0, 1, 1},
  {&__pyx_n_u_genome, __pyx_k_genome, sizeof(__pyx_k_genome), 0, 1, 0, 1},
  {&__pyx_n_s_getReverseComplementaryDNASequen, __pyx_k_getReverseComplementaryDNASequen, sizeof(__pyx_k_getReverseComplementaryDNASequen), 0, 0, 1, 1},
  {&__pyx_n_s_getSequenceWindowRegions, __pyx_k_getSequenceWindowRegions, sizeof(__pyx_k_getSequenceWindowRegions), 0, 0, 1, 1},
  {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
  {&__pyx_n_s_gnocis_sequences, __pyx_k_gnocis_sequences, sizeof(__pyx_k_gnocis_sequences), 0, 0, 1, 1},
  {&__pyx_kp_s_gnocis_sequences_pyx, __pyx_k_gnocis_sequences_pyx, sizeof(__pyx_k_gnocis_sequences_pyx), 0, 0, 1, 0},
  {&__pyx_n_s_gzip, __pyx_k_gzip, sizeof(__pyx_k_gzip), 0, 0, 1, 1},
  {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {&__pyx_n_s_includeCroppedEnds, __pyx_k_includeCroppedEnds, sizeof(__pyx_k_includeCroppedEnds), 0, 0, 1, 1},
  {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
  {&__pyx_n_s_initialSort, __pyx_k_initialSort, sizeof(__pyx_k_initialSort), 0, 0, 1, 1},
  {&__pyx_n_s_ioputil, __pyx_k_ioputil, sizeof(__pyx_k_ioputil), 0, 0, 1, 1},
  {&__pyx_n_s_isGZ, __pyx_k_isGZ, sizeof(__pyx_k_isGZ), 0, 0, 1, 1},
  {&__pyx_n_s_iseq, __pyx_k_iseq, sizeof(__pyx_k_iseq), 0, 0, 1, 1},
  {&__pyx_n_s_iter, __pyx_k_iter, sizeof(__pyx_k_iter), 0, 0, 1, 1},
  {&__pyx_n_s_kSpectrumIndex2NT, __pyx_k_kSpectrumIndex2NT, sizeof(__pyx_k_kSpectrumIndex2NT), 0, 0, 1, 1},
  {&__pyx_n_s_kSpectrumNT2Index, __pyx_k_kSpectrumNT2Index, sizeof(__pyx_k_kSpectrumNT2Index), 0, 0, 1, 1},
  {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1},
  {&__pyx_n_s_keys, __pyx_k_keys, sizeof(__pyx_k_keys), 0, 0, 1, 1},
  {&__pyx_n_s_label, __pyx_k_label, sizeof(__pyx_k_label), 0, 0, 1, 1},
  {&__pyx_n_s_labels, __pyx_k_labels, sizeof(__pyx_k_labels), 0, 0, 1, 1},
  {&__pyx_n_s_labels_locals_genexpr, __pyx_k_labels_locals_genexpr, sizeof(__pyx_k_labels_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_length, __pyx_k_length, sizeof(__pyx_k_length), 0, 0, 1, 1},
  {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1},
  {&__pyx_n_s_lineSrc, __pyx_k_lineSrc, sizeof(__pyx_k_lineSrc), 0, 0, 1, 1},
  {&__pyx_n_s_loadFASTA, __pyx_k_loadFASTA, sizeof(__pyx_k_loadFASTA), 0, 0, 1, 1},
  {&__pyx_n_s_loadFASTAGZ, __pyx_k_loadFASTAGZ, sizeof(__pyx_k_loadFASTAGZ), 0, 0, 1, 1},
  {&__pyx_n_s_loadFASTAGZ_locals_genexpr, __pyx_k_loadFASTAGZ_locals_genexpr, sizeof(__pyx_k_loadFASTAGZ_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_lower, __pyx_k_lower, sizeof(__pyx_k_lower), 0, 0, 1, 1},
  {&__pyx_n_s_lst, __pyx_k_lst, sizeof(__pyx_k_lst), 0, 0, 1, 1},
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {&__pyx_n_s_maskSizes, __pyx_k_maskSizes, sizeof(__pyx_k_maskSizes), 0, 0, 1, 1},
  {&__pyx_n_s_maskStarts, __pyx_k_maskStarts, sizeof(__pyx_k_maskStarts), 0, 0, 1, 1},
  {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1},
  {&__pyx_n_s_maxnt, __pyx_k_maxnt, sizeof(__pyx_k_maxnt), 0, 0, 1, 1},
  {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
  {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1},
  {&__pyx_n_s_model, __pyx_k_model, sizeof(__pyx_k_model), 0, 0, 1, 1},
  {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 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_u_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 1, 0, 1},
  {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
  {&__pyx_n_s_namebytes, __pyx_k_namebytes, sizeof(__pyx_k_namebytes), 0, 0, 1, 1},
  {&__pyx_n_s_namelen, __pyx_k_namelen, sizeof(__pyx_k_namelen), 0, 0, 1, 1},
  {&__pyx_n_s_nblk, __pyx_k_nblk, sizeof(__pyx_k_nblk), 0, 0, 1, 1},
  {&__pyx_n_s_nctable, __pyx_k_nctable, sizeof(__pyx_k_nctable), 0, 0, 1, 1},
  {&__pyx_n_s_negative, __pyx_k_negative, sizeof(__pyx_k_negative), 0, 0, 1, 1},
  {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
  {&__pyx_n_s_ng, __pyx_k_ng, sizeof(__pyx_k_ng), 0, 0, 1, 1},
  {&__pyx_n_s_nmask, __pyx_k_nmask, sizeof(__pyx_k_nmask), 0, 0, 1, 1},
  {&__pyx_n_s_nnt, __pyx_k_nnt, sizeof(__pyx_k_nnt), 0, 0, 1, 1},
  {&__pyx_n_s_nseq, __pyx_k_nseq, sizeof(__pyx_k_nseq), 0, 0, 1, 1},
  {&__pyx_kp_u_nt, __pyx_k_nt, sizeof(__pyx_k_nt), 0, 1, 0, 0},
  {&__pyx_kp_u_nt_max, __pyx_k_nt_max, sizeof(__pyx_k_nt_max), 0, 1, 0, 0},
  {&__pyx_kp_u_nt_min, __pyx_k_nt_min, sizeof(__pyx_k_nt_min), 0, 1, 0, 0},
  {&__pyx_n_s_nucleotides, __pyx_k_nucleotides, sizeof(__pyx_k_nucleotides), 0, 0, 1, 1},
  {&__pyx_n_s_number, __pyx_k_number, sizeof(__pyx_k_number), 0, 0, 1, 1},
  {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1},
  {&__pyx_n_u_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 1, 0, 1},
  {&__pyx_n_s_open, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1},
  {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1},
  {&__pyx_n_s_pathName, __pyx_k_pathName, sizeof(__pyx_k_pathName), 0, 0, 1, 1},
  {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
  {&__pyx_n_s_positive, __pyx_k_positive, sizeof(__pyx_k_positive), 0, 0, 1, 1},
  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
  {&__pyx_n_s_prepare_2, __pyx_k_prepare_2, sizeof(__pyx_k_prepare_2), 0, 0, 1, 1},
  {&__pyx_n_s_prepare_3, __pyx_k_prepare_3, sizeof(__pyx_k_prepare_3), 0, 0, 1, 1},
  {&__pyx_n_s_prepare_locals_genexpr, __pyx_k_prepare_locals_genexpr, sizeof(__pyx_k_prepare_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
  {&__pyx_n_s_printStatistics_locals_genexpr, __pyx_k_printStatistics_locals_genexpr, sizeof(__pyx_k_printStatistics_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_pseudoCounts, __pyx_k_pseudoCounts, sizeof(__pyx_k_pseudoCounts), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_IID, __pyx_k_pyx_unpickle_IID, sizeof(__pyx_k_pyx_unpickle_IID), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_MarkovChain, __pyx_k_pyx_unpickle_MarkovChain, sizeof(__pyx_k_pyx_unpickle_MarkovChain), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_sequence, __pyx_k_pyx_unpickle_sequence, sizeof(__pyx_k_pyx_unpickle_sequence), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_sequenceGenerator, __pyx_k_pyx_unpickle_sequenceGenerator, sizeof(__pyx_k_pyx_unpickle_sequenceGenerator), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_sequenceLabel, __pyx_k_pyx_unpickle_sequenceLabel, sizeof(__pyx_k_pyx_unpickle_sequenceLabel), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_sequenceStream, __pyx_k_pyx_unpickle_sequenceStream, sizeof(__pyx_k_pyx_unpickle_sequenceStream), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_sequences, __pyx_k_pyx_unpickle_sequences, sizeof(__pyx_k_pyx_unpickle_sequences), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_stream2bitNBlock, __pyx_k_pyx_unpickle_stream2bitNBlock, sizeof(__pyx_k_pyx_unpickle_stream2bitNBlock), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_stream2bitSeq, __pyx_k_pyx_unpickle_stream2bitSeq, sizeof(__pyx_k_pyx_unpickle_stream2bitSeq), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_streamFASTASeq, __pyx_k_pyx_unpickle_streamFASTASeq, sizeof(__pyx_k_pyx_unpickle_streamFASTASeq), 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_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 0, 1, 1},
  {&__pyx_n_u_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 1, 0, 1},
  {&__pyx_n_s_randint, __pyx_k_randint, sizeof(__pyx_k_randint), 0, 0, 1, 1},
  {&__pyx_n_s_random, __pyx_k_random, sizeof(__pyx_k_random), 0, 0, 1, 1},
  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
  {&__pyx_n_s_ratio, __pyx_k_ratio, sizeof(__pyx_k_ratio), 0, 0, 1, 1},
  {&__pyx_n_u_rb, __pyx_k_rb, sizeof(__pyx_k_rb), 0, 1, 0, 1},
  {&__pyx_n_s_re, __pyx_k_re, sizeof(__pyx_k_re), 0, 0, 1, 1},
  {&__pyx_n_s_read, __pyx_k_read, sizeof(__pyx_k_read), 0, 0, 1, 1},
  {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
  {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
  {&__pyx_n_s_replace, __pyx_k_replace, sizeof(__pyx_k_replace), 0, 0, 1, 1},
  {&__pyx_n_s_repr, __pyx_k_repr, sizeof(__pyx_k_repr), 0, 0, 1, 1},
  {&__pyx_n_s_repr_html, __pyx_k_repr_html, sizeof(__pyx_k_repr_html), 0, 0, 1, 1},
  {&__pyx_n_s_reserved, __pyx_k_reserved, sizeof(__pyx_k_reserved), 0, 0, 1, 1},
  {&__pyx_n_s_restrictToSequences, __pyx_k_restrictToSequences, sizeof(__pyx_k_restrictToSequences), 0, 0, 1, 1},
  {&__pyx_n_s_rset, __pyx_k_rset, sizeof(__pyx_k_rset), 0, 0, 1, 1},
  {&__pyx_kp_u_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 1, 0, 0},
  {&__pyx_n_s_seed, __pyx_k_seed, sizeof(__pyx_k_seed), 0, 0, 1, 1},
  {&__pyx_kp_u_seed_2, __pyx_k_seed_2, sizeof(__pyx_k_seed_2), 0, 1, 0, 0},
  {&__pyx_n_s_seek, __pyx_k_seek, sizeof(__pyx_k_seek), 0, 0, 1, 1},
  {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
  {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1},
  {&__pyx_n_s_seq, __pyx_k_seq, sizeof(__pyx_k_seq), 0, 0, 1, 1},
  {&__pyx_n_s_seqInfo, __pyx_k_seqInfo, sizeof(__pyx_k_seqInfo), 0, 0, 1, 1},
  {&__pyx_n_s_seqLengths, __pyx_k_seqLengths, sizeof(__pyx_k_seqLengths), 0, 0, 1, 1},
  {&__pyx_n_s_seqStream, __pyx_k_seqStream, sizeof(__pyx_k_seqStream), 0, 0, 1, 1},
  {&__pyx_kp_u_seq_2, __pyx_k_seq_2, sizeof(__pyx_k_seq_2), 0, 1, 0, 0},
  {&__pyx_n_s_seqs, __pyx_k_seqs, sizeof(__pyx_k_seqs), 0, 0, 1, 1},
  {&__pyx_n_s_sequence, __pyx_k_sequence, sizeof(__pyx_k_sequence), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceGenerator, __pyx_k_sequenceGenerator, sizeof(__pyx_k_sequenceGenerator), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceLabel, __pyx_k_sequenceLabel, sizeof(__pyx_k_sequenceLabel), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceLengths, __pyx_k_sequenceLengths, sizeof(__pyx_k_sequenceLengths), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceLengths_locals_genexpr, __pyx_k_sequenceLengths_locals_genexpr, sizeof(__pyx_k_sequenceLengths_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream, __pyx_k_sequenceStream, sizeof(__pyx_k_sequenceStream), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream2bit, __pyx_k_sequenceStream2bit, sizeof(__pyx_k_sequenceStream2bit), 0, 0, 1, 1},
  {&__pyx_n_s_latin1_sequenceStream2bit, __pyx_k_sequenceStream2bit, sizeof(__pyx_k_sequenceStream2bit), "latin-1", 0, 1, 1},
  {&__pyx_n_s_sequenceStream2bit___init, __pyx_k_sequenceStream2bit___init, sizeof(__pyx_k_sequenceStream2bit___init), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream2bit___iter, __pyx_k_sequenceStream2bit___iter, sizeof(__pyx_k_sequenceStream2bit___iter), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream2bit___iter___loca, __pyx_k_sequenceStream2bit___iter___loca, sizeof(__pyx_k_sequenceStream2bit___iter___loca), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream2bit___iter___loca_2, __pyx_k_sequenceStream2bit___iter___loca_2, sizeof(__pyx_k_sequenceStream2bit___iter___loca_2), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream2bit___repr, __pyx_k_sequenceStream2bit___repr, sizeof(__pyx_k_sequenceStream2bit___repr), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream2bit___str, __pyx_k_sequenceStream2bit___str, sizeof(__pyx_k_sequenceStream2bit___str), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamFASTA, __pyx_k_sequenceStreamFASTA, sizeof(__pyx_k_sequenceStreamFASTA), 0, 0, 1, 1},
  {&__pyx_n_s_latin1_sequenceStreamFASTA, __pyx_k_sequenceStreamFASTA, sizeof(__pyx_k_sequenceStreamFASTA), "latin-1", 0, 1, 1},
  {&__pyx_n_s_sequenceStreamFASTA___init, __pyx_k_sequenceStreamFASTA___init, sizeof(__pyx_k_sequenceStreamFASTA___init), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamFASTA___iter, __pyx_k_sequenceStreamFASTA___iter, sizeof(__pyx_k_sequenceStreamFASTA___iter), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamFASTA___iter___loc, __pyx_k_sequenceStreamFASTA___iter___loc, sizeof(__pyx_k_sequenceStreamFASTA___iter___loc), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamFASTA___repr, __pyx_k_sequenceStreamFASTA___repr, sizeof(__pyx_k_sequenceStreamFASTA___repr), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamFASTA___str, __pyx_k_sequenceStreamFASTA___str, sizeof(__pyx_k_sequenceStreamFASTA___str), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGenerator, __pyx_k_sequenceStreamGenerator, sizeof(__pyx_k_sequenceStreamGenerator), 0, 0, 1, 1},
  {&__pyx_n_s_latin1_sequenceStreamGenerator, __pyx_k_sequenceStreamGenerator, sizeof(__pyx_k_sequenceStreamGenerator), "latin-1", 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGeneratorSequence, __pyx_k_sequenceStreamGeneratorSequence, sizeof(__pyx_k_sequenceStreamGeneratorSequence), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGeneratorSequence_2, __pyx_k_sequenceStreamGeneratorSequence_2, sizeof(__pyx_k_sequenceStreamGeneratorSequence_2), 0, 0, 1, 1},
  {&__pyx_n_s_latin1_sequenceStreamGeneratorSequence_2, __pyx_k_sequenceStreamGeneratorSequence_2, sizeof(__pyx_k_sequenceStreamGeneratorSequence_2), "latin-1", 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGeneratorSequence_3, __pyx_k_sequenceStreamGeneratorSequence_3, sizeof(__pyx_k_sequenceStreamGeneratorSequence_3), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGeneratorSequence_4, __pyx_k_sequenceStreamGeneratorSequence_4, sizeof(__pyx_k_sequenceStreamGeneratorSequence_4), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGeneratorSequence_5, __pyx_k_sequenceStreamGeneratorSequence_5, sizeof(__pyx_k_sequenceStreamGeneratorSequence_5), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGeneratorSequence_6, __pyx_k_sequenceStreamGeneratorSequence_6, sizeof(__pyx_k_sequenceStreamGeneratorSequence_6), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGenerator___init, __pyx_k_sequenceStreamGenerator___init, sizeof(__pyx_k_sequenceStreamGenerator___init), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGenerator___iter, __pyx_k_sequenceStreamGenerator___iter, sizeof(__pyx_k_sequenceStreamGenerator___iter), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGenerator___repr, __pyx_k_sequenceStreamGenerator___repr, sizeof(__pyx_k_sequenceStreamGenerator___repr), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStreamGenerator___str, __pyx_k_sequenceStreamGenerator___str, sizeof(__pyx_k_sequenceStreamGenerator___str), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream_fetch, __pyx_k_sequenceStream_fetch, sizeof(__pyx_k_sequenceStream_fetch), 0, 0, 1, 1},
  {&__pyx_n_s_sequenceStream_streamFullSequenc, __pyx_k_sequenceStream_streamFullSequenc, sizeof(__pyx_k_sequenceStream_streamFullSequenc), 0, 0, 1, 1},
  {&__pyx_n_s_sequences, __pyx_k_sequences, sizeof(__pyx_k_sequences), 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_shuffle, __pyx_k_shuffle, sizeof(__pyx_k_shuffle), 0, 0, 1, 1},
  {&__pyx_n_s_sig, __pyx_k_sig, sizeof(__pyx_k_sig), 0, 0, 1, 1},
  {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
  {&__pyx_n_s_sname, __pyx_k_sname, sizeof(__pyx_k_sname), 0, 0, 1, 1},
  {&__pyx_n_s_sorted, __pyx_k_sorted, sizeof(__pyx_k_sorted), 0, 0, 1, 1},
  {&__pyx_n_s_sourceRegion, __pyx_k_sourceRegion, sizeof(__pyx_k_sourceRegion), 0, 0, 1, 1},
  {&__pyx_n_s_spacePrune, __pyx_k_spacePrune, sizeof(__pyx_k_spacePrune), 0, 0, 1, 1},
  {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1},
  {&__pyx_kp_u_split_A, __pyx_k_split_A, sizeof(__pyx_k_split_A), 0, 1, 0, 0},
  {&__pyx_kp_u_split_B, __pyx_k_split_B, sizeof(__pyx_k_split_B), 0, 1, 0, 0},
  {&__pyx_n_s_src, __pyx_k_src, sizeof(__pyx_k_src), 0, 0, 1, 1},
  {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
  {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1},
  {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1},
  {&__pyx_n_s_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
  {&__pyx_n_s_strand, __pyx_k_strand, sizeof(__pyx_k_strand), 0, 0, 1, 1},
  {&__pyx_n_s_stream, __pyx_k_stream, sizeof(__pyx_k_stream), 0, 0, 1, 1},
  {&__pyx_n_s_stream2bitNBlock, __pyx_k_stream2bitNBlock, sizeof(__pyx_k_stream2bitNBlock), 0, 0, 1, 1},
  {&__pyx_n_s_stream2bitSeq, __pyx_k_stream2bitSeq, sizeof(__pyx_k_stream2bitSeq), 0, 0, 1, 1},
  {&__pyx_n_s_stream2bitSeq_stream, __pyx_k_stream2bitSeq_stream, sizeof(__pyx_k_stream2bitSeq_stream), 0, 0, 1, 1},
  {&__pyx_n_s_streamFASTASeq, __pyx_k_streamFASTASeq, sizeof(__pyx_k_streamFASTASeq), 0, 0, 1, 1},
  {&__pyx_n_s_streamFASTASeq_stream, __pyx_k_streamFASTASeq_stream, sizeof(__pyx_k_streamFASTASeq_stream), 0, 0, 1, 1},
  {&__pyx_n_s_streamFullSequences, __pyx_k_streamFullSequences, sizeof(__pyx_k_streamFullSequences), 0, 0, 1, 1},
  {&__pyx_n_s_streamFullSequences_locals_genex, __pyx_k_streamFullSequences_locals_genex, sizeof(__pyx_k_streamFullSequences_locals_genex), 0, 0, 1, 1},
  {&__pyx_n_s_streamSequenceWindows, __pyx_k_streamSequenceWindows, sizeof(__pyx_k_streamSequenceWindows), 0, 0, 1, 1},
  {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
  {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1},
  {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1},
  {&__pyx_n_s_sub, __pyx_k_sub, sizeof(__pyx_k_sub), 0, 0, 1, 1},
  {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1},
  {&__pyx_n_s_table, __pyx_k_table, sizeof(__pyx_k_table), 0, 0, 1, 1},
  {&__pyx_n_s_table_locals_genexpr, __pyx_k_table_locals_genexpr, sizeof(__pyx_k_table_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
  {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1},
  {&__pyx_n_s_trainOnSequenceStream, __pyx_k_trainOnSequenceStream, sizeof(__pyx_k_trainOnSequenceStream), 0, 0, 1, 1},
  {&__pyx_n_s_trainOnSequences, __pyx_k_trainOnSequences, sizeof(__pyx_k_trainOnSequences), 0, 0, 1, 1},
  {&__pyx_n_s_trainingSequences, __pyx_k_trainingSequences, sizeof(__pyx_k_trainingSequences), 0, 0, 1, 1},
  {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1},
  {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
  {&__pyx_kp_u_utf_8, __pyx_k_utf_8, sizeof(__pyx_k_utf_8), 0, 1, 0, 0},
  {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1},
  {&__pyx_kp_u_value_2, __pyx_k_value_2, sizeof(__pyx_k_value_2), 0, 1, 0, 0},
  {&__pyx_n_s_ver, __pyx_k_ver, sizeof(__pyx_k_ver), 0, 0, 1, 1},
  {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 0, 1, 1},
  {&__pyx_n_u_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 1, 0, 1},
  {&__pyx_n_s_wantBlockSize, __pyx_k_wantBlockSize, sizeof(__pyx_k_wantBlockSize), 0, 0, 1, 1},
  {&__pyx_n_s_wantN, __pyx_k_wantN, sizeof(__pyx_k_wantN), 0, 0, 1, 1},
  {&__pyx_n_s_wantSize, __pyx_k_wantSize, sizeof(__pyx_k_wantSize), 0, 0, 1, 1},
  {&__pyx_n_s_weightedRandomChoice, __pyx_k_weightedRandomChoice, sizeof(__pyx_k_weightedRandomChoice), 0, 0, 1, 1},
  {&__pyx_n_s_windowSize, __pyx_k_windowSize, sizeof(__pyx_k_windowSize), 0, 0, 1, 1},
  {&__pyx_n_s_windowStep, __pyx_k_windowStep, sizeof(__pyx_k_windowStep), 0, 0, 1, 1},
  {&__pyx_kp_u_windows, __pyx_k_windows, sizeof(__pyx_k_windows), 0, 1, 0, 0},
  {&__pyx_kp_u_windows_size, __pyx_k_windows_size, sizeof(__pyx_k_windows_size), 0, 1, 0, 0},
  {&__pyx_n_s_withLabel_locals_genexpr, __pyx_k_withLabel_locals_genexpr, sizeof(__pyx_k_withLabel_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1},
  {&__pyx_n_s_zip, __pyx_k_zip, sizeof(__pyx_k_zip), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 167, __pyx_L1_error)
  __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 388, __pyx_L1_error)
  __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 407, __pyx_L1_error)
  __pyx_builtin_sum = __Pyx_GetBuiltinName(__pyx_n_s_sum); if (!__pyx_builtin_sum) __PYX_ERR(0, 410, __pyx_L1_error)
  __pyx_builtin_min = __Pyx_GetBuiltinName(__pyx_n_s_min); if (!__pyx_builtin_min) __PYX_ERR(0, 410, __pyx_L1_error)
  __pyx_builtin_max = __Pyx_GetBuiltinName(__pyx_n_s_max); if (!__pyx_builtin_max) __PYX_ERR(0, 410, __pyx_L1_error)
  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 812, __pyx_L1_error)
  __pyx_builtin_sorted = __Pyx_GetBuiltinName(__pyx_n_s_sorted); if (!__pyx_builtin_sorted) __PYX_ERR(0, 906, __pyx_L1_error)
  __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) __PYX_ERR(0, 906, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "gnocis/sequences.pyx":362
 * 			]
 * 			if ensureAllLabels and any(len(seqs) == 0 for seqs in ret):
 * 				raise Exception("Not all requested labels were found among the sequences")             # <<<<<<<<<<<<<<
 * 			return ret
 * 		else:
 */
  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_Not_all_requested_labels_were_fo); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);

  /* "gnocis/sequences.pyx":369
 * 			])
 * 			if ensureAllLabels and len(ret) == 0:
 * 				raise Exception("No sequences with the requested label were found")             # <<<<<<<<<<<<<<
 * 			return ret
 * 
 */
  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_No_sequences_with_the_requested); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);

  /* "gnocis/sequences.pyx":390
 * 		with open(path, 'w') as fOut:
 * 			for seq in self.sequences:
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))             # <<<<<<<<<<<<<<
 * 
 * 	# Gets the sequence lengths
 */
  __pyx_tuple__18 = PyTuple_Pack(2, __pyx_kp_u__16, __pyx_n_u__17); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);

  /* "gnocis/sequences.pyx":388
 * 		:type path: str
 * 		"""
 * 		with open(path, 'w') as fOut:             # <<<<<<<<<<<<<<
 * 			for seq in self.sequences:
 * 				fOut.write(">%s\n%s\n"%(seq.name.replace(' ', '_'), re.sub("(.{65})","\\1\n", seq.seq, 0, re.DOTALL)))
 */
  __pyx_tuple__20 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);

  /* "gnocis/sequences.pyx":429
 * 			line = line.strip()
 * 			if line.startswith('>'):
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))             # <<<<<<<<<<<<<<
 * 			elif len(lst) == 0:
 * 				raise Exception('FASTA sequence error')
 */
  __pyx_slice__21 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__21)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__21);
  __Pyx_GIVEREF(__pyx_slice__21);

  /* "gnocis/sequences.pyx":431
 * 				lst.append(sequence(line[1:], '', path, annotation = 'From FASTA file ' + pathName))
 * 			elif len(lst) == 0:
 * 				raise Exception('FASTA sequence error')             # <<<<<<<<<<<<<<
 * 			else:
 * 				lst[-1].seq += line
 */
  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_u_FASTA_sequence_error); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);

  /* "gnocis/sequences.pyx":679
 * 								return None
 * 				else:
 * 					raise Exception('FASTA file syntax error')             # <<<<<<<<<<<<<<
 * 		return None
 * 
 */
  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_u_FASTA_file_syntax_error); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 679, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);

  /* "gnocis/sequences.pyx":881
 * 			sig, ver, nseq, reserved = struct.unpack('IIII', fIn.read(16))
 * 			if sig != 0x1A412743:
 * 				raise Exception('Invalid 2bit sequence file. Header signature was of unexpected value.')             # <<<<<<<<<<<<<<
 * 			seqs = []
 * 			for iseq in range(nseq):
 */
  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_u_Invalid_2bit_sequence_file_Heade); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__26);
  __Pyx_GIVEREF(__pyx_tuple__26);

  /* "gnocis/sequences.pyx":966
 * 		return stream2bit(path, wantBlockSize = wantBlockSize, spacePrune = spacePrune, dropChr = dropChr , restrictToSequences = restrictToSequences)
 * 	else:
 * 		raise Exception('Unrecognized sequence format')             # <<<<<<<<<<<<<<
 * 
 * # Streams sequence windows from a sequence set or sequence stream, with coordinates and window sequence.
 */
  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_u_Unrecognized_sequence_format); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);

  /* "gnocis/sequences.pyx":1079
 * 
 * 	def __iter__(self):
 * 		seed = random.randint(0, 0xFFFFFFFF)             # <<<<<<<<<<<<<<
 * 		random.seed(seed)
 * 		for i in range(self.wantN):
 */
  __pyx_tuple__31 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_4294967295); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);

  /* "gnocis/sequences.pyx":1098
 * 		if cw >= r:
 * 			return c
 * 	raise Exception('Choice weights sum up to more than 1.0')             # <<<<<<<<<<<<<<
 * 
 * # Represents sequence streams
 */
  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_u_Choice_weights_sum_up_to_more_th); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 1098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);

  /* "gnocis/sequences.pyx":1248
 * 			kmer = ''.join( kSpectrumIndex2NT[(ki >> ((self.degree - 1 - x)*2)) & 3] for x in range(self.degree) )
 * 
 * 			self.comparableSpectrum[kmer] =  { nt: self.spectrum[(ki << 2) | kSpectrumNT2Index[nt]] for nt in [ 'A', 'T', 'G', 'C' ] }             # <<<<<<<<<<<<<<
 * 		self.prepared = True
 * 
 */
  __pyx_tuple__33 = PyTuple_Pack(4, __pyx_n_u_A, __pyx_n_u_T, __pyx_n_u_G, __pyx_n_u_C); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 1248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);

  /* "gnocis/sequences.pyx":1259
 * 		"""
 * 		if self.prepared:
 * 			raise Exception('Tried to train Markov model that is already prepared for use')             # <<<<<<<<<<<<<<
 * 		cdef list spectrum
 * 		cdef int nspectrum, bitmask, ki, nnt
 */
  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_u_Tried_to_train_Markov_model_that); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 1259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__34);
  __Pyx_GIVEREF(__pyx_tuple__34);

  /* "gnocis/sequences.pyx":1436
 * 		cdef str nt
 * 		if self.prepared:
 * 			raise Exception('Tried to train IID model that is already prepared for use')             # <<<<<<<<<<<<<<
 * 		for seq in trainingSequences:
 * 			for nt in seq.seq:
 */
  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_u_Tried_to_train_IID_model_that_is); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 1436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);

  /* "gnocis/sequences.pyx":54
 * 		return self.__str__()
 * 
 * positive = sequenceLabel('Positive', 1.0)             # <<<<<<<<<<<<<<
 * negative = sequenceLabel('Negative', -1.0)
 * 
 */
  __pyx_tuple__36 = PyTuple_Pack(2, __pyx_n_u_Positive, __pyx_float_1_0); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__36);
  __Pyx_GIVEREF(__pyx_tuple__36);

  /* "gnocis/sequences.pyx":55
 * 
 * positive = sequenceLabel('Positive', 1.0)
 * negative = sequenceLabel('Negative', -1.0)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_tuple__37 = PyTuple_Pack(2, __pyx_n_u_Negative, __pyx_float_neg_1_0); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);

  /* "gnocis/sequences.pyx":414
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTA(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a FASTA file.
 * 
 */
  __pyx_tuple__38 = PyTuple_Pack(5, __pyx_n_s_path, __pyx_n_s_lst, __pyx_n_s_pathName, __pyx_n_s_f, __pyx_n_s_line); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__38);
  __Pyx_GIVEREF(__pyx_tuple__38);
  __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_loadFASTA, 414, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 414, __pyx_L1_error)

  /* "gnocis/sequences.pyx":437
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTAGZ(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a gzipped FASTA file.
 * 
 */
  __pyx_tuple__40 = PyTuple_Pack(7, __pyx_n_s_path, __pyx_n_s_lst, __pyx_n_s_pathName, __pyx_n_s_f, __pyx_n_s_line, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__40);
  __Pyx_GIVEREF(__pyx_tuple__40);
  __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(1, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_loadFASTAGZ, 437, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 437, __pyx_L1_error)

  /* "gnocis/sequences.pyx":632
 * 	"""
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences, isGZ = False):             # <<<<<<<<<<<<<<
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 */
  __pyx_tuple__42 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_wantBlockSize, __pyx_n_s_spacePrune, __pyx_n_s_dropChr, __pyx_n_s_restrictToSequences, __pyx_n_s_isGZ); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__42);
  __Pyx_GIVEREF(__pyx_tuple__42);
  __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(7, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_init, 632, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 632, __pyx_L1_error)
  __pyx_tuple__44 = PyTuple_Pack(1, ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__44);
  __Pyx_GIVEREF(__pyx_tuple__44);

  /* "gnocis/sequences.pyx":641
 * 		self.isGZ = isGZ
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef str line, sname
 * 		cdef streamFASTASeq seqStream
 */
  __pyx_tuple__45 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_line, __pyx_n_s_sname, __pyx_n_s_seqStream, __pyx_n_s_fIn, __pyx_n_s_lineSrc, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__45);
  __Pyx_GIVEREF(__pyx_tuple__45);
  __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_iter, 641, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 641, __pyx_L1_error)

  /* "gnocis/sequences.pyx":682
 * 		return None
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 */
  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__46);
  __Pyx_GIVEREF(__pyx_tuple__46);
  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_str, 682, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 682, __pyx_L1_error)

  /* "gnocis/sequences.pyx":685
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */
  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 685, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__48);
  __Pyx_GIVEREF(__pyx_tuple__48);
  __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_repr, 685, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 685, __pyx_L1_error)

  /* "gnocis/sequences.pyx":860
 * 	"""
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences):             # <<<<<<<<<<<<<<
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 */
  __pyx_tuple__50 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_path, __pyx_n_s_wantBlockSize, __pyx_n_s_spacePrune, __pyx_n_s_dropChr, __pyx_n_s_restrictToSequences); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__50);
  __Pyx_GIVEREF(__pyx_tuple__50);
  __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_init, 860, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 860, __pyx_L1_error)

  /* "gnocis/sequences.pyx":868
 * 		self.restrictToSequences = restrictToSequences
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef unsigned int sig, ver, nseq, reserved, offset
 * 		cdef list seqs
 */
  __pyx_tuple__52 = PyTuple_Pack(29, __pyx_n_s_self, __pyx_n_s_sig, __pyx_n_s_ver, __pyx_n_s_nseq, __pyx_n_s_reserved, __pyx_n_s_offset, __pyx_n_s_seqs, __pyx_n_s_iseq, __pyx_n_s_seqInfo, __pyx_n_s_sname, __pyx_n_s_name, __pyx_n_s_namebytes, __pyx_n_s_nnt, __pyx_n_s_nblk, __pyx_n_s_Nblocks, __pyx_n_s_blkStarts, __pyx_n_s_blkSizes, __pyx_n_s_maskStarts, __pyx_n_s_maskSizes, __pyx_n_s_fIn, __pyx_n_s_namelen, __pyx_n_s_nmask, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_genexpr, __pyx_n_s_bstart, __pyx_n_s_bsize); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__52);
  __Pyx_GIVEREF(__pyx_tuple__52);
  __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(1, 0, 29, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_iter, 868, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 868, __pyx_L1_error)

  /* "gnocis/sequences.pyx":910
 * 		return None
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 */
  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__53);
  __Pyx_GIVEREF(__pyx_tuple__53);
  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_str, 910, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(0, 910, __pyx_L1_error)

  /* "gnocis/sequences.pyx":913
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */
  __pyx_tuple__55 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__55);
  __Pyx_GIVEREF(__pyx_tuple__55);
  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_repr, 913, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 913, __pyx_L1_error)

  /* "gnocis/sequences.pyx":969
 * 
 * # Streams sequence windows from a sequence set or sequence stream, with coordinates and window sequence.
 * def streamSequenceWindows(src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Yields sequence windows for a sequence set, sequence stream or a path to a sequence file.
 */
  __pyx_tuple__57 = PyTuple_Pack(7, __pyx_n_s_src, __pyx_n_s_windowSize, __pyx_n_s_windowStep, __pyx_n_s_cbuf, __pyx_n_s_cstart, __pyx_n_s_cseq, __pyx_n_s_blk); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__57);
  __Pyx_GIVEREF(__pyx_tuple__57);
  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_streamSequenceWindows, 969, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 969, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1010
 * 
 * # Returns sliding window coordinates for a sequence set or sequence stream.
 * def getSequenceWindowRegions(object src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Generates sequence window regions for a sequence set or stream.
 */
  __pyx_tuple__58 = PyTuple_Pack(7, __pyx_n_s_src, __pyx_n_s_windowSize, __pyx_n_s_windowStep, __pyx_n_s_seqLengths, __pyx_n_s_rset, __pyx_n_s_cseq, __pyx_n_s_cstart); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 1010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__58);
  __Pyx_GIVEREF(__pyx_tuple__58);
  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_getSequenceWindowRegions, 1010, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 1010, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1047
 * class sequenceStreamGeneratorSequence:
 * 
 * 	def __init__(self, model, wantBlockSize, wantSize, number, seed):             # <<<<<<<<<<<<<<
 * 		self.model = model
 * 		self.wantSize = wantSize
 */
  __pyx_tuple__60 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_model, __pyx_n_s_wantBlockSize, __pyx_n_s_wantSize, __pyx_n_s_number, __pyx_n_s_seed); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 1047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__60);
  __Pyx_GIVEREF(__pyx_tuple__60);
  __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_init, 1047, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(0, 1047, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1053
 * 		self.name = 'Random sequence %d (seed = %d)'%(number, seed)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.stream()
 * 
 */
  __pyx_tuple__62 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__62);
  __Pyx_GIVEREF(__pyx_tuple__62);
  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_iter, 1053, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 1053, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1056
 * 		return self.stream()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)
 * 
 */
  __pyx_tuple__64 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__64);
  __Pyx_GIVEREF(__pyx_tuple__64);
  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_str, 1056, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 1056, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1059
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */
  __pyx_tuple__66 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 1059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__66);
  __Pyx_GIVEREF(__pyx_tuple__66);
  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_repr, 1059, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 1059, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1062
 * 		return self.__str__()
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		while self.wantSize > 0:
 * 			ng = min(self.wantBlockSize, self.wantSize)
 */
  __pyx_tuple__68 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ng); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 1062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__68);
  __Pyx_GIVEREF(__pyx_tuple__68);
  __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_stream, 1062, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 1062, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1071
 * class sequenceStreamGenerator(sequenceStream):
 * 
 * 	def __init__(self, model, wantBlockSize, wantN, wantSize):             # <<<<<<<<<<<<<<
 * 		self.model = model
 * 		self.wantN = wantN
 */
  __pyx_tuple__69 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_model, __pyx_n_s_wantBlockSize, __pyx_n_s_wantN, __pyx_n_s_wantSize); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__69);
  __Pyx_GIVEREF(__pyx_tuple__69);
  __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_init, 1071, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 1071, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1078
 * 		self.name = str(model)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 */
  __pyx_tuple__71 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_seed, __pyx_n_s_i); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__71);
  __Pyx_GIVEREF(__pyx_tuple__71);
  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_iter, 1078, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 1078, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1084
 * 			yield sequenceStreamGeneratorSequence(model = self.model, wantBlockSize = self.wantBlockSize, wantSize = self.wantSize, number = (i+1), seed = seed)
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Generator sequence stream<%s>'%str(self.model)
 * 
 */
  __pyx_tuple__72 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__72);
  __Pyx_GIVEREF(__pyx_tuple__72);
  __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_str, 1084, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(0, 1084, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1087
 * 		return 'Generator sequence stream<%s>'%str(self.model)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */
  __pyx_tuple__74 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(0, 1087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__74);
  __Pyx_GIVEREF(__pyx_tuple__74);
  __pyx_codeobj__75 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_repr, 1087, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__75)) __PYX_ERR(0, 1087, __pyx_L1_error)

  /* "gnocis/sequences.pyx":1091
 * 
 * # Returns a weighted random choice from a list of tuples of choices and weights.
 * def weightedRandomChoice(choices):             # <<<<<<<<<<<<<<
 * 	r = random.random()
 * 	cw = 0.0
 */
  __pyx_tuple__76 = PyTuple_Pack(5, __pyx_n_s_choices, __pyx_n_s_r, __pyx_n_s_cw, __pyx_n_s_c, __pyx_n_s_w); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__76);
  __Pyx_GIVEREF(__pyx_tuple__76);
  __pyx_codeobj__77 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gnocis_sequences_pyx, __pyx_n_s_weightedRandomChoice, 1091, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__77)) __PYX_ERR(0, 1091, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __pyx_unpickle_sequenceLabel(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_tuple__78 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__78);
  __Pyx_GIVEREF(__pyx_tuple__78);
  __pyx_codeobj__79 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_sequenceLabel, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__79)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__80 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__80);
  __Pyx_GIVEREF(__pyx_tuple__80);
  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_sequence, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__82 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__82);
  __Pyx_GIVEREF(__pyx_tuple__82);
  __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_sequences, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__84 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__84);
  __Pyx_GIVEREF(__pyx_tuple__84);
  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_sequenceStream, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__86 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__86);
  __Pyx_GIVEREF(__pyx_tuple__86);
  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_streamFASTASeq, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__88 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__88);
  __Pyx_GIVEREF(__pyx_tuple__88);
  __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_stream2bitNBlock, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__90 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__90);
  __Pyx_GIVEREF(__pyx_tuple__90);
  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_stream2bitSeq, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__92 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__92);
  __Pyx_GIVEREF(__pyx_tuple__92);
  __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_sequenceGenerator, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__94 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__94);
  __Pyx_GIVEREF(__pyx_tuple__94);
  __pyx_codeobj__95 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_MarkovChain, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__95)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__96 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__96);
  __Pyx_GIVEREF(__pyx_tuple__96);
  __pyx_codeobj__97 = (PyObject*)__Pyx_PyCode_New(3, 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_stringsource, __pyx_n_s_pyx_unpickle_IID, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__97)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
  __pyx_umethod_PyDict_Type_keys.type = (PyObject*)&PyDict_Type;
  __pyx_umethod_PyUnicode_Type_strip.type = (PyObject*)&PyUnicode_Type;
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_float_0_5 = PyFloat_FromDouble(0.5); if (unlikely(!__pyx_float_0_5)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_float_neg_1_0 = PyFloat_FromDouble(-1.0); if (unlikely(!__pyx_float_neg_1_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_16 = PyInt_FromLong(16); if (unlikely(!__pyx_int_16)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_5000 = PyInt_FromLong(5000); if (unlikely(!__pyx_int_5000)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_54760534 = PyInt_FromLong(54760534L); if (unlikely(!__pyx_int_54760534)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_87241720 = PyInt_FromLong(87241720L); if (unlikely(!__pyx_int_87241720)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_106341190 = PyInt_FromLong(106341190L); if (unlikely(!__pyx_int_106341190)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_156819973 = PyInt_FromLong(156819973L); if (unlikely(!__pyx_int_156819973)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_180500104 = PyInt_FromLong(180500104L); if (unlikely(!__pyx_int_180500104)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_188562974 = PyInt_FromLong(188562974L); if (unlikely(!__pyx_int_188562974)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_208533218 = PyInt_FromLong(208533218L); if (unlikely(!__pyx_int_208533218)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_222419149 = PyInt_FromLong(222419149L); if (unlikely(!__pyx_int_222419149)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_262643973 = PyInt_FromLong(262643973L); if (unlikely(!__pyx_int_262643973)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_4294967295 = PyInt_FromString((char *)"4294967295", 0, 0); if (unlikely(!__pyx_int_4294967295)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/

static int __Pyx_modinit_global_init_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
  /*--- Global init code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_export_code(void) {
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  if (__Pyx_ExportFunction("streamFASTA", (void (*)(void))__pyx_f_6gnocis_9sequences_streamFASTA, "PyObject *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_streamFASTA *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("stream2bit", (void (*)(void))__pyx_f_6gnocis_9sequences_stream2bit, "PyObject *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_stream2bit *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("getSequenceStreamFromPath", (void (*)(void))__pyx_f_6gnocis_9sequences_getSequenceStreamFromPath, "PyObject *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_6gnocis_9sequences_getSequenceStreamFromPath *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_init_code(void) {
  __Pyx_RefNannyDeclarations
  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 (PyType_Ready(&__pyx_type_6gnocis_9sequences_sequenceLabel) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_sequenceLabel.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_sequenceLabel.tp_dictoffset && __pyx_type_6gnocis_9sequences_sequenceLabel.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_sequenceLabel.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_sequenceLabel, (PyObject *)&__pyx_type_6gnocis_9sequences_sequenceLabel) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_sequenceLabel) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_sequenceLabel = &__pyx_type_6gnocis_9sequences_sequenceLabel;
  __pyx_vtabptr_6gnocis_9sequences_sequence = &__pyx_vtable_6gnocis_9sequences_sequence;
  __pyx_vtable_6gnocis_9sequences_sequence.getBytes = (PyObject *(*)(struct __pyx_obj_6gnocis_9sequences_sequence *))__pyx_f_6gnocis_9sequences_8sequence_getBytes;
  __pyx_vtable_6gnocis_9sequences_sequence.getBytesIndexed = (PyObject *(*)(struct __pyx_obj_6gnocis_9sequences_sequence *))__pyx_f_6gnocis_9sequences_8sequence_getBytesIndexed;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_sequence) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_sequence.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_sequence.tp_dictoffset && __pyx_type_6gnocis_9sequences_sequence.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_sequence.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_6gnocis_9sequences_sequence.tp_dict, __pyx_vtabptr_6gnocis_9sequences_sequence) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_sequence, (PyObject *)&__pyx_type_6gnocis_9sequences_sequence) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_sequence) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_sequence = &__pyx_type_6gnocis_9sequences_sequence;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_sequences) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_sequences.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_sequences.tp_dictoffset && __pyx_type_6gnocis_9sequences_sequences.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_sequences.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_sequences, (PyObject *)&__pyx_type_6gnocis_9sequences_sequences) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_sequences) < 0) __PYX_ERR(0, 171, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_sequences = &__pyx_type_6gnocis_9sequences_sequences;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_sequenceStream) < 0) __PYX_ERR(0, 466, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_sequenceStream.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_sequenceStream.tp_dictoffset && __pyx_type_6gnocis_9sequences_sequenceStream.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_sequenceStream.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_sequenceStream, (PyObject *)&__pyx_type_6gnocis_9sequences_sequenceStream) < 0) __PYX_ERR(0, 466, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_sequenceStream) < 0) __PYX_ERR(0, 466, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_sequenceStream = &__pyx_type_6gnocis_9sequences_sequenceStream;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_sequenceGenerator) < 0) __PYX_ERR(0, 1101, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_sequenceGenerator.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_sequenceGenerator.tp_dictoffset && __pyx_type_6gnocis_9sequences_sequenceGenerator.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_sequenceGenerator.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_sequenceGenerator, (PyObject *)&__pyx_type_6gnocis_9sequences_sequenceGenerator) < 0) __PYX_ERR(0, 1101, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_sequenceGenerator) < 0) __PYX_ERR(0, 1101, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_sequenceGenerator = &__pyx_type_6gnocis_9sequences_sequenceGenerator;
  __pyx_type_6gnocis_9sequences_MarkovChain.tp_base = __pyx_ptype_6gnocis_9sequences_sequenceGenerator;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_MarkovChain) < 0) __PYX_ERR(0, 1164, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_MarkovChain.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_MarkovChain.tp_dictoffset && __pyx_type_6gnocis_9sequences_MarkovChain.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_MarkovChain.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_MarkovChain, (PyObject *)&__pyx_type_6gnocis_9sequences_MarkovChain) < 0) __PYX_ERR(0, 1164, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_MarkovChain) < 0) __PYX_ERR(0, 1164, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_MarkovChain = &__pyx_type_6gnocis_9sequences_MarkovChain;
  __pyx_type_6gnocis_9sequences_IID.tp_base = __pyx_ptype_6gnocis_9sequences_sequenceGenerator;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_IID) < 0) __PYX_ERR(0, 1385, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_IID.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_IID.tp_dictoffset && __pyx_type_6gnocis_9sequences_IID.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_IID.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_IID, (PyObject *)&__pyx_type_6gnocis_9sequences_IID) < 0) __PYX_ERR(0, 1385, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_IID) < 0) __PYX_ERR(0, 1385, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_IID = &__pyx_type_6gnocis_9sequences_IID;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_streamFASTASeq) < 0) __PYX_ERR(0, 564, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_streamFASTASeq.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_streamFASTASeq.tp_dictoffset && __pyx_type_6gnocis_9sequences_streamFASTASeq.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_streamFASTASeq.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_streamFASTASeq, (PyObject *)&__pyx_type_6gnocis_9sequences_streamFASTASeq) < 0) __PYX_ERR(0, 564, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_streamFASTASeq) < 0) __PYX_ERR(0, 564, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_streamFASTASeq = &__pyx_type_6gnocis_9sequences_streamFASTASeq;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_stream2bitNBlock) < 0) __PYX_ERR(0, 733, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_stream2bitNBlock.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_stream2bitNBlock.tp_dictoffset && __pyx_type_6gnocis_9sequences_stream2bitNBlock.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_stream2bitNBlock.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_stream2bitNBlock, (PyObject *)&__pyx_type_6gnocis_9sequences_stream2bitNBlock) < 0) __PYX_ERR(0, 733, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_stream2bitNBlock) < 0) __PYX_ERR(0, 733, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_stream2bitNBlock = &__pyx_type_6gnocis_9sequences_stream2bitNBlock;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences_stream2bitSeq) < 0) __PYX_ERR(0, 741, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences_stream2bitSeq.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences_stream2bitSeq.tp_dictoffset && __pyx_type_6gnocis_9sequences_stream2bitSeq.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences_stream2bitSeq.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_stream2bitSeq, (PyObject *)&__pyx_type_6gnocis_9sequences_stream2bitSeq) < 0) __PYX_ERR(0, 741, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6gnocis_9sequences_stream2bitSeq) < 0) __PYX_ERR(0, 741, __pyx_L1_error)
  __pyx_ptype_6gnocis_9sequences_stream2bitSeq = &__pyx_type_6gnocis_9sequences_stream2bitSeq;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct__table) < 0) __PYX_ERR(0, 202, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct__table.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct__table.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct__table.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct__table.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct__table = &__pyx_type_6gnocis_9sequences___pyx_scope_struct__table;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_1_genexpr) < 0) __PYX_ERR(0, 208, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_1_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_1_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_1_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_1_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_1_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_1_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_2_withLabel) < 0) __PYX_ERR(0, 341, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_2_withLabel.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_2_withLabel.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_2_withLabel.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_2_withLabel.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_2_withLabel = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_2_withLabel;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_3_genexpr) < 0) __PYX_ERR(0, 361, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_3_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_3_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_3_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_3_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_3_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_3_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_4_labels) < 0) __PYX_ERR(0, 373, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_4_labels.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_4_labels.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_4_labels.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_4_labels.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_4_labels = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_4_labels;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_5_genexpr) < 0) __PYX_ERR(0, 379, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_5_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_5_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_5_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_5_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_5_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_5_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_6_printStatistics) < 0) __PYX_ERR(0, 403, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_6_printStatistics.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_6_printStatistics.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_6_printStatistics.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_6_printStatistics.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_6_printStatistics = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_6_printStatistics;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_7_genexpr) < 0) __PYX_ERR(0, 410, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_7_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_7_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_7_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_7_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_7_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_7_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_8_genexpr) < 0) __PYX_ERR(0, 410, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_8_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_8_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_8_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_8_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_8_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_8_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_9_genexpr) < 0) __PYX_ERR(0, 410, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_9_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_9_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_9_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_9_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_9_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_9_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_10_genexpr) < 0) __PYX_ERR(0, 411, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_10_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_10_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_10_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_10_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_10_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_10_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ) < 0) __PYX_ERR(0, 437, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_11_loadFASTAGZ;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_12_genexpr) < 0) __PYX_ERR(0, 449, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_12_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_12_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_12_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_12_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_12_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_12_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_13_fetch) < 0) __PYX_ERR(0, 475, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_13_fetch.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_13_fetch.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_13_fetch.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_13_fetch.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_13_fetch = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_13_fetch;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences) < 0) __PYX_ERR(0, 508, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_14_streamFullSequences;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_15_genexpr) < 0) __PYX_ERR(0, 516, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_15_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_15_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_15_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_15_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_15_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_15_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths) < 0) __PYX_ERR(0, 519, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_16_sequenceLengths;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_17_genexpr) < 0) __PYX_ERR(0, 526, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_17_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_17_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_17_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_17_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_17_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_17_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_18_stream) < 0) __PYX_ERR(0, 586, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_18_stream.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_18_stream.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_18_stream.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_18_stream.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_18_stream = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_18_stream;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_19___iter__) < 0) __PYX_ERR(0, 641, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_19___iter__.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_19___iter__.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_19___iter__.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_19___iter__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_19___iter__ = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_19___iter__;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_20_genexpr) < 0) __PYX_ERR(0, 648, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_20_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_20_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_20_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_20_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_20_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_20_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_21_stream) < 0) __PYX_ERR(0, 755, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_21_stream.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_21_stream.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_21_stream.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_21_stream.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_21_stream = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_21_stream;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_22___iter__) < 0) __PYX_ERR(0, 868, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_22___iter__.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_22___iter__.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_22___iter__.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_22___iter__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_22___iter__ = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_22___iter__;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_23_genexpr) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_23_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_23_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_23_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_23_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_23_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_23_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_24_genexpr) < 0) __PYX_ERR(0, 901, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_24_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_24_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_24_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_24_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_24_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_24_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_25_genexpr) < 0) __PYX_ERR(0, 903, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_25_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_25_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_25_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_25_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_25_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_25_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_26_genexpr) < 0) __PYX_ERR(0, 904, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_26_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_26_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_26_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_26_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_26_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_26_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows) < 0) __PYX_ERR(0, 969, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_27_streamSequenceWindows;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_28_stream) < 0) __PYX_ERR(0, 1062, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_28_stream.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_28_stream.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_28_stream.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_28_stream.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_28_stream = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_28_stream;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_29___iter__) < 0) __PYX_ERR(0, 1078, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_29___iter__.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_29___iter__.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_29___iter__.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_29___iter__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_29___iter__ = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_29___iter__;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_30__prepare) < 0) __PYX_ERR(0, 1209, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_30__prepare.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_30__prepare.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_30__prepare.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_30__prepare.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_30__prepare = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_30__prepare;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_31_genexpr) < 0) __PYX_ERR(0, 1237, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_31_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_31_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_31_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_31_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_31_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_31_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_32_genexpr) < 0) __PYX_ERR(0, 1246, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_32_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_32_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_32_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_32_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_32_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_32_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_33_generate) < 0) __PYX_ERR(0, 1328, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_33_generate.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_33_generate.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_33_generate.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_33_generate.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_33_generate = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_33_generate;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_34_genexpr) < 0) __PYX_ERR(0, 1350, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_34_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_34_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_34_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_34_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_34_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_34_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_35__prepare) < 0) __PYX_ERR(0, 1460, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_35__prepare.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_35__prepare.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_35__prepare.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_35__prepare.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_35__prepare = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_35__prepare;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_36_genexpr) < 0) __PYX_ERR(0, 1473, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_36_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_36_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_36_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_36_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_36_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_36_genexpr;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_37_generate) < 0) __PYX_ERR(0, 1478, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_37_generate.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_37_generate.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_37_generate.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_37_generate.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_37_generate = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_37_generate;
  if (PyType_Ready(&__pyx_type_6gnocis_9sequences___pyx_scope_struct_38_genexpr) < 0) __PYX_ERR(0, 1491, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6gnocis_9sequences___pyx_scope_struct_38_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6gnocis_9sequences___pyx_scope_struct_38_genexpr.tp_dictoffset && __pyx_type_6gnocis_9sequences___pyx_scope_struct_38_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6gnocis_9sequences___pyx_scope_struct_38_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6gnocis_9sequences___pyx_scope_struct_38_genexpr = &__pyx_type_6gnocis_9sequences___pyx_scope_struct_38_genexpr;
  __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("gnocis.regions"); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_6gnocis_7regions_region = __Pyx_ImportType(__pyx_t_1, "gnocis.regions", "region", sizeof(struct __pyx_obj_6gnocis_7regions_region), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6gnocis_7regions_region) __PYX_ERR(3, 16, __pyx_L1_error)
  __pyx_ptype_6gnocis_7regions_regions = __Pyx_ImportType(__pyx_t_1, "gnocis.regions", "regions", sizeof(struct __pyx_obj_6gnocis_7regions_regions), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6gnocis_7regions_regions) __PYX_ERR(3, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("gnocis.common"); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_6gnocis_6common__PyMEAPrivateData = __Pyx_ImportType(__pyx_t_1, "gnocis.common", "_PyMEAPrivateData", sizeof(struct __pyx_obj_6gnocis_6common__PyMEAPrivateData), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6gnocis_6common__PyMEAPrivateData) __PYX_ERR(4, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("gnocis.motifs"); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_6gnocis_6motifs_motifOccurrence = __Pyx_ImportType(__pyx_t_1, "gnocis.motifs", "motifOccurrence", sizeof(struct __pyx_obj_6gnocis_6motifs_motifOccurrence), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6gnocis_6motifs_motifOccurrence) __PYX_ERR(5, 21, __pyx_L1_error)
  __pyx_ptype_6gnocis_6motifs_IUPACMotif = __Pyx_ImportType(__pyx_t_1, "gnocis.motifs", "IUPACMotif", sizeof(struct __pyx_obj_6gnocis_6motifs_IUPACMotif), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6gnocis_6motifs_IUPACMotif) __PYX_ERR(5, 32, __pyx_L1_error)
  __pyx_ptype_6gnocis_6motifs_PWMMotif = __Pyx_ImportType(__pyx_t_1, "gnocis.motifs", "PWMMotif", sizeof(struct __pyx_obj_6gnocis_6motifs_PWMMotif), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6gnocis_6motifs_PWMMotif) __PYX_ERR(5, 44, __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("gnocis.common"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_ImportFunction(__pyx_t_1, "getGlobalData", (void (**)(void))&__pyx_f_6gnocis_6common_getGlobalData, "struct __pyx_obj_6gnocis_6common__PyMEAPrivateData *(void)") < 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;
}


#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 initsequences(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC initsequences(void)
#else
__Pyx_PyMODINIT_FUNC PyInit_sequences(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit_sequences(void)
#if CYTHON_PEP489_MULTI_PHASE_INIT
{
  return PyModuleDef_Init(&__pyx_moduledef);
}
static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
    #if PY_VERSION_HEX >= 0x030700A1
    static PY_INT64_T main_interpreter_id = -1;
    PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
    if (main_interpreter_id == -1) {
        main_interpreter_id = current_id;
        return (unlikely(current_id == -1)) ? -1 : 0;
    } else if (unlikely(main_interpreter_id != current_id))
    #else
    static PyInterpreterState *main_interpreter = NULL;
    PyInterpreterState *current_interpreter = PyThreadState_Get()->interp;
    if (!main_interpreter) {
        main_interpreter = current_interpreter;
    } else if (unlikely(main_interpreter != current_interpreter))
    #endif
    {
        PyErr_SetString(
            PyExc_ImportError,
            "Interpreter change detected - this module can only be loaded into one interpreter per process.");
        return -1;
    }
    return 0;
}
static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) {
    PyObject *value = PyObject_GetAttrString(spec, from_name);
    int result = 0;
    if (likely(value)) {
        if (allow_none || value != Py_None) {
            result = PyDict_SetItemString(moddict, to_name, value);
        }
        Py_DECREF(value);
    } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Clear();
    } else {
        result = -1;
    }
    return result;
}
static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) {
    PyObject *module = NULL, *moddict, *modname;
    if (__Pyx_check_single_interpreter())
        return NULL;
    if (__pyx_m)
        return __Pyx_NewRef(__pyx_m);
    modname = PyObject_GetAttrString(spec, "name");
    if (unlikely(!modname)) goto bad;
    module = PyModule_NewObject(modname);
    Py_DECREF(modname);
    if (unlikely(!module)) goto bad;
    moddict = PyModule_GetDict(module);
    if (unlikely(!moddict)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad;
    return module;
bad:
    Py_XDECREF(module);
    return NULL;
}


static CYTHON_SMALL_CODE int __pyx_pymod_exec_sequences(PyObject *__pyx_pyinit_module)
#endif
#endif
{
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  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 'sequences' has already been imported. Re-initialisation is not supported.");
    return -1;
  }
  #elif PY_MAJOR_VERSION >= 3
  if (__pyx_m) return __Pyx_NewRef(__pyx_m);
  #endif
  #if CYTHON_REFNANNY
__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
if (!__Pyx_RefNanny) {
  PyErr_Clear();
  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
  if (!__Pyx_RefNanny)
      Py_FatalError("failed to import 'refnanny' module");
}
#endif
  __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_sequences(void)", 0);
  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #ifdef __Pxy_PyFrame_Initialize_Offsets
  __Pxy_PyFrame_Initialize_Offsets();
  #endif
  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
  #ifdef __Pyx_CyFunction_USED
  if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_FusedFunction_USED
  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Coroutine_USED
  if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Generator_USED
  if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_AsyncGen_USED
  if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_StopAsyncIteration_USED
  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  PyEval_InitThreads();
  #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("sequences", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  #endif
  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_d);
  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_b);
  __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_cython_runtime);
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  /*--- Initialize various global constants etc. ---*/
  if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  if (__pyx_module_is_main_gnocis__sequences) {
    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, "gnocis.sequences")) {
      if (unlikely(PyDict_SetItemString(modules, "gnocis.sequences", __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();
  if (unlikely(__Pyx_modinit_function_export_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
  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

  /* "gnocis/sequences.pyx":10
 * 
 * from __future__ import division
 * import re             # <<<<<<<<<<<<<<
 * import struct
 * import random
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_re, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_1) < 0) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":11
 * from __future__ import division
 * import re
 * import struct             # <<<<<<<<<<<<<<
 * import random
 * import gzip
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_struct, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":12
 * import re
 * import struct
 * import random             # <<<<<<<<<<<<<<
 * import gzip
 * from libcpp cimport bool
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_random, __pyx_t_1) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":13
 * import struct
 * import random
 * import gzip             # <<<<<<<<<<<<<<
 * from libcpp cimport bool
 * from libc.stdlib cimport malloc, free
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_gzip, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gzip, __pyx_t_1) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":18
 * from libc.string cimport memcpy
 * from .common cimport _PyMEAPrivateData, getGlobalData
 * from .common import nucleotides, complementaryNucleotides, getReverseComplementaryDNASequence, kSpectrumNT2Index, kSpectrumIndex2NT             # <<<<<<<<<<<<<<
 * from .regions cimport *
 * from .motifs cimport *
 */
  __pyx_t_1 = PyList_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_nucleotides);
  __Pyx_GIVEREF(__pyx_n_s_nucleotides);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_nucleotides);
  __Pyx_INCREF(__pyx_n_s_complementaryNucleotides);
  __Pyx_GIVEREF(__pyx_n_s_complementaryNucleotides);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_complementaryNucleotides);
  __Pyx_INCREF(__pyx_n_s_getReverseComplementaryDNASequen);
  __Pyx_GIVEREF(__pyx_n_s_getReverseComplementaryDNASequen);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_getReverseComplementaryDNASequen);
  __Pyx_INCREF(__pyx_n_s_kSpectrumNT2Index);
  __Pyx_GIVEREF(__pyx_n_s_kSpectrumNT2Index);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_kSpectrumNT2Index);
  __Pyx_INCREF(__pyx_n_s_kSpectrumIndex2NT);
  __Pyx_GIVEREF(__pyx_n_s_kSpectrumIndex2NT);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_kSpectrumIndex2NT);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_common, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_nucleotides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_nucleotides, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_complementaryNucleotides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_complementaryNucleotides, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_getReverseComplementaryDNASequen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_getReverseComplementaryDNASequen, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_kSpectrumNT2Index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_kSpectrumNT2Index, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_kSpectrumIndex2NT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_kSpectrumIndex2NT, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":21
 * from .regions cimport *
 * from .motifs cimport *
 * from .ioputil import nctable             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_nctable);
  __Pyx_GIVEREF(__pyx_n_s_nctable);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nctable);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_ioputil, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_nctable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_nctable, __pyx_t_2) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":54
 * 		return self.__str__()
 * 
 * positive = sequenceLabel('Positive', 1.0)             # <<<<<<<<<<<<<<
 * negative = sequenceLabel('Negative', -1.0)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceLabel), __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_positive, __pyx_t_1) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":55
 * 
 * positive = sequenceLabel('Positive', 1.0)
 * negative = sequenceLabel('Negative', -1.0)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceLabel), __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_negative, __pyx_t_1) < 0) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":414
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTA(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a FASTA file.
 * 
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_1loadFASTA, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_loadFASTA, __pyx_t_1) < 0) __PYX_ERR(0, 414, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":437
 * 
 * # Loads a FASTA sequence file and returns a list of sequences contained in the file.
 * def loadFASTAGZ(path):             # <<<<<<<<<<<<<<
 * 	""" Loads sequences from a gzipped FASTA file.
 * 
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_3loadFASTAGZ, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_loadFASTAGZ, __pyx_t_1) < 0) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":613
 * 
 * # Represents stream of FASTA sequences.
 * class sequenceStreamFASTA(sequenceStream):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a FASTA file.
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_latin1_sequenceStreamFASTA, __pyx_n_s_sequenceStreamFASTA, (PyObject *) NULL, __pyx_n_s_gnocis_sequences, __pyx_kp_s_Streams_a_FASTA_file_param_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "gnocis/sequences.pyx":632
 * 	"""
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences, isGZ = False):             # <<<<<<<<<<<<<<
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_19sequenceStreamFASTA_1__init__, 0, __pyx_n_s_sequenceStreamFASTA___init, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__44);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 632, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":641
 * 		self.isGZ = isGZ
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef str line, sname
 * 		cdef streamFASTASeq seqStream
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_19sequenceStreamFASTA_3__iter__, 0, __pyx_n_s_sequenceStreamFASTA___iter, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_iter, __pyx_t_4) < 0) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":682
 * 		return None
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_19sequenceStreamFASTA_6__str__, 0, __pyx_n_s_sequenceStreamFASTA___str, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_str, __pyx_t_4) < 0) __PYX_ERR(0, 682, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":685
 * 		return 'FASTA sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_19sequenceStreamFASTA_8__repr__, 0, __pyx_n_s_sequenceStreamFASTA___repr, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 685, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_repr, __pyx_t_4) < 0) __PYX_ERR(0, 685, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":613
 * 
 * # Represents stream of FASTA sequences.
 * class sequenceStreamFASTA(sequenceStream):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a FASTA file.
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_latin1_sequenceStreamFASTA, __pyx_t_1, __pyx_t_3, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_latin1_sequenceStreamFASTA, __pyx_t_4) < 0) __PYX_ERR(0, 613, __pyx_L1_error)
  __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;

  /* "gnocis/sequences.pyx":843
 * 
 * # Represents stream of 2bit sequences.
 * class sequenceStream2bit(sequenceStream):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a 2bit file.
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_latin1_sequenceStream2bit, __pyx_n_s_sequenceStream2bit, (PyObject *) NULL, __pyx_n_s_gnocis_sequences, __pyx_kp_s_Streams_a_2bit_file_param_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "gnocis/sequences.pyx":860
 * 	"""
 * 
 * 	def __init__(self, path, wantBlockSize, spacePrune, dropChr, restrictToSequences):             # <<<<<<<<<<<<<<
 * 		self.path = path
 * 		self.name = path.split('/')[-1]
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_1__init__, 0, __pyx_n_s_sequenceStream2bit___init, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 860, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":868
 * 		self.restrictToSequences = restrictToSequences
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		cdef unsigned int sig, ver, nseq, reserved, offset
 * 		cdef list seqs
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_3__iter__, 0, __pyx_n_s_sequenceStream2bit___iter, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_iter, __pyx_t_4) < 0) __PYX_ERR(0, 868, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":910
 * 		return None
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_6__str__, 0, __pyx_n_s_sequenceStream2bit___str, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__54)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_str, __pyx_t_4) < 0) __PYX_ERR(0, 910, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":913
 * 		return '2bit sequence stream<%s>'%(self.name)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_18sequenceStream2bit_8__repr__, 0, __pyx_n_s_sequenceStream2bit___repr, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_repr, __pyx_t_4) < 0) __PYX_ERR(0, 913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":843
 * 
 * # Represents stream of 2bit sequences.
 * class sequenceStream2bit(sequenceStream):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Streams a 2bit file.
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_latin1_sequenceStream2bit, __pyx_t_1, __pyx_t_3, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 843, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_latin1_sequenceStream2bit, __pyx_t_4) < 0) __PYX_ERR(0, 843, __pyx_L1_error)
  __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;

  /* "gnocis/sequences.pyx":969
 * 
 * # Streams sequence windows from a sequence set or sequence stream, with coordinates and window sequence.
 * def streamSequenceWindows(src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Yields sequence windows for a sequence set, sequence stream or a path to a sequence file.
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_13streamSequenceWindows, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_streamSequenceWindows, __pyx_t_1) < 0) __PYX_ERR(0, 969, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1010
 * 
 * # Returns sliding window coordinates for a sequence set or sequence stream.
 * def getSequenceWindowRegions(object src, int windowSize, int windowStep):             # <<<<<<<<<<<<<<
 * 	"""
 * 	Generates sequence window regions for a sequence set or stream.
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_16getSequenceWindowRegions, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_getSequenceWindowRegions, __pyx_t_1) < 0) __PYX_ERR(0, 1010, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1045
 * 
 * # Represents individual sequences within a generator stream
 * class sequenceStreamGeneratorSequence:             # <<<<<<<<<<<<<<
 * 
 * 	def __init__(self, model, wantBlockSize, wantSize, number, seed):
 */
  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_latin1_sequenceStreamGeneratorSequence_2, __pyx_n_s_sequenceStreamGeneratorSequence_2, (PyObject *) NULL, __pyx_n_s_gnocis_sequences, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "gnocis/sequences.pyx":1047
 * class sequenceStreamGeneratorSequence:
 * 
 * 	def __init__(self, model, wantBlockSize, wantSize, number, seed):             # <<<<<<<<<<<<<<
 * 		self.model = model
 * 		self.wantSize = wantSize
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_1__init__, 0, __pyx_n_s_sequenceStreamGeneratorSequence_3, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__61)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_init, __pyx_t_2) < 0) __PYX_ERR(0, 1047, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1053
 * 		self.name = 'Random sequence %d (seed = %d)'%(number, seed)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		return self.stream()
 * 
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_3__iter__, 0, __pyx_n_s_sequenceStreamGeneratorSequence_4, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_iter, __pyx_t_2) < 0) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1056
 * 		return self.stream()
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)
 * 
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_5__str__, 0, __pyx_n_s_sequenceStreamGeneratorSequence_5, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_str, __pyx_t_2) < 0) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1059
 * 		return 'Generator sequence stream sequence<%s, %d>'%(str(self.model), self.wantSize)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_7__repr__, 0, __pyx_n_s_sequenceStreamGeneratorSequence_6, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_repr, __pyx_t_2) < 0) __PYX_ERR(0, 1059, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1062
 * 		return self.__str__()
 * 
 * 	def stream(self):             # <<<<<<<<<<<<<<
 * 		while self.wantSize > 0:
 * 			ng = min(self.wantBlockSize, self.wantSize)
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_31sequenceStreamGeneratorSequence_9stream, 0, __pyx_n_s_sequenceStreamGeneratorSequence, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__29)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_stream, __pyx_t_2) < 0) __PYX_ERR(0, 1062, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "gnocis/sequences.pyx":1045
 * 
 * # Represents individual sequences within a generator stream
 * class sequenceStreamGeneratorSequence:             # <<<<<<<<<<<<<<
 * 
 * 	def __init__(self, model, wantBlockSize, wantSize, number, seed):
 */
  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_latin1_sequenceStreamGeneratorSequence_2, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_latin1_sequenceStreamGeneratorSequence_2, __pyx_t_2) < 0) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1069
 * 
 * # Represents stream of 2bit sequences.
 * class sequenceStreamGenerator(sequenceStream):             # <<<<<<<<<<<<<<
 * 
 * 	def __init__(self, model, wantBlockSize, wantN, wantSize):
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_ptype_6gnocis_9sequences_sequenceStream));
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_latin1_sequenceStreamGenerator, __pyx_n_s_sequenceStreamGenerator, (PyObject *) NULL, __pyx_n_s_gnocis_sequences, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "gnocis/sequences.pyx":1071
 * class sequenceStreamGenerator(sequenceStream):
 * 
 * 	def __init__(self, model, wantBlockSize, wantN, wantSize):             # <<<<<<<<<<<<<<
 * 		self.model = model
 * 		self.wantN = wantN
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_23sequenceStreamGenerator_1__init__, 0, __pyx_n_s_sequenceStreamGenerator___init, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__70)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":1078
 * 		self.name = str(model)
 * 
 * 	def __iter__(self):             # <<<<<<<<<<<<<<
 * 		seed = random.randint(0, 0xFFFFFFFF)
 * 		random.seed(seed)
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_23sequenceStreamGenerator_3__iter__, 0, __pyx_n_s_sequenceStreamGenerator___iter, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_iter, __pyx_t_4) < 0) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":1084
 * 			yield sequenceStreamGeneratorSequence(model = self.model, wantBlockSize = self.wantBlockSize, wantSize = self.wantSize, number = (i+1), seed = seed)
 * 
 * 	def __str__(self):             # <<<<<<<<<<<<<<
 * 		return 'Generator sequence stream<%s>'%str(self.model)
 * 
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_23sequenceStreamGenerator_6__str__, 0, __pyx_n_s_sequenceStreamGenerator___str, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_str, __pyx_t_4) < 0) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":1087
 * 		return 'Generator sequence stream<%s>'%str(self.model)
 * 
 * 	def __repr__(self):             # <<<<<<<<<<<<<<
 * 		return self.__str__()
 * 
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6gnocis_9sequences_23sequenceStreamGenerator_8__repr__, 0, __pyx_n_s_sequenceStreamGenerator___repr, NULL, __pyx_n_s_gnocis_sequences, __pyx_d, ((PyObject *)__pyx_codeobj__75)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_repr, __pyx_t_4) < 0) __PYX_ERR(0, 1087, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "gnocis/sequences.pyx":1069
 * 
 * # Represents stream of 2bit sequences.
 * class sequenceStreamGenerator(sequenceStream):             # <<<<<<<<<<<<<<
 * 
 * 	def __init__(self, model, wantBlockSize, wantN, wantSize):
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_latin1_sequenceStreamGenerator, __pyx_t_1, __pyx_t_3, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_latin1_sequenceStreamGenerator, __pyx_t_4) < 0) __PYX_ERR(0, 1069, __pyx_L1_error)
  __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;

  /* "gnocis/sequences.pyx":1091
 * 
 * # Returns a weighted random choice from a list of tuples of choices and weights.
 * def weightedRandomChoice(choices):             # <<<<<<<<<<<<<<
 * 	r = random.random()
 * 	cw = 0.0
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_18weightedRandomChoice, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_weightedRandomChoice, __pyx_t_1) < 0) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_sequenceLabel(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_20__pyx_unpickle_sequenceLabel, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_sequenceLabel, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":11
 *         __pyx_unpickle_sequenceLabel__set_state(<sequenceLabel> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequenceLabel__set_state(sequenceLabel __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.value = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_22__pyx_unpickle_sequence, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_sequence, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_sequences(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_24__pyx_unpickle_sequences, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_sequences, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":11
 *         __pyx_unpickle_sequences__set_state(<sequences> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_sequences__set_state(sequences __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.name = __pyx_state[0]; __pyx_result.sequences = __pyx_state[1]
 *     if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'):
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_26__pyx_unpickle_sequenceStream, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_sequenceStream, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_streamFASTASeq(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_28__pyx_unpickle_streamFASTASeq, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_streamFASTASeq, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":11
 *         __pyx_unpickle_streamFASTASeq__set_state(<streamFASTASeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_streamFASTASeq__set_state(streamFASTASeq __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.fstream = __pyx_state[0]; __pyx_result.lastLine = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.parsingCompleted = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_30__pyx_unpickle_stream2bitNBlock, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_stream2bitNBlock, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_stream2bitSeq(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_32__pyx_unpickle_stream2bitSeq, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_stream2bitSeq, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":11
 *         __pyx_unpickle_stream2bitSeq__set_state(<stream2bitSeq> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_stream2bitSeq__set_state(stream2bitSeq __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.Nblocks = __pyx_state[0]; __pyx_result.fstream = __pyx_state[1]; __pyx_result.name = __pyx_state[2]; __pyx_result.nnt = __pyx_state[3]; __pyx_result.wantBlockSize = __pyx_state[4]
 *     if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'):
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_34__pyx_unpickle_sequenceGenerator, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_sequenceGenerator, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_MarkovChain(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_36__pyx_unpickle_MarkovChain, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_MarkovChain, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":11
 *         __pyx_unpickle_MarkovChain__set_state(<MarkovChain> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_MarkovChain__set_state(MarkovChain __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.addReverseComplements = __pyx_state[0]; __pyx_result.comparableSpectrum = __pyx_state[1]; __pyx_result.degree = __pyx_state[2]; __pyx_result.initialDistribution = __pyx_state[3]; __pyx_result.nGenerated = __pyx_state[4]; __pyx_result.prepared = __pyx_state[5]; __pyx_result.probspectrum = __pyx_state[6]; __pyx_result.pseudoCounts = __pyx_state[7]; __pyx_result.spectrum = __pyx_state[8]; __pyx_result.trainingSequences = __pyx_state[9]
 *     if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'):
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6gnocis_9sequences_38__pyx_unpickle_IID, NULL, __pyx_n_s_gnocis_sequences); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_IID, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "gnocis/sequences.pyx":1
 * # distutils: language=c++             # <<<<<<<<<<<<<<
 * # -*- coding: latin-1 -*-
 * ############################################################################
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /*--- Wrapped vars code ---*/

  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);
  if (__pyx_m) {
    if (__pyx_d) {
      __Pyx_AddTraceback("init gnocis.sequences", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    Py_CLEAR(__pyx_m);
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init gnocis.sequences");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  return (__pyx_m != NULL) ? 0 : -1;
  #elif PY_MAJOR_VERSION >= 3
  return __pyx_m;
  #else
  return;
  #endif
}

/* --- Runtime support code --- */
/* Refnanny */
#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule(modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, "RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif

/* PyObjectGetAttrStr */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro))
        return tp->tp_getattro(obj, attr_name);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_getattr))
        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
#endif
    return PyObject_GetAttr(obj, attr_name);
}
#endif

/* GetBuiltinName */
static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
    if (unlikely(!result)) {
        PyErr_Format(PyExc_NameError,
#if PY_MAJOR_VERSION >= 3
            "name '%U' is not defined", name);
#else
            "name '%.200s' is not defined", PyString_AS_STRING(name));
#endif
    }
    return result;
}

/* RaiseArgTupleInvalid */
static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *more_or_less;
    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

/* RaiseDoubleKeywords */
static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        #if PY_MAJOR_VERSION >= 3
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
        #else
        "%s() got multiple values for keyword argument '%s'", func_name,
        PyString_AsString(kw_name));
        #endif
}

/* ParseKeywords */
static int __Pyx_ParseOptionalKeywords(
    PyObject *kwds,
    PyObject **argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject *key = 0, *value = 0;
    Py_ssize_t pos = 0;
    PyObject*** name;
    PyObject*** first_kw_arg = argnames + num_pos_args;
    while (PyDict_Next(kwds, &pos, &key, &value)) {
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            values[name-argnames] = value;
            continue;
        }
        name = first_kw_arg;
        #if PY_MAJOR_VERSION < 3
        if (likely(PyString_Check(key))) {
            while (*name) {
                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
                        && _PyString_Eq(**name, key)) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    if ((**argname == key) || (
                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
                             && _PyString_Eq(**argname, key))) {
                        goto arg_passed_twice;
                    }
                    argname++;
                }
            }
        } else
        #endif
        if (likely(PyUnicode_Check(key))) {
            while (*name) {
                int cmp = (**name == key) ? 0 :
                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                    (__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:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

/* PyUnicode_Unicode */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Unicode(PyObject *obj) {
    if (unlikely(obj == Py_None))
        obj = __pyx_kp_u_None;
    return __Pyx_NewRef(obj);
}

/* PyCFunctionFastCall */
#if CYTHON_FAST_PYCCALL
static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
    PyObject *self = PyCFunction_GET_SELF(func);
    int flags = PyCFunction_GET_FLAGS(func);
    assert(PyCFunction_Check(func));
    assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)));
    assert(nargs >= 0);
    assert(nargs == 0 || args != NULL);
    /* _PyCFunction_FastCallDict() must not be called with an exception set,
       because it may clear it (directly or indirectly) and so the
       caller loses its exception */
    assert(!PyErr_Occurred());
    if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
        return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL);
    } else {
        return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs);
    }
}
#endif

/* PyFunctionFastCall */
#if CYTHON_FAST_PYCALL
static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
                                               PyObject *globals) {
    PyFrameObject *f;
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    PyObject **fastlocals;
    Py_ssize_t i;
    PyObject *result;
    assert(globals != NULL);
    /* XXX Perhaps we should create a specialized
       PyFrame_New() that doesn't take locals, but does
       take builtins without sanity checking them.
       */
    assert(tstate != NULL);
    f = PyFrame_New(tstate, co, globals, NULL);
    if (f == NULL) {
        return NULL;
    }
    fastlocals = __Pyx_PyFrame_GetLocalsplus(f);
    for (i = 0; i < na; i++) {
        Py_INCREF(*args);
        fastlocals[i] = *args++;
    }
    result = PyEval_EvalFrameEx(f,0);
    ++tstate->recursion_depth;
    Py_DECREF(f);
    --tstate->recursion_depth;
    return result;
}
#if 1 || PY_VERSION_HEX < 0x030600B1
static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) {
    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
    PyObject *globals = PyFunction_GET_GLOBALS(func);
    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
    PyObject *closure;
#if PY_MAJOR_VERSION >= 3
    PyObject *kwdefs;
#endif
    PyObject *kwtuple, **k;
    PyObject **d;
    Py_ssize_t nd;
    Py_ssize_t nk;
    PyObject *result;
    assert(kwargs == NULL || PyDict_Check(kwargs));
    nk = kwargs ? PyDict_Size(kwargs) : 0;
    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
        return NULL;
    }
    if (
#if PY_MAJOR_VERSION >= 3
            co->co_kwonlyargcount == 0 &&
#endif
            likely(kwargs == NULL || nk == 0) &&
            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
        if (argdefs == NULL && co->co_argcount == nargs) {
            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
            goto done;
        }
        else if (nargs == 0 && argdefs != NULL
                 && co->co_argcount == Py_SIZE(argdefs)) {
            /* function called with no arguments, but all parameters have
               a default value: use default values as arguments .*/
            args = &PyTuple_GET_ITEM(argdefs, 0);
            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
            goto done;
        }
    }
    if (kwargs != NULL) {
        Py_ssize_t pos, i;
        kwtuple = PyTuple_New(2 * nk);
        if (kwtuple == NULL) {
            result = NULL;
            goto done;
        }
        k = &PyTuple_GET_ITEM(kwtuple, 0);
        pos = i = 0;
        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
            Py_INCREF(k[i]);
            Py_INCREF(k[i+1]);
            i += 2;
        }
        nk = i / 2;
    }
    else {
        kwtuple = NULL;
        k = NULL;
    }
    closure = PyFunction_GET_CLOSURE(func);
#if PY_MAJOR_VERSION >= 3
    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
#endif
    if (argdefs != NULL) {
        d = &PyTuple_GET_ITEM(argdefs, 0);
        nd = Py_SIZE(argdefs);
    }
    else {
        d = NULL;
        nd = 0;
    }
#if PY_MAJOR_VERSION >= 3
    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
                               args, (int)nargs,
                               k, (int)nk,
                               d, (int)nd, kwdefs, closure);
#else
    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
                               args, (int)nargs,
                               k, (int)nk,
                               d, (int)nd, closure);
#endif
    Py_XDECREF(kwtuple);
done:
    Py_LeaveRecursiveCall();
    return result;
}
#endif
#endif

/* PyObjectCall */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *result;
    ternaryfunc call = 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

/* PyObjectCallMethO */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
    PyObject *self, *result;
    PyCFunction cfunc;
    cfunc = PyCFunction_GET_FUNCTION(func);
    self = PyCFunction_GET_SELF(func);
    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
        return NULL;
    result = cfunc(self, arg);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCallOneArg */
#if CYTHON_COMPILING_IN_CPYTHON
static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *result;
    PyObject *args = PyTuple_New(1);
    if (unlikely(!args)) return NULL;
    Py_INCREF(arg);
    PyTuple_SET_ITEM(args, 0, arg);
    result = __Pyx_PyObject_Call(func, args, NULL);
    Py_DECREF(args);
    return result;
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
#if CYTHON_FAST_PYCALL
    if (PyFunction_Check(func)) {
        return __Pyx_PyFunction_FastCall(func, &arg, 1);
    }
#endif
    if (likely(PyCFunction_Check(func))) {
        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
            return __Pyx_PyObject_CallMethO(func, arg);
#if CYTHON_FAST_PYCCALL
        } else if (__Pyx_PyFastCFunction_Check(func)) {
            return __Pyx_PyCFunction_FastCall(func, &arg, 1);
#endif
        }
    }
    return __Pyx__PyObject_CallOneArg(func, arg);
}
#else
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *result;
    PyObject *args = PyTuple_Pack(1, arg);
    if (unlikely(!args)) return NULL;
    result = __Pyx_PyObject_Call(func, args, NULL);
    Py_DECREF(args);
    return result;
}
#endif

/* JoinPyUnicode */
static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength,
                                      CYTHON_UNUSED Py_UCS4 max_char) {
#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    PyObject *result_uval;
    int result_ukind;
    Py_ssize_t i, char_pos;
    void *result_udata;
#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;
    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);
    result_udata = PyUnicode_AS_UNICODE(result_uval);
#endif
    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(char_pos + ulength < 0))
            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 * result_ukind, udata, (size_t) (ulength * result_ukind));
        } 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
    result_ulength++;
    value_count++;
    return PyUnicode_Join(__pyx_empty_unicode, value_tuple);
#endif
}

/* PyObjectCallNoArg */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
#if CYTHON_FAST_PYCALL
    if (PyFunction_Check(func)) {
        return __Pyx_PyFunction_FastCall(func, NULL, 0);
    }
#endif
#ifdef __Pyx_CyFunction_USED
    if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
#else
    if (likely(PyCFunction_Check(func)))
#endif
    {
        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
            return __Pyx_PyObject_CallMethO(func, NULL);
        }
    }
    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
}
#endif

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

/* GetAttr */
static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
#if CYTHON_USE_TYPE_SLOTS
#if PY_MAJOR_VERSION >= 3
    if (likely(PyUnicode_Check(n)))
#else
    if (likely(PyString_Check(n)))
#endif
        return __Pyx_PyObject_GetAttrStr(o, n);
#endif
    return PyObject_GetAttr(o, n);
}

/* GetAttr3 */
static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        return NULL;
    __Pyx_PyErr_Clear();
    Py_INCREF(d);
    return d;
}
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
    PyObject *r = __Pyx_GetAttr(o, n);
    return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
}

/* PyDictVersioning */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
    PyObject **dictptr = NULL;
    Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
    if (offset) {
#if CYTHON_COMPILING_IN_CPYTHON
        dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
#else
        dictptr = _PyObject_GetDictPtr(obj);
#endif
    }
    return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
}
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))
        return 0;
    return obj_dict_version == __Pyx_get_object_dict_version(obj);
}
#endif

/* GetModuleGlobalName */
#if CYTHON_USE_DICT_VERSIONS
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
#else
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
#endif
{
    PyObject *result;
#if !CYTHON_AVOID_BORROWED_REFS
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1
    result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    } else if (unlikely(PyErr_Occurred())) {
        return NULL;
    }
#else
    result = PyDict_GetItem(__pyx_d, name);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    }
#endif
#else
    result = PyObject_GetItem(__pyx_d, name);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    }
    PyErr_Clear();
#endif
    return __Pyx_GetBuiltinName(name);
}

/* ExtTypeTest */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(__Pyx_TypeCheck(obj, type)))
        return 1;
    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
                 Py_TYPE(obj)->tp_name, type->tp_name);
    return 0;
}

/* PyObjectFormatAndDecref */
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f) {
    if (unlikely(!s)) return NULL;
    if (likely(PyUnicode_CheckExact(s))) return s;
    #if PY_MAJOR_VERSION < 3
    if (likely(PyString_CheckExact(s))) {
        PyObject *result = PyUnicode_FromEncodedObject(s, NULL, "strict");
        Py_DECREF(s);
        return result;
    }
    #endif
    return __Pyx_PyObject_FormatAndDecref(s, f);
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f) {
    PyObject *result = PyObject_Format(s, f);
    Py_DECREF(s);
    return result;
}

/* BytesEquals */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY
    return PyObject_RichCompareBool(s1, s2, equals);
#else
    if (s1 == s2) {
        return (equals == Py_EQ);
    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
        const char *ps1, *ps2;
        Py_ssize_t length = PyBytes_GET_SIZE(s1);
        if (length != PyBytes_GET_SIZE(s2))
            return (equals == Py_NE);
        ps1 = PyBytes_AS_STRING(s1);
        ps2 = PyBytes_AS_STRING(s2);
        if (ps1[0] != ps2[0]) {
            return (equals == Py_NE);
        } else if (length == 1) {
            return (equals == Py_EQ);
        } else {
            int result;
#if CYTHON_USE_UNICODE_INTERNALS
            Py_hash_t hash1, hash2;
            hash1 = ((PyBytesObject*)s1)->ob_shash;
            hash2 = ((PyBytesObject*)s2)->ob_shash;
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                return (equals == Py_NE);
            }
#endif
            result = memcmp(ps1, ps2, (size_t)length);
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
        return (equals == Py_NE);
    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
        return (equals == Py_NE);
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
#endif
}

/* UnicodeEquals */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY
    return PyObject_RichCompareBool(s1, s2, equals);
#else
#if PY_MAJOR_VERSION < 3
    PyObject* owned_ref = NULL;
#endif
    int s1_is_unicode, s2_is_unicode;
    if (s1 == s2) {
        goto return_eq;
    }
    s1_is_unicode = PyUnicode_CheckExact(s1);
    s2_is_unicode = PyUnicode_CheckExact(s2);
#if PY_MAJOR_VERSION < 3
    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
        owned_ref = PyUnicode_FromObject(s2);
        if (unlikely(!owned_ref))
            return -1;
        s2 = owned_ref;
        s2_is_unicode = 1;
    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
        owned_ref = PyUnicode_FromObject(s1);
        if (unlikely(!owned_ref))
            return -1;
        s1 = owned_ref;
        s1_is_unicode = 1;
    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
        return __Pyx_PyBytes_Equals(s1, s2, equals);
    }
#endif
    if (s1_is_unicode & s2_is_unicode) {
        Py_ssize_t length;
        int kind;
        void *data1, *data2;
        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
            return -1;
        length = __Pyx_PyUnicode_GET_LENGTH(s1);
        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
            goto return_ne;
        }
#if CYTHON_USE_UNICODE_INTERNALS
        {
            Py_hash_t hash1, hash2;
        #if CYTHON_PEP393_ENABLED
            hash1 = ((PyASCIIObject*)s1)->hash;
            hash2 = ((PyASCIIObject*)s2)->hash;
        #else
            hash1 = ((PyUnicodeObject*)s1)->hash;
            hash2 = ((PyUnicodeObject*)s2)->hash;
        #endif
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                goto return_ne;
            }
        }
#endif
        kind = __Pyx_PyUnicode_KIND(s1);
        if (kind != __Pyx_PyUnicode_KIND(s2)) {
            goto return_ne;
        }
        data1 = __Pyx_PyUnicode_DATA(s1);
        data2 = __Pyx_PyUnicode_DATA(s2);
        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
            goto return_ne;
        } else if (length == 1) {
            goto return_eq;
        } else {
            int result = memcmp(data1, data2, (size_t)(length * kind));
            #if PY_MAJOR_VERSION < 3
            Py_XDECREF(owned_ref);
            #endif
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & s2_is_unicode) {
        goto return_ne;
    } else if ((s2 == Py_None) & s1_is_unicode) {
        goto return_ne;
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        #if PY_MAJOR_VERSION < 3
        Py_XDECREF(owned_ref);
        #endif
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
return_eq:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(owned_ref);
    #endif
    return (equals == Py_EQ);
return_ne:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(owned_ref);
    #endif
    return (equals == Py_NE);
#endif
}

/* CIntToDigits */
static const char DIGIT_PAIRS_10[2*10*10+1] = {
    "00010203040506070809"
    "10111213141516171819"
    "20212223242526272829"
    "30313233343536373839"
    "40414243444546474849"
    "50515253545556575859"
    "60616263646566676869"
    "70717273747576777879"
    "80818283848586878889"
    "90919293949596979899"
};
static const char DIGIT_PAIRS_8[2*8*8+1] = {
    "0001020304050607"
    "1011121314151617"
    "2021222324252627"
    "3031323334353637"
    "4041424344454647"
    "5051525354555657"
    "6061626364656667"
    "7071727374757677"
};
static const char DIGITS_HEX[2*16+1] = {
    "0123456789abcdef"
    "0123456789ABCDEF"
};

/* BuildPyUnicode */
static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength,
                                                int prepend_sign, char padding_char) {
    PyObject *uval;
    Py_ssize_t uoffset = ulength - clength;
#if CYTHON_USE_UNICODE_INTERNALS
    Py_ssize_t i;
#if CYTHON_PEP393_ENABLED
    void *udata;
    uval = PyUnicode_New(ulength, 127);
    if (unlikely(!uval)) return NULL;
    udata = PyUnicode_DATA(uval);
#else
    Py_UNICODE *udata;
    uval = PyUnicode_FromUnicode(NULL, ulength);
    if (unlikely(!uval)) return NULL;
    udata = PyUnicode_AS_UNICODE(uval);
#endif
    if (uoffset > 0) {
        i = 0;
        if (prepend_sign) {
            __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, 0, '-');
            i++;
        }
        for (; i < uoffset; i++) {
            __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, i, padding_char);
        }
    }
    for (i=0; i < clength; i++) {
        __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, uoffset+i, chars[i]);
    }
#else
    {
        PyObject *sign = NULL, *padding = NULL;
        uval = NULL;
        if (uoffset > 0) {
            prepend_sign = !!prepend_sign;
            if (uoffset > prepend_sign) {
                padding = PyUnicode_FromOrdinal(padding_char);
                if (likely(padding) && uoffset > prepend_sign + 1) {
                    PyObject *tmp;
                    PyObject *repeat = PyInt_FromSize_t(uoffset - prepend_sign);
                    if (unlikely(!repeat)) goto done_or_error;
                    tmp = PyNumber_Multiply(padding, repeat);
                    Py_DECREF(repeat);
                    Py_DECREF(padding);
                    padding = tmp;
                }
                if (unlikely(!padding)) goto done_or_error;
            }
            if (prepend_sign) {
                sign = PyUnicode_FromOrdinal('-');
                if (unlikely(!sign)) goto done_or_error;
            }
        }
        uval = PyUnicode_DecodeASCII(chars, clength, NULL);
        if (likely(uval) && padding) {
            PyObject *tmp = PyNumber_Add(padding, uval);
            Py_DECREF(uval);
            uval = tmp;
        }
        if (likely(uval) && sign) {
            PyObject *tmp = PyNumber_Add(sign, uval);
            Py_DECREF(uval);
            uval = tmp;
        }
done_or_error:
        Py_XDECREF(padding);
        Py_XDECREF(sign);
    }
#endif
    return uval;
}

/* CIntToPyUnicode */
#ifdef _MSC_VER
    #ifndef _MSC_STDINT_H_
        #if _MSC_VER < 1300
           typedef unsigned short    uint16_t;
        #else
           typedef unsigned __int16  uint16_t;
        #endif
    #endif
#else
   #include <stdint.h>
#endif
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_PY_LONG_LONG(PY_LONG_LONG value, Py_ssize_t width, char padding_char, char format_char) {
    char digits[sizeof(PY_LONG_LONG)*3+2];
    char *dpos, *end = digits + sizeof(PY_LONG_LONG)*3+2;
    const char *hex_digits = DIGITS_HEX;
    Py_ssize_t length, ulength;
    int prepend_sign, last_one_off;
    PY_LONG_LONG remaining;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const PY_LONG_LONG neg_one = (PY_LONG_LONG) -1, const_zero = (PY_LONG_LONG) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (format_char == 'X') {
        hex_digits += 16;
        format_char = 'x';
    }
    remaining = value;
    last_one_off = 0;
    dpos = end;
    do {
        int digit_pos;
        switch (format_char) {
        case 'o':
            digit_pos = abs((int)(remaining % (8*8)));
            remaining = (PY_LONG_LONG) (remaining / (8*8));
            dpos -= 2;
            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_8)[digit_pos];
            last_one_off = (digit_pos < 8);
            break;
        case 'd':
            digit_pos = abs((int)(remaining % (10*10)));
            remaining = (PY_LONG_LONG) (remaining / (10*10));
            dpos -= 2;
            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_10)[digit_pos];
            last_one_off = (digit_pos < 10);
            break;
        case 'x':
            *(--dpos) = hex_digits[abs((int)(remaining % 16))];
            remaining = (PY_LONG_LONG) (remaining / 16);
            break;
        default:
            assert(0);
            break;
        }
    } while (unlikely(remaining != 0));
    if (last_one_off) {
        assert(*dpos == '0');
        dpos++;
    }
    length = end - dpos;
    ulength = length;
    prepend_sign = 0;
    if (!is_unsigned && value <= neg_one) {
        if (padding_char == ' ' || width <= length + 1) {
            *(--dpos) = '-';
            ++length;
        } else {
            prepend_sign = 1;
        }
        ++ulength;
    }
    if (width > ulength) {
        ulength = width;
    }
    if (ulength == 1) {
        return PyUnicode_FromOrdinal(*dpos);
    }
    return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char);
}

/* CIntToPyUnicode */
#ifdef _MSC_VER
    #ifndef _MSC_STDINT_H_
        #if _MSC_VER < 1300
           typedef unsigned short    uint16_t;
        #else
           typedef unsigned __int16  uint16_t;
        #endif
    #endif
#else
   #include <stdint.h>
#endif
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char) {
    char digits[sizeof(Py_ssize_t)*3+2];
    char *dpos, *end = digits + sizeof(Py_ssize_t)*3+2;
    const char *hex_digits = DIGITS_HEX;
    Py_ssize_t length, ulength;
    int prepend_sign, last_one_off;
    Py_ssize_t remaining;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const Py_ssize_t neg_one = (Py_ssize_t) -1, const_zero = (Py_ssize_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (format_char == 'X') {
        hex_digits += 16;
        format_char = 'x';
    }
    remaining = value;
    last_one_off = 0;
    dpos = end;
    do {
        int digit_pos;
        switch (format_char) {
        case 'o':
            digit_pos = abs((int)(remaining % (8*8)));
            remaining = (Py_ssize_t) (remaining / (8*8));
            dpos -= 2;
            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_8)[digit_pos];
            last_one_off = (digit_pos < 8);
            break;
        case 'd':
            digit_pos = abs((int)(remaining % (10*10)));
            remaining = (Py_ssize_t) (remaining / (10*10));
            dpos -= 2;
            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_10)[digit_pos];
            last_one_off = (digit_pos < 10);
            break;
        case 'x':
            *(--dpos) = hex_digits[abs((int)(remaining % 16))];
            remaining = (Py_ssize_t) (remaining / 16);
            break;
        default:
            assert(0);
            break;
        }
    } while (unlikely(remaining != 0));
    if (last_one_off) {
        assert(*dpos == '0');
        dpos++;
    }
    length = end - dpos;
    ulength = length;
    prepend_sign = 0;
    if (!is_unsigned && value <= neg_one) {
        if (padding_char == ' ' || width <= length + 1) {
            *(--dpos) = '-';
            ++length;
        } else {
            prepend_sign = 1;
        }
        ++ulength;
    }
    if (width > ulength) {
        ulength = width;
    }
    if (ulength == 1) {
        return PyUnicode_FromOrdinal(*dpos);
    }
    return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char);
}

/* PyUnicode_Substring */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring(
            PyObject* text, Py_ssize_t start, Py_ssize_t stop) {
    Py_ssize_t length;
    if (unlikely(__Pyx_PyUnicode_READY(text) == -1)) return NULL;
    length = __Pyx_PyUnicode_GET_LENGTH(text);
    if (start < 0) {
        start += length;
        if (start < 0)
            start = 0;
    }
    if (stop < 0)
        stop += length;
    else if (stop > length)
        stop = length;
    if (stop <= start)
        return __Pyx_NewRef(__pyx_empty_unicode);
#if CYTHON_PEP393_ENABLED
    return PyUnicode_FromKindAndData(PyUnicode_KIND(text),
        PyUnicode_1BYTE_DATA(text) + start*PyUnicode_KIND(text), stop-start);
#else
    return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(text)+start, stop-start);
#endif
}

/* CIntToPyUnicode */
#ifdef _MSC_VER
    #ifndef _MSC_STDINT_H_
        #if _MSC_VER < 1300
           typedef unsigned short    uint16_t;
        #else
           typedef unsigned __int16  uint16_t;
        #endif
    #endif
#else
   #include <stdint.h>
#endif
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char) {
    char digits[sizeof(int)*3+2];
    char *dpos, *end = digits + sizeof(int)*3+2;
    const char *hex_digits = DIGITS_HEX;
    Py_ssize_t length, ulength;
    int prepend_sign, last_one_off;
    int remaining;
#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 (format_char == 'X') {
        hex_digits += 16;
        format_char = 'x';
    }
    remaining = value;
    last_one_off = 0;
    dpos = end;
    do {
        int digit_pos;
        switch (format_char) {
        case 'o':
            digit_pos = abs((int)(remaining % (8*8)));
            remaining = (int) (remaining / (8*8));
            dpos -= 2;
            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_8)[digit_pos];
            last_one_off = (digit_pos < 8);
            break;
        case 'd':
            digit_pos = abs((int)(remaining % (10*10)));
            remaining = (int) (remaining / (10*10));
            dpos -= 2;
            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_10)[digit_pos];
            last_one_off = (digit_pos < 10);
            break;
        case 'x':
            *(--dpos) = hex_digits[abs((int)(remaining % 16))];
            remaining = (int) (remaining / 16);
            break;
        default:
            assert(0);
            break;
        }
    } while (unlikely(remaining != 0));
    if (last_one_off) {
        assert(*dpos == '0');
        dpos++;
    }
    length = end - dpos;
    ulength = length;
    prepend_sign = 0;
    if (!is_unsigned && value <= neg_one) {
        if (padding_char == ' ' || width <= length + 1) {
            *(--dpos) = '-';
            ++length;
        } else {
            prepend_sign = 1;
        }
        ++ulength;
    }
    if (width > ulength) {
        ulength = width;
    }
    if (ulength == 1) {
        return PyUnicode_FromOrdinal(*dpos);
    }
    return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char);
}

/* GetItemInt */
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (!j) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              CYTHON_NCP_UNUSED int wraparound,
                                                              CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyList_GET_SIZE(o);
    }
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
        PyObject *r = PyList_GET_ITEM(o, wrapped_i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              CYTHON_NCP_UNUSED int wraparound,
                                                              CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyTuple_GET_SIZE(o);
    }
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) {
        PyObject *r = PyTuple_GET_ITEM(o, wrapped_i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
                                                     CYTHON_NCP_UNUSED int wraparound,
                                                     CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
        if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
            PyObject *r = PyList_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    }
    else if (PyTuple_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
        if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) {
            PyObject *r = PyTuple_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    } else {
        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
        if (likely(m && m->sq_item)) {
            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
                Py_ssize_t l = m->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                        return NULL;
                    PyErr_Clear();
                }
            }
            return m->sq_item(o, i);
        }
    }
#else
    if (is_list || PySequence_Check(o)) {
        return PySequence_GetItem(o, i);
    }
#endif
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}

/* ObjectGetItem */
#if CYTHON_USE_TYPE_SLOTS
static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
    PyObject *runerr;
    Py_ssize_t key_value;
    PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
    if (unlikely(!(m && m->sq_item))) {
        PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name);
        return NULL;
    }
    key_value = __Pyx_PyIndex_AsSsize_t(index);
    if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) {
        return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1);
    }
    if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
        PyErr_Clear();
        PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name);
    }
    return NULL;
}
static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) {
    PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping;
    if (likely(m && m->mp_subscript)) {
        return m->mp_subscript(obj, key);
    }
    return __Pyx_PyObject_GetIndex(obj, key);
}
#endif

/* None */
static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) {
    PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname);
}

/* PyIntBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
    (void)inplace;
    (void)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 (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;
        double a = PyFloat_AS_DOUBLE(op1);
            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

/* 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 void __Pyx_copy_object_array(PyObject** 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_PyList_GetSlice(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    PyObject* dest;
    Py_ssize_t length = PyList_GET_SIZE(src);
    __Pyx_crop_slice(&start, &stop, &length);
    if (unlikely(length <= 0))
        return PyList_New(0);
    dest = PyList_New(length);
    if (unlikely(!dest))
        return NULL;
    __Pyx_copy_object_array(
        ((PyListObject*)src)->ob_item + start,
        ((PyListObject*)dest)->ob_item,
        length);
    return dest;
}
static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    PyObject* dest;
    Py_ssize_t length = PyTuple_GET_SIZE(src);
    __Pyx_crop_slice(&start, &stop, &length);
    if (unlikely(length <= 0))
        return PyTuple_New(0);
    dest = PyTuple_New(length);
    if (unlikely(!dest))
        return NULL;
    __Pyx_copy_object_array(
        ((PyTupleObject*)src)->ob_item + start,
        ((PyTupleObject*)dest)->ob_item,
        length);
    return dest;
}
#endif

/* PyObjectCall2Args */
static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
    PyObject *args, *result = NULL;
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(function)) {
        PyObject *args[2] = {arg1, arg2};
        return __Pyx_PyFunction_FastCall(function, args, 2);
    }
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(function)) {
        PyObject *args[2] = {arg1, arg2};
        return __Pyx_PyCFunction_FastCall(function, args, 2);
    }
    #endif
    args = PyTuple_New(2);
    if (unlikely(!args)) goto done;
    Py_INCREF(arg1);
    PyTuple_SET_ITEM(args, 0, arg1);
    Py_INCREF(arg2);
    PyTuple_SET_ITEM(args, 1, arg2);
    Py_INCREF(function);
    result = __Pyx_PyObject_Call(function, args, NULL);
    Py_DECREF(args);
    Py_DECREF(function);
done:
    return result;
}

/* PyIntBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
    (void)inplace;
    (void)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 (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;
        double a = PyFloat_AS_DOUBLE(op1);
            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

/* RaiseException */
#if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                        CYTHON_UNUSED PyObject *cause) {
    __Pyx_PyThreadState_declare
    Py_XINCREF(type);
    if (!value || value == Py_None)
        value = NULL;
    else
        Py_INCREF(value);
    if (!tb || tb == Py_None)
        tb = NULL;
    else {
        Py_INCREF(tb);
        if (!PyTraceBack_Check(tb)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: arg 3 must be a traceback or None");
            goto raise_error;
        }
    }
    if (PyType_Check(type)) {
#if CYTHON_COMPILING_IN_PYPY
        if (!value) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#endif
        PyErr_NormalizeException(&type, &value, &tb);
    } else {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        value = type;
        type = (PyObject*) Py_TYPE(type);
        Py_INCREF(type);
        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: exception class must be a subclass of BaseException");
            goto raise_error;
        }
    }
    __Pyx_PyThreadState_assign
    __Pyx_ErrRestore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}
#else
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    PyObject* owned_instance = NULL;
    if (tb == Py_None) {
        tb = 0;
    } else if (tb && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto bad;
    }
    if (value == Py_None)
        value = 0;
    if (PyExceptionInstance_Check(type)) {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto bad;
        }
        value = type;
        type = (PyObject*) Py_TYPE(value);
    } else if (PyExceptionClass_Check(type)) {
        PyObject *instance_class = NULL;
        if (value && PyExceptionInstance_Check(value)) {
            instance_class = (PyObject*) Py_TYPE(value);
            if (instance_class != type) {
                int is_subclass = PyObject_IsSubclass(instance_class, type);
                if (!is_subclass) {
                    instance_class = NULL;
                } else if (unlikely(is_subclass == -1)) {
                    goto bad;
                } else {
                    type = instance_class;
                }
            }
        }
        if (!instance_class) {
            PyObject *args;
            if (!value)
                args = PyTuple_New(0);
            else if (PyTuple_Check(value)) {
                Py_INCREF(value);
                args = value;
            } else
                args = PyTuple_Pack(1, value);
            if (!args)
                goto bad;
            owned_instance = PyObject_Call(type, args, NULL);
            Py_DECREF(args);
            if (!owned_instance)
                goto bad;
            value = owned_instance;
            if (!PyExceptionInstance_Check(value)) {
                PyErr_Format(PyExc_TypeError,
                             "calling %R should have returned an instance of "
                             "BaseException, not %R",
                             type, Py_TYPE(value));
                goto bad;
            }
        }
    } else {
        PyErr_SetString(PyExc_TypeError,
            "raise: exception class must be a subclass of BaseException");
        goto bad;
    }
    if (cause) {
        PyObject *fixed_cause;
        if (cause == Py_None) {
            fixed_cause = NULL;
        } else if (PyExceptionClass_Check(cause)) {
            fixed_cause = PyObject_CallObject(cause, NULL);
            if (fixed_cause == NULL)
                goto bad;
        } else if (PyExceptionInstance_Check(cause)) {
            fixed_cause = cause;
            Py_INCREF(fixed_cause);
        } else {
            PyErr_SetString(PyExc_TypeError,
                            "exception causes must derive from "
                            "BaseException");
            goto bad;
        }
        PyException_SetCause(value, fixed_cause);
    }
    PyErr_SetObject(type, value);
    if (tb) {
#if CYTHON_COMPILING_IN_PYPY
        PyObject *tmp_type, *tmp_value, *tmp_tb;
        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
        Py_INCREF(tb);
        PyErr_Restore(tmp_type, tmp_value, tb);
        Py_XDECREF(tmp_tb);
#else
        PyThreadState *tstate = __Pyx_PyThreadState_Current;
        PyObject* tmp_tb = tstate->curexc_traceback;
        if (tb != tmp_tb) {
            Py_INCREF(tb);
            tstate->curexc_traceback = tb;
            Py_XDECREF(tmp_tb);
        }
#endif
    }
bad:
    Py_XDECREF(owned_instance);
    return;
}
#endif

/* GetTopmostException */
#if CYTHON_USE_EXC_INFO_STACK
static _PyErr_StackItem *
__Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
{
    _PyErr_StackItem *exc_info = tstate->exc_info;
    while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) &&
           exc_info->previous_item != NULL)
    {
        exc_info = exc_info->previous_item;
    }
    return exc_info;
}
#endif

/* SaveResetException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
    *type = exc_info->exc_type;
    *value = exc_info->exc_value;
    *tb = exc_info->exc_traceback;
    #else
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    #endif
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
}
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = type;
    exc_info->exc_value = value;
    exc_info->exc_traceback = tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}
#endif

/* GetException */
#if CYTHON_FAST_THREAD_STATE
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
#endif
{
    PyObject *local_type, *local_value, *local_tb;
#if CYTHON_FAST_THREAD_STATE
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    local_type = tstate->curexc_type;
    local_value = tstate->curexc_value;
    local_tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
#else
    PyErr_Fetch(&local_type, &local_value, &local_tb);
#endif
    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
#if CYTHON_FAST_THREAD_STATE
    if (unlikely(tstate->curexc_type))
#else
    if (unlikely(PyErr_Occurred()))
#endif
        goto bad;
    #if PY_MAJOR_VERSION >= 3
    if (local_tb) {
        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
            goto bad;
    }
    #endif
    Py_XINCREF(local_tb);
    Py_XINCREF(local_type);
    Py_XINCREF(local_value);
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
#if CYTHON_FAST_THREAD_STATE
    #if CYTHON_USE_EXC_INFO_STACK
    {
        _PyErr_StackItem *exc_info = tstate->exc_info;
        tmp_type = exc_info->exc_type;
        tmp_value = exc_info->exc_value;
        tmp_tb = exc_info->exc_traceback;
        exc_info->exc_type = local_type;
        exc_info->exc_value = local_value;
        exc_info->exc_traceback = local_tb;
    }
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = local_type;
    tstate->exc_value = local_value;
    tstate->exc_traceback = local_tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#else
    PyErr_SetExcInfo(local_type, local_value, local_tb);
#endif
    return 0;
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
}

/* PyObjectFormat */
#if CYTHON_USE_UNICODE_WRITER
static PyObject* __Pyx_PyObject_Format(PyObject* obj, PyObject* format_spec) {
    int ret;
    _PyUnicodeWriter writer;
    if (likely(PyFloat_CheckExact(obj))) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x03040000
        _PyUnicodeWriter_Init(&writer, 0);
#else
        _PyUnicodeWriter_Init(&writer);
#endif
        ret = _PyFloat_FormatAdvancedWriter(
            &writer,
            obj,
            format_spec, 0, PyUnicode_GET_LENGTH(format_spec));
    } else if (likely(PyLong_CheckExact(obj))) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x03040000
        _PyUnicodeWriter_Init(&writer, 0);
#else
        _PyUnicodeWriter_Init(&writer);
#endif
        ret = _PyLong_FormatAdvancedWriter(
            &writer,
            obj,
            format_spec, 0, PyUnicode_GET_LENGTH(format_spec));
    } else {
        return PyObject_Format(obj, format_spec);
    }
    if (unlikely(ret == -1)) {
        _PyUnicodeWriter_Dealloc(&writer);
        return NULL;
    }
    return _PyUnicodeWriter_Finish(&writer);
}
#endif

/* SliceObject */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj,
        Py_ssize_t cstart, Py_ssize_t cstop,
        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
#if CYTHON_USE_TYPE_SLOTS
    PyMappingMethods* mp;
#if PY_MAJOR_VERSION < 3
    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
    if (likely(ms && ms->sq_slice)) {
        if (!has_cstart) {
            if (_py_start && (*_py_start != Py_None)) {
                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstart = 0;
        }
        if (!has_cstop) {
            if (_py_stop && (*_py_stop != Py_None)) {
                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstop = PY_SSIZE_T_MAX;
        }
        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
            Py_ssize_t l = ms->sq_length(obj);
            if (likely(l >= 0)) {
                if (cstop < 0) {
                    cstop += l;
                    if (cstop < 0) cstop = 0;
                }
                if (cstart < 0) {
                    cstart += l;
                    if (cstart < 0) cstart = 0;
                }
            } else {
                if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                    goto bad;
                PyErr_Clear();
            }
        }
        return ms->sq_slice(obj, cstart, cstop);
    }
#endif
    mp = Py_TYPE(obj)->tp_as_mapping;
    if (likely(mp && mp->mp_subscript))
#endif
    {
        PyObject* result;
        PyObject *py_slice, *py_start, *py_stop;
        if (_py_slice) {
            py_slice = *_py_slice;
        } else {
            PyObject* owned_start = NULL;
            PyObject* owned_stop = NULL;
            if (_py_start) {
                py_start = *_py_start;
            } else {
                if (has_cstart) {
                    owned_start = py_start = PyInt_FromSsize_t(cstart);
                    if (unlikely(!py_start)) goto bad;
                } else
                    py_start = Py_None;
            }
            if (_py_stop) {
                py_stop = *_py_stop;
            } else {
                if (has_cstop) {
                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
                    if (unlikely(!py_stop)) {
                        Py_XDECREF(owned_start);
                        goto bad;
                    }
                } else
                    py_stop = Py_None;
            }
            py_slice = PySlice_New(py_start, py_stop, Py_None);
            Py_XDECREF(owned_start);
            Py_XDECREF(owned_stop);
            if (unlikely(!py_slice)) goto bad;
        }
#if CYTHON_USE_TYPE_SLOTS
        result = mp->mp_subscript(obj, py_slice);
#else
        result = PyObject_GetItem(obj, py_slice);
#endif
        if (!_py_slice) {
            Py_DECREF(py_slice);
        }
        return result;
    }
    PyErr_Format(PyExc_TypeError,
        "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name);
bad:
    return NULL;
}

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

/* KeywordStringCheck */
static int __Pyx_CheckKeywordStrings(
    PyObject *kwdict,
    const char* function_name,
    int kw_allowed)
{
    PyObject* key = 0;
    Py_ssize_t pos = 0;
#if CYTHON_COMPILING_IN_PYPY
    if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0))
        goto invalid_keyword;
    return 1;
#else
    while (PyDict_Next(kwdict, &pos, &key, 0)) {
        #if PY_MAJOR_VERSION < 3
        if (unlikely(!PyString_Check(key)))
        #endif
            if (unlikely(!PyUnicode_Check(key)))
                goto invalid_keyword_type;
    }
    if ((!kw_allowed) && unlikely(key))
        goto invalid_keyword;
    return 1;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%.200s() keywords must be strings", function_name);
    return 0;
#endif
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
    return 0;
}

/* unicode_tailmatch */
static int __Pyx_PyUnicode_TailmatchTuple(PyObject* s, PyObject* substrings,
                                          Py_ssize_t start, Py_ssize_t end, int direction) {
    Py_ssize_t i, count = PyTuple_GET_SIZE(substrings);
    for (i = 0; i < count; i++) {
        Py_ssize_t result;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        result = PyUnicode_Tailmatch(s, PyTuple_GET_ITEM(substrings, i),
                                     start, end, direction);
#else
        PyObject* sub = PySequence_ITEM(substrings, i);
        if (unlikely(!sub)) return -1;
        result = PyUnicode_Tailmatch(s, sub, start, end, direction);
        Py_DECREF(sub);
#endif
        if (result) {
            return (int) result;
        }
    }
    return 0;
}
static int __Pyx_PyUnicode_Tailmatch(PyObject* s, PyObject* substr,
                                     Py_ssize_t start, Py_ssize_t end, int direction) {
    if (unlikely(PyTuple_Check(substr))) {
        return __Pyx_PyUnicode_TailmatchTuple(s, substr, start, end, direction);
    }
    return (int) PyUnicode_Tailmatch(s, substr, start, end, direction);
}

/* UnpackUnboundCMethod */
static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
    PyObject *method;
    method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
    if (unlikely(!method))
        return -1;
    target->method = method;
#if CYTHON_COMPILING_IN_CPYTHON
    #if PY_MAJOR_VERSION >= 3
    if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type)))
    #endif
    {
        PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
        target->func = descr->d_method->ml_meth;
        target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS);
    }
#endif
    return 0;
}

/* CallUnboundCMethod0 */
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
    PyObject *args, *result = NULL;
    if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
#if CYTHON_ASSUME_SAFE_MACROS
    args = PyTuple_New(1);
    if (unlikely(!args)) goto bad;
    Py_INCREF(self);
    PyTuple_SET_ITEM(args, 0, self);
#else
    args = PyTuple_Pack(1, self);
    if (unlikely(!args)) goto bad;
#endif
    result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
    Py_DECREF(args);
bad:
    return result;
}

/* 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) {
    PyErr_Format(PyExc_TypeError,
        "%.200s object is not an iterator", Py_TYPE(iterator)->tp_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 PY_VERSION_HEX >= 0x02070000
        if (unlikely(iternext == &_PyObject_NextNotImplemented))
            return NULL;
        #endif
#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);
}

/* SwapException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = *type;
    exc_info->exc_value = *value;
    exc_info->exc_traceback = *tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = *type;
    tstate->exc_value = *value;
    tstate->exc_traceback = *tb;
    #endif
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
    PyErr_SetExcInfo(*type, *value, *tb);
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#endif

/* PyIntBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_AndObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
    (void)inplace;
    (void)zerodivision_check;
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long a = PyInt_AS_LONG(op1);
            return PyInt_FromLong(a & b);
    }
    #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 (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_and(op1, op2);
            }
        }
                x = a & b;
            return PyLong_FromLong(x);
#ifdef HAVE_LONG_LONG
        long_long:
                llx = lla & llb;
            return PyLong_FromLongLong(llx);
#endif
        
        
    }
    #endif
    return (inplace ? PyNumber_InPlaceAnd : PyNumber_And)(op1, op2);
}
#endif

/* PyIntBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_RshiftObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
    (void)inplace;
    (void)zerodivision_check;
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long a = PyInt_AS_LONG(op1);
            return PyInt_FromLong(a >> b);
    }
    #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 (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_rshift(op1, op2);
            }
        }
                x = a >> b;
            return PyLong_FromLong(x);
#ifdef HAVE_LONG_LONG
        long_long:
                llx = lla >> llb;
            return PyLong_FromLongLong(llx);
#endif
        
        
    }
    #endif
    return (inplace ? PyNumber_InPlaceRshift : PyNumber_Rshift)(op1, op2);
}
#endif

/* decode_c_bytes */
static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
         const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
         const char* encoding, const char* errors,
         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
    if (unlikely((start < 0) | (stop < 0))) {
        if (start < 0) {
            start += length;
            if (start < 0)
                start = 0;
        }
        if (stop < 0)
            stop += length;
    }
    if (stop > length)
        stop = length;
    if (unlikely(stop <= start))
        return __Pyx_NewRef(__pyx_empty_unicode);
    length = stop - start;
    cstring += start;
    if (decode_func) {
        return decode_func(cstring, length, errors);
    } else {
        return PyUnicode_Decode(cstring, length, encoding, errors);
    }
}

/* RaiseTooManyValuesToUnpack */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
    PyErr_Format(PyExc_ValueError,
                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
}

/* RaiseNeedMoreValuesToUnpack */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
    PyErr_Format(PyExc_ValueError,
                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
                 index, (index == 1) ? "" : "s");
}

/* IterFinish */
static CYTHON_INLINE int __Pyx_IterFinish(void) {
#if CYTHON_FAST_THREAD_STATE
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    PyObject* exc_type = tstate->curexc_type;
    if (unlikely(exc_type)) {
        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) {
            PyObject *exc_value, *exc_tb;
            exc_value = tstate->curexc_value;
            exc_tb = tstate->curexc_traceback;
            tstate->curexc_type = 0;
            tstate->curexc_value = 0;
            tstate->curexc_traceback = 0;
            Py_DECREF(exc_type);
            Py_XDECREF(exc_value);
            Py_XDECREF(exc_tb);
            return 0;
        } else {
            return -1;
        }
    }
    return 0;
#else
    if (unlikely(PyErr_Occurred())) {
        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
            PyErr_Clear();
            return 0;
        } else {
            return -1;
        }
    }
    return 0;
#endif
}

/* UnpackItemEndCheck */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
    if (unlikely(retval)) {
        Py_DECREF(retval);
        __Pyx_RaiseTooManyValuesError(expected);
        return -1;
    } else {
        return __Pyx_IterFinish();
    }
    return 0;
}

/* DictGetItem */
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
    PyObject *value;
    value = PyDict_GetItemWithError(d, key);
    if (unlikely(!value)) {
        if (!PyErr_Occurred()) {
            if (unlikely(PyTuple_Check(key))) {
                PyObject* args = PyTuple_Pack(1, key);
                if (likely(args)) {
                    PyErr_SetObject(PyExc_KeyError, args);
                    Py_DECREF(args);
                }
            } else {
                PyErr_SetObject(PyExc_KeyError, key);
            }
        }
        return NULL;
    }
    Py_INCREF(value);
    return value;
}
#endif

/* FetchCommonType */
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
    PyObject* fake_module;
    PyTypeObject* cached_type = NULL;
    fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
    if (!fake_module) return NULL;
    Py_INCREF(fake_module);
    cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
    if (cached_type) {
        if (!PyType_Check((PyObject*)cached_type)) {
            PyErr_Format(PyExc_TypeError,
                "Shared Cython type %.200s is not a type object",
                type->tp_name);
            goto bad;
        }
        if (cached_type->tp_basicsize != type->tp_basicsize) {
            PyErr_Format(PyExc_TypeError,
                "Shared Cython type %.200s has the wrong size, try recompiling",
                type->tp_name);
            goto bad;
        }
    } else {
        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
        PyErr_Clear();
        if (PyType_Ready(type) < 0) goto bad;
        if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
            goto bad;
        Py_INCREF(type);
        cached_type = type;
    }
done:
    Py_DECREF(fake_module);
    return cached_type;
bad:
    Py_XDECREF(cached_type);
    cached_type = NULL;
    goto done;
}

/* CythonFunctionShared */
#include <structmember.h>
static PyObject *
__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
{
    if (unlikely(op->func_doc == NULL)) {
        if (op->func.m_ml->ml_doc) {
#if PY_MAJOR_VERSION >= 3
            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
#else
            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
#endif
            if (unlikely(op->func_doc == NULL))
                return NULL;
        } else {
            Py_INCREF(Py_None);
            return Py_None;
        }
    }
    Py_INCREF(op->func_doc);
    return op->func_doc;
}
static int
__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp = op->func_doc;
    if (value == NULL) {
        value = Py_None;
    }
    Py_INCREF(value);
    op->func_doc = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    if (unlikely(op->func_name == NULL)) {
#if PY_MAJOR_VERSION >= 3
        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
#else
        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
#endif
        if (unlikely(op->func_name == NULL))
            return NULL;
    }
    Py_INCREF(op->func_name);
    return op->func_name;
}
static int
__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    tmp = op->func_name;
    Py_INCREF(value);
    op->func_name = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(op->func_qualname);
    return op->func_qualname;
}
static int
__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    tmp = op->func_qualname;
    Py_INCREF(value);
    op->func_qualname = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
{
    PyObject *self;
    self = m->func_closure;
    if (self == NULL)
        self = Py_None;
    Py_INCREF(self);
    return self;
}
static PyObject *
__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    if (unlikely(op->func_dict == NULL)) {
        op->func_dict = PyDict_New();
        if (unlikely(op->func_dict == NULL))
            return NULL;
    }
    Py_INCREF(op->func_dict);
    return op->func_dict;
}
static int
__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
    if (unlikely(value == NULL)) {
        PyErr_SetString(PyExc_TypeError,
               "function's dictionary may not be deleted");
        return -1;
    }
    if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
               "setting function's dictionary to a non-dict");
        return -1;
    }
    tmp = op->func_dict;
    Py_INCREF(value);
    op->func_dict = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(op->func_globals);
    return op->func_globals;
}
static PyObject *
__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject *
__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    PyObject* result = (op->func_code) ? op->func_code : Py_None;
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
    int result = 0;
    PyObject *res = op->defaults_getter((PyObject *) op);
    if (unlikely(!res))
        return -1;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
    Py_INCREF(op->defaults_tuple);
    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
    Py_INCREF(op->defaults_kwdict);
    #else
    op->defaults_tuple = PySequence_ITEM(res, 0);
    if (unlikely(!op->defaults_tuple)) result = -1;
    else {
        op->defaults_kwdict = PySequence_ITEM(res, 1);
        if (unlikely(!op->defaults_kwdict)) result = -1;
    }
    #endif
    Py_DECREF(res);
    return result;
}
static int
__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value) {
        value = Py_None;
    } else if (value != Py_None && !PyTuple_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__defaults__ must be set to a tuple object");
        return -1;
    }
    Py_INCREF(value);
    tmp = op->defaults_tuple;
    op->defaults_tuple = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->defaults_tuple;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
            result = op->defaults_tuple;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value) {
        value = Py_None;
    } else if (value != Py_None && !PyDict_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__kwdefaults__ must be set to a dict object");
        return -1;
    }
    Py_INCREF(value);
    tmp = op->defaults_kwdict;
    op->defaults_kwdict = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->defaults_kwdict;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
            result = op->defaults_kwdict;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value || value == Py_None) {
        value = NULL;
    } else if (!PyDict_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__annotations__ must be set to a dict object");
        return -1;
    }
    Py_XINCREF(value);
    tmp = op->func_annotations;
    op->func_annotations = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->func_annotations;
    if (unlikely(!result)) {
        result = PyDict_New();
        if (unlikely(!result)) return NULL;
        op->func_annotations = result;
    }
    Py_INCREF(result);
    return result;
}
static PyGetSetDef __pyx_CyFunction_getsets[] = {
    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
    {0, 0, 0, 0, 0}
};
static PyMemberDef __pyx_CyFunction_members[] = {
    {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0},
    {0, 0, 0,  0, 0}
};
static PyObject *
__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
{
#if PY_MAJOR_VERSION >= 3
    Py_INCREF(m->func_qualname);
    return m->func_qualname;
#else
    return PyString_FromString(m->func.m_ml->ml_name);
#endif
}
static PyMethodDef __pyx_CyFunction_methods[] = {
    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
    {0, 0, 0, 0}
};
#if PY_VERSION_HEX < 0x030500A0
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
#else
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist)
#endif
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname,
                                       PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
    if (unlikely(op == NULL))
        return NULL;
    op->flags = flags;
    __Pyx_CyFunction_weakreflist(op) = NULL;
    op->func.m_ml = ml;
    op->func.m_self = (PyObject *) op;
    Py_XINCREF(closure);
    op->func_closure = closure;
    Py_XINCREF(module);
    op->func.m_module = module;
    op->func_dict = NULL;
    op->func_name = NULL;
    Py_INCREF(qualname);
    op->func_qualname = qualname;
    op->func_doc = NULL;
    op->func_classobj = NULL;
    op->func_globals = globals;
    Py_INCREF(op->func_globals);
    Py_XINCREF(code);
    op->func_code = code;
    op->defaults_pyobjects = 0;
    op->defaults_size = 0;
    op->defaults = NULL;
    op->defaults_tuple = NULL;
    op->defaults_kwdict = NULL;
    op->defaults_getter = NULL;
    op->func_annotations = NULL;
    return (PyObject *) op;
}
static int
__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
{
    Py_CLEAR(m->func_closure);
    Py_CLEAR(m->func.m_module);
    Py_CLEAR(m->func_dict);
    Py_CLEAR(m->func_name);
    Py_CLEAR(m->func_qualname);
    Py_CLEAR(m->func_doc);
    Py_CLEAR(m->func_globals);
    Py_CLEAR(m->func_code);
    Py_CLEAR(m->func_classobj);
    Py_CLEAR(m->defaults_tuple);
    Py_CLEAR(m->defaults_kwdict);
    Py_CLEAR(m->func_annotations);
    if (m->defaults) {
        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
        int i;
        for (i = 0; i < m->defaults_pyobjects; i++)
            Py_XDECREF(pydefaults[i]);
        PyObject_Free(m->defaults);
        m->defaults = NULL;
    }
    return 0;
}
static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    if (__Pyx_CyFunction_weakreflist(m) != NULL)
        PyObject_ClearWeakRefs((PyObject *) m);
    __Pyx_CyFunction_clear(m);
    PyObject_GC_Del(m);
}
static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    PyObject_GC_UnTrack(m);
    __Pyx__CyFunction_dealloc(m);
}
static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
{
    Py_VISIT(m->func_closure);
    Py_VISIT(m->func.m_module);
    Py_VISIT(m->func_dict);
    Py_VISIT(m->func_name);
    Py_VISIT(m->func_qualname);
    Py_VISIT(m->func_doc);
    Py_VISIT(m->func_globals);
    Py_VISIT(m->func_code);
    Py_VISIT(m->func_classobj);
    Py_VISIT(m->defaults_tuple);
    Py_VISIT(m->defaults_kwdict);
    if (m->defaults) {
        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
        int i;
        for (i = 0; i < m->defaults_pyobjects; i++)
            Py_VISIT(pydefaults[i]);
    }
    return 0;
}
static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
{
#if PY_MAJOR_VERSION < 3
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
        Py_INCREF(func);
        return func;
    }
    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
        if (type == NULL)
            type = (PyObject *)(Py_TYPE(obj));
        return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
    }
    if (obj == Py_None)
        obj = NULL;
#endif
    return __Pyx_PyMethod_New(func, obj, type);
}
static PyObject*
__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
{
#if PY_MAJOR_VERSION >= 3
    return PyUnicode_FromFormat("<cyfunction %U at %p>",
                                op->func_qualname, (void *)op);
#else
    return PyString_FromFormat("<cyfunction %s at %p>",
                               PyString_AsString(op->func_qualname), (void *)op);
#endif
}
static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
    PyCFunctionObject* f = (PyCFunctionObject*)func;
    PyCFunction meth = f->m_ml->ml_meth;
    Py_ssize_t size;
    switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
    case METH_VARARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0))
            return (*meth)(self, arg);
        break;
    case METH_VARARGS | METH_KEYWORDS:
        return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw);
    case METH_NOARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
            size = PyTuple_GET_SIZE(arg);
            if (likely(size == 0))
                return (*meth)(self, NULL);
            PyErr_Format(PyExc_TypeError,
                "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
                f->m_ml->ml_name, size);
            return NULL;
        }
        break;
    case METH_O:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
            size = PyTuple_GET_SIZE(arg);
            if (likely(size == 1)) {
                PyObject *result, *arg0;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                arg0 = PyTuple_GET_ITEM(arg, 0);
                #else
                arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
                #endif
                result = (*meth)(self, arg0);
                #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
                Py_DECREF(arg0);
                #endif
                return result;
            }
            PyErr_Format(PyExc_TypeError,
                "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
                f->m_ml->ml_name, size);
            return NULL;
        }
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
                        "longer supported!");
        return NULL;
    }
    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
                 f->m_ml->ml_name);
    return NULL;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw);
}
static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
    PyObject *result;
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        Py_ssize_t argc;
        PyObject *new_args;
        PyObject *self;
        argc = PyTuple_GET_SIZE(args);
        new_args = PyTuple_GetSlice(args, 1, argc);
        if (unlikely(!new_args))
            return NULL;
        self = PyTuple_GetItem(args, 0);
        if (unlikely(!self)) {
            Py_DECREF(new_args);
            return NULL;
        }
        result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
        Py_DECREF(new_args);
    } else {
        result = __Pyx_CyFunction_Call(func, args, kw);
    }
    return result;
}
static PyTypeObject __pyx_CyFunctionType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
    (destructor) __Pyx_CyFunction_dealloc,
    0,
    0,
    0,
#if PY_MAJOR_VERSION < 3
    0,
#else
    0,
#endif
    (reprfunc) __Pyx_CyFunction_repr,
    0,
    0,
    0,
    0,
    __Pyx_CyFunction_CallAsMethod,
    0,
    0,
    0,
    0,
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
    0,
    (traverseproc) __Pyx_CyFunction_traverse,
    (inquiry) __Pyx_CyFunction_clear,
    0,
#if PY_VERSION_HEX < 0x030500A0
    offsetof(__pyx_CyFunctionObject, func_weakreflist),
#else
    offsetof(PyCFunctionObject, m_weakreflist),
#endif
    0,
    0,
    __pyx_CyFunction_methods,
    __pyx_CyFunction_members,
    __pyx_CyFunction_getsets,
    0,
    0,
    __Pyx_CyFunction_descr_get,
    0,
    offsetof(__pyx_CyFunctionObject, func_dict),
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
#if PY_VERSION_HEX >= 0x030400a1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
    0,
#endif
};
static int __pyx_CyFunction_init(void) {
    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
    if (unlikely(__pyx_CyFunctionType == NULL)) {
        return -1;
    }
    return 0;
}
static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults = PyObject_Malloc(size);
    if (unlikely(!m->defaults))
        return PyErr_NoMemory();
    memset(m->defaults, 0, size);
    m->defaults_pyobjects = pyobjects;
    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;
}

/* py_dict_keys */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d) {
    if (PY_MAJOR_VERSION >= 3)
        return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_keys, d);
    else
        return PyDict_Keys(d);
}

/* ArgTypeTest */
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
{
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    else if (exact) {
        #if PY_MAJOR_VERSION == 2
        if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
        #endif
    }
    else {
        if (likely(__Pyx_TypeCheck(obj, type))) return 1;
    }
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
        name, type->tp_name, Py_TYPE(obj)->tp_name);
    return 0;
}

/* SetItemInt */
static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
    int r;
    if (!j) return -1;
    r = PyObject_SetItem(o, j, v);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list,
                                               CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
        if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) {
            PyObject* old = PyList_GET_ITEM(o, n);
            Py_INCREF(v);
            PyList_SET_ITEM(o, n, v);
            Py_DECREF(old);
            return 1;
        }
    } else {
        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
        if (likely(m && m->sq_ass_item)) {
            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
                Py_ssize_t l = m->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                        return -1;
                    PyErr_Clear();
                }
            }
            return m->sq_ass_item(o, i, v);
        }
    }
#else
#if CYTHON_COMPILING_IN_PYPY
    if (is_list || (PySequence_Check(o) && !PyDict_Check(o)))
#else
    if (is_list || PySequence_Check(o))
#endif
    {
        return PySequence_SetItem(o, i, v);
    }
#endif
    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
}

/* PyObjectGetMethod */
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
    PyObject *attr;
#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
    PyTypeObject *tp = Py_TYPE(obj);
    PyObject *descr;
    descrgetfunc f = NULL;
    PyObject **dictptr, *dict;
    int meth_found = 0;
    assert (*method == NULL);
    if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
        attr = __Pyx_PyObject_GetAttrStr(obj, name);
        goto try_unpack;
    }
    if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
        return 0;
    }
    descr = _PyType_Lookup(tp, name);
    if (likely(descr != NULL)) {
        Py_INCREF(descr);
#if PY_MAJOR_VERSION >= 3
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type)))
        #endif
#else
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr)))
        #endif
#endif
        {
            meth_found = 1;
        } else {
            f = Py_TYPE(descr)->tp_descr_get;
            if (f != NULL && PyDescr_IsData(descr)) {
                attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
                Py_DECREF(descr);
                goto try_unpack;
            }
        }
    }
    dictptr = _PyObject_GetDictPtr(obj);
    if (dictptr != NULL && (dict = *dictptr) != NULL) {
        Py_INCREF(dict);
        attr = __Pyx_PyDict_GetItemStr(dict, name);
        if (attr != NULL) {
            Py_INCREF(attr);
            Py_DECREF(dict);
            Py_XDECREF(descr);
            goto try_unpack;
        }
        Py_DECREF(dict);
    }
    if (meth_found) {
        *method = descr;
        return 1;
    }
    if (f != NULL) {
        attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
        Py_DECREF(descr);
        goto try_unpack;
    }
    if (descr != NULL) {
        *method = descr;
        return 0;
    }
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'%.50s' object has no attribute '%U'",
                 tp->tp_name, name);
#else
                 "'%.50s' object has no attribute '%.400s'",
                 tp->tp_name, PyString_AS_STRING(name));
#endif
    return 0;
#else
    attr = __Pyx_PyObject_GetAttrStr(obj, name);
    goto try_unpack;
#endif
try_unpack:
#if CYTHON_UNPACK_METHODS
    if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
        PyObject *function = PyMethod_GET_FUNCTION(attr);
        Py_INCREF(function);
        Py_DECREF(attr);
        *method = function;
        return 1;
    }
#endif
    *method = attr;
    return 0;
}

/* PyObjectCallMethod0 */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
    PyObject *method = NULL, *result = NULL;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_CallOneArg(method, obj);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) goto bad;
    result = __Pyx_PyObject_CallNoArg(method);
    Py_DECREF(method);
bad:
    return result;
}

/* RaiseNoneIterError */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
}

/* UnpackTupleError */
static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
    if (t == Py_None) {
      __Pyx_RaiseNoneNotIterableError();
    } else if (PyTuple_GET_SIZE(t) < index) {
      __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
    } else {
      __Pyx_RaiseTooManyValuesError(index);
    }
}

/* UnpackTuple2 */
static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
        PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) {
    PyObject *value1 = NULL, *value2 = NULL;
#if CYTHON_COMPILING_IN_PYPY
    value1 = PySequence_ITEM(tuple, 0);  if (unlikely(!value1)) goto bad;
    value2 = PySequence_ITEM(tuple, 1);  if (unlikely(!value2)) goto bad;
#else
    value1 = PyTuple_GET_ITEM(tuple, 0);  Py_INCREF(value1);
    value2 = PyTuple_GET_ITEM(tuple, 1);  Py_INCREF(value2);
#endif
    if (decref_tuple) {
        Py_DECREF(tuple);
    }
    *pvalue1 = value1;
    *pvalue2 = value2;
    return 0;
#if CYTHON_COMPILING_IN_PYPY
bad:
    Py_XDECREF(value1);
    Py_XDECREF(value2);
    if (decref_tuple) { Py_XDECREF(tuple); }
    return -1;
#endif
}
static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
                                       int has_known_size, int decref_tuple) {
    Py_ssize_t index;
    PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
    iternextfunc iternext;
    iter = PyObject_GetIter(tuple);
    if (unlikely(!iter)) goto bad;
    if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
    iternext = Py_TYPE(iter)->tp_iternext;
    value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
    value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
    if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
    Py_DECREF(iter);
    *pvalue1 = value1;
    *pvalue2 = value2;
    return 0;
unpacking_failed:
    if (!has_known_size && __Pyx_IterFinish() == 0)
        __Pyx_RaiseNeedMoreValuesError(index);
bad:
    Py_XDECREF(iter);
    Py_XDECREF(value1);
    Py_XDECREF(value2);
    if (decref_tuple) { Py_XDECREF(tuple); }
    return -1;
}

/* dict_iter */
static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name,
                                                   Py_ssize_t* p_orig_length, int* p_source_is_dict) {
    is_dict = is_dict || likely(PyDict_CheckExact(iterable));
    *p_source_is_dict = is_dict;
    if (is_dict) {
#if !CYTHON_COMPILING_IN_PYPY
        *p_orig_length = PyDict_Size(iterable);
        Py_INCREF(iterable);
        return iterable;
#elif PY_MAJOR_VERSION >= 3
        static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL;
        PyObject **pp = NULL;
        if (method_name) {
            const char *name = PyUnicode_AsUTF8(method_name);
            if (strcmp(name, "iteritems") == 0) pp = &py_items;
            else if (strcmp(name, "iterkeys") == 0) pp = &py_keys;
            else if (strcmp(name, "itervalues") == 0) pp = &py_values;
            if (pp) {
                if (!*pp) {
                    *pp = PyUnicode_FromString(name + 4);
                    if (!*pp)
                        return NULL;
                }
                method_name = *pp;
            }
        }
#endif
    }
    *p_orig_length = 0;
    if (method_name) {
        PyObject* iter;
        iterable = __Pyx_PyObject_CallMethod0(iterable, method_name);
        if (!iterable)
            return NULL;
#if !CYTHON_COMPILING_IN_PYPY
        if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable))
            return iterable;
#endif
        iter = PyObject_GetIter(iterable);
        Py_DECREF(iterable);
        return iter;
    }
    return PyObject_GetIter(iterable);
}
static CYTHON_INLINE int __Pyx_dict_iter_next(
        PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos,
        PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) {
    PyObject* next_item;
#if !CYTHON_COMPILING_IN_PYPY
    if (source_is_dict) {
        PyObject *key, *value;
        if (unlikely(orig_length != PyDict_Size(iter_obj))) {
            PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration");
            return -1;
        }
        if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) {
            return 0;
        }
        if (pitem) {
            PyObject* tuple = PyTuple_New(2);
            if (unlikely(!tuple)) {
                return -1;
            }
            Py_INCREF(key);
            Py_INCREF(value);
            PyTuple_SET_ITEM(tuple, 0, key);
            PyTuple_SET_ITEM(tuple, 1, value);
            *pitem = tuple;
        } else {
            if (pkey) {
                Py_INCREF(key);
                *pkey = key;
            }
            if (pvalue) {
                Py_INCREF(value);
                *pvalue = value;
            }
        }
        return 1;
    } else if (PyTuple_CheckExact(iter_obj)) {
        Py_ssize_t pos = *ppos;
        if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0;
        *ppos = pos + 1;
        next_item = PyTuple_GET_ITEM(iter_obj, pos);
        Py_INCREF(next_item);
    } else if (PyList_CheckExact(iter_obj)) {
        Py_ssize_t pos = *ppos;
        if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0;
        *ppos = pos + 1;
        next_item = PyList_GET_ITEM(iter_obj, pos);
        Py_INCREF(next_item);
    } else
#endif
    {
        next_item = PyIter_Next(iter_obj);
        if (unlikely(!next_item)) {
            return __Pyx_IterFinish();
        }
    }
    if (pitem) {
        *pitem = next_item;
    } else if (pkey && pvalue) {
        if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1))
            return -1;
    } else if (pkey) {
        *pkey = next_item;
    } else {
        *pvalue = next_item;
    }
    return 1;
}

/* UnicodeAsUCS4 */
static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject* x) {
   Py_ssize_t length;
   #if CYTHON_PEP393_ENABLED
   length = PyUnicode_GET_LENGTH(x);
   if (likely(length == 1)) {
       return PyUnicode_READ_CHAR(x, 0);
   }
   #else
   length = PyUnicode_GET_SIZE(x);
   if (likely(length == 1)) {
       return PyUnicode_AS_UNICODE(x)[0];
   }
   #if Py_UNICODE_SIZE == 2
   else if (PyUnicode_GET_SIZE(x) == 2) {
       Py_UCS4 high_val = PyUnicode_AS_UNICODE(x)[0];
       if (high_val >= 0xD800 && high_val <= 0xDBFF) {
           Py_UCS4 low_val = PyUnicode_AS_UNICODE(x)[1];
           if (low_val >= 0xDC00 && low_val <= 0xDFFF) {
               return 0x10000 + (((high_val & ((1<<10)-1)) << 10) | (low_val & ((1<<10)-1)));
           }
       }
   }
   #endif
   #endif
   PyErr_Format(PyExc_ValueError,
                "only single character unicode strings can be converted to Py_UCS4, "
                "got length %" CYTHON_FORMAT_SSIZE_T "d", length);
   return (Py_UCS4)-1;
}

/* object_ord */
static long __Pyx__PyObject_Ord(PyObject* c) {
    Py_ssize_t size;
    if (PyBytes_Check(c)) {
        size = PyBytes_GET_SIZE(c);
        if (likely(size == 1)) {
            return (unsigned char) PyBytes_AS_STRING(c)[0];
        }
#if PY_MAJOR_VERSION < 3
    } else if (PyUnicode_Check(c)) {
        return (long)__Pyx_PyUnicode_AsPy_UCS4(c);
#endif
#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
    } else if (PyByteArray_Check(c)) {
        size = PyByteArray_GET_SIZE(c);
        if (likely(size == 1)) {
            return (unsigned char) PyByteArray_AS_STRING(c)[0];
        }
#endif
    } else {
        PyErr_Format(PyExc_TypeError,
            "ord() expected string of length 1, but %.200s found", Py_TYPE(c)->tp_name);
        return (long)(Py_UCS4)-1;
    }
    PyErr_Format(PyExc_TypeError,
        "ord() expected a character, but string of length %zd found", size);
    return (long)(Py_UCS4)-1;
}

/* unicode_iter */
static CYTHON_INLINE int __Pyx_init_unicode_iteration(
    PyObject* ustring, Py_ssize_t *length, void** data, int *kind) {
#if CYTHON_PEP393_ENABLED
    if (unlikely(__Pyx_PyUnicode_READY(ustring) < 0)) return -1;
    *kind   = PyUnicode_KIND(ustring);
    *length = PyUnicode_GET_LENGTH(ustring);
    *data   = PyUnicode_DATA(ustring);
#else
    *kind   = 0;
    *length = PyUnicode_GET_SIZE(ustring);
    *data   = (void*)PyUnicode_AS_UNICODE(ustring);
#endif
    return 0;
}

/* GetItemIntUnicode */
static CYTHON_INLINE Py_UCS4 __Pyx_GetItemInt_Unicode_Fast(PyObject* ustring, Py_ssize_t i,
                                                           int wraparound, int boundscheck) {
    Py_ssize_t length;
    if (unlikely(__Pyx_PyUnicode_READY(ustring) < 0)) return (Py_UCS4)-1;
    if (wraparound | boundscheck) {
        length = __Pyx_PyUnicode_GET_LENGTH(ustring);
        if (wraparound & unlikely(i < 0)) i += length;
        if ((!boundscheck) || likely(__Pyx_is_valid_index(i, length))) {
            return __Pyx_PyUnicode_READ_CHAR(ustring, i);
        } else {
            PyErr_SetString(PyExc_IndexError, "string index out of range");
            return (Py_UCS4)-1;
        }
    } else {
        return __Pyx_PyUnicode_READ_CHAR(ustring, i);
    }
}

/* Import */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    #if PY_MAJOR_VERSION < 3
    PyObject *py_import;
    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
    if (!py_import)
        goto bad;
    #endif
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    {
        #if PY_MAJOR_VERSION >= 3
        if (level == -1) {
            if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) {
                module = PyImport_ImportModuleLevelObject(
                    name, global_dict, empty_dict, list, 1);
                if (!module) {
                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
                        goto bad;
                    PyErr_Clear();
                }
            }
            level = 0;
        }
        #endif
        if (!module) {
            #if PY_MAJOR_VERSION < 3
            PyObject *py_level = PyInt_FromLong(level);
            if (!py_level)
                goto bad;
            module = PyObject_CallFunctionObjArgs(py_import,
                name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);
            Py_DECREF(py_level);
            #else
            module = PyImport_ImportModuleLevelObject(
                name, global_dict, empty_dict, list, level);
            #endif
        }
    }
bad:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(py_import);
    #endif
    Py_XDECREF(empty_list);
    Py_XDECREF(empty_dict);
    return module;
}

/* ImportFrom */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Format(PyExc_ImportError,
        #if PY_MAJOR_VERSION < 3
            "cannot import name %.230s", PyString_AS_STRING(name));
        #else
            "cannot import name %S", name);
        #endif
    }
    return value;
}

/* HasAttr */
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
    PyObject *r;
    if (unlikely(!__Pyx_PyBaseString_Check(n))) {
        PyErr_SetString(PyExc_TypeError,
                        "hasattr(): attribute name must be string");
        return -1;
    }
    r = __Pyx_GetAttr(o, n);
    if (unlikely(!r)) {
        PyErr_Clear();
        return 0;
    } else {
        Py_DECREF(r);
        return 1;
    }
}

/* CallNextTpTraverse */
static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) {
    PyTypeObject* type = Py_TYPE(obj);
    while (type && type->tp_traverse != current_tp_traverse)
        type = type->tp_base;
    while (type && type->tp_traverse == current_tp_traverse)
        type = type->tp_base;
    if (type && type->tp_traverse)
        return type->tp_traverse(obj, v, a);
    return 0;
}

/* CallNextTpClear */
static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
    PyTypeObject* type = Py_TYPE(obj);
    while (type && type->tp_clear != current_tp_clear)
        type = type->tp_base;
    while (type && type->tp_clear == current_tp_clear)
        type = type->tp_base;
    if (type && type->tp_clear)
        type->tp_clear(obj);
}

/* PyObject_GenericGetAttrNoDict */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) {
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'%.50s' object has no attribute '%U'",
                 tp->tp_name, attr_name);
#else
                 "'%.50s' object has no attribute '%.400s'",
                 tp->tp_name, PyString_AS_STRING(attr_name));
#endif
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) {
    PyObject *descr;
    PyTypeObject *tp = Py_TYPE(obj);
    if (unlikely(!PyString_Check(attr_name))) {
        return PyObject_GenericGetAttr(obj, attr_name);
    }
    assert(!tp->tp_dictoffset);
    descr = _PyType_Lookup(tp, attr_name);
    if (unlikely(!descr)) {
        return __Pyx_RaiseGenericGetAttributeError(tp, attr_name);
    }
    Py_INCREF(descr);
    #if PY_MAJOR_VERSION < 3
    if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)))
    #endif
    {
        descrgetfunc f = Py_TYPE(descr)->tp_descr_get;
        if (unlikely(f)) {
            PyObject *res = f(descr, obj, (PyObject *)tp);
            Py_DECREF(descr);
            return res;
        }
    }
    return descr;
}
#endif

/* PyObject_GenericGetAttr */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) {
    if (unlikely(Py_TYPE(obj)->tp_dictoffset)) {
        return PyObject_GenericGetAttr(obj, attr_name);
    }
    return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name);
}
#endif

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

/* SetupReduce */
static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
  int ret;
  PyObject *name_attr;
  name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2);
  if (likely(name_attr)) {
      ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
  } else {
      ret = -1;
  }
  if (unlikely(ret < 0)) {
      PyErr_Clear();
      ret = 0;
  }
  Py_XDECREF(name_attr);
  return ret;
}
static int __Pyx_setup_reduce(PyObject* type_obj) {
    int ret = 0;
    PyObject *object_reduce = NULL;
    PyObject *object_reduce_ex = NULL;
    PyObject *reduce = NULL;
    PyObject *reduce_ex = NULL;
    PyObject *reduce_cython = NULL;
    PyObject *setstate = NULL;
    PyObject *setstate_cython = NULL;
#if CYTHON_USE_PYTYPE_LOOKUP
    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
#else
    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
#endif
#if CYTHON_USE_PYTYPE_LOOKUP
    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#else
    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#endif
    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD;
    if (reduce_ex == object_reduce_ex) {
#if CYTHON_USE_PYTYPE_LOOKUP
        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
#else
        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
#endif
        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD;
        if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
            reduce_cython = __Pyx_PyObject_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_GetAttrStr(type_obj, __pyx_n_s_setstate);
            if (!setstate) PyErr_Clear();
            if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
                setstate_cython = __Pyx_PyObject_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())
        PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
    ret = -1;
__PYX_GOOD:
#if !CYTHON_USE_PYTYPE_LOOKUP
    Py_XDECREF(object_reduce);
    Py_XDECREF(object_reduce_ex);
#endif
    Py_XDECREF(reduce);
    Py_XDECREF(reduce_ex);
    Py_XDECREF(reduce_cython);
    Py_XDECREF(setstate);
    Py_XDECREF(setstate_cython);
    return ret;
}

/* SetVTable */
static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
    if (!ob)
        goto bad;
    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

/* TypeImport */
#ifndef __PYX_HAVE_RT_ImportType
#define __PYX_HAVE_RT_ImportType
static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name,
    size_t size, enum __Pyx_ImportType_CheckSize check_size)
{
    PyObject *result = 0;
    char warning[200];
    Py_ssize_t basicsize;
#ifdef Py_LIMITED_API
    PyObject *py_basicsize;
#endif
    result = PyObject_GetAttrString(module, class_name);
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError,
            "%.200s.%.200s is not a type object",
            module_name, class_name);
        goto bad;
    }
#ifndef Py_LIMITED_API
    basicsize = ((PyTypeObject *)result)->tp_basicsize;
#else
    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
    if (!py_basicsize)
        goto bad;
    basicsize = PyLong_AsSsize_t(py_basicsize);
    Py_DECREF(py_basicsize);
    py_basicsize = 0;
    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
#endif
    if ((size_t)basicsize < size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        goto bad;
    }
    if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        goto bad;
    }
    else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) {
        PyOS_snprintf(warning, sizeof(warning),
            "%s.%s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(result);
    return NULL;
}
#endif

/* 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_GetAttrStr(metaclass, __pyx_n_s_prepare_3);
        if (prep) {
            PyObject *pargs = PyTuple_Pack(2, name, bases);
            if (unlikely(!pargs)) {
                Py_DECREF(prep);
                return NULL;
            }
            ns = PyObject_Call(prep, pargs, mkw);
            Py_DECREF(prep);
            Py_DECREF(pargs);
        } else {
            if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
                return NULL;
            PyErr_Clear();
            ns = PyDict_New();
        }
    } else {
        ns = PyDict_New();
    }
    if (unlikely(!ns))
        return NULL;
    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad;
    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
    return ns;
bad:
    Py_DECREF(ns);
    return NULL;
}
static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
                                      PyObject *dict, PyObject *mkw,
                                      int calculate_metaclass, int allow_py2_metaclass) {
    PyObject *result, *margs;
    PyObject *owned_metaclass = NULL;
    if (allow_py2_metaclass) {
        owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass);
        if (owned_metaclass) {
            metaclass = owned_metaclass;
        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
            PyErr_Clear();
        } else {
            return NULL;
        }
    }
    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
        Py_XDECREF(owned_metaclass);
        if (unlikely(!metaclass))
            return NULL;
        owned_metaclass = metaclass;
    }
    margs = PyTuple_Pack(3, name, bases, dict);
    if (unlikely(!margs)) {
        result = NULL;
    } else {
        result = PyObject_Call(metaclass, margs, mkw);
        Py_DECREF(margs);
    }
    Py_XDECREF(owned_metaclass);
    return result;
}

/* 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_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
      if (use_cline_obj) {
        use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
        Py_DECREF(use_cline_obj);
      } else {
        PyErr_Clear();
        use_cline = NULL;
      }
    }
    if (!use_cline) {
        c_line = 0;
        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
    }
    else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
        c_line = 0;
    }
    __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
    return c_line;
}
#endif

/* CodeObjectCache */
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
    int start = 0, mid = 0, end = count - 1;
    if (end >= 0 && code_line > entries[end].code_line) {
        return count;
    }
    while (start < end) {
        mid = start + (end - start) / 2;
        if (code_line < entries[mid].code_line) {
            end = mid;
        } else if (code_line > entries[mid].code_line) {
             start = mid + 1;
        } else {
            return mid;
        }
    }
    if (code_line <= entries[mid].code_line) {
        return mid;
    } else {
        return mid + 1;
    }
}
static PyCodeObject *__pyx_find_code_object(int code_line) {
    PyCodeObject* code_object;
    int pos;
    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
        return NULL;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
        return NULL;
    }
    code_object = __pyx_code_cache.entries[pos].code_object;
    Py_INCREF(code_object);
    return code_object;
}
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
    int pos, i;
    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
    if (unlikely(!code_line)) {
        return;
    }
    if (unlikely(!entries)) {
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
        if (likely(entries)) {
            __pyx_code_cache.entries = entries;
            __pyx_code_cache.max_count = 64;
            __pyx_code_cache.count = 1;
            entries[0].code_line = code_line;
            entries[0].code_object = code_object;
            Py_INCREF(code_object);
        }
        return;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
        PyCodeObject* tmp = entries[pos].code_object;
        entries[pos].code_object = code_object;
        Py_DECREF(tmp);
        return;
    }
    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
        int new_max = __pyx_code_cache.max_count + 64;
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
            __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
        if (unlikely(!entries)) {
            return;
        }
        __pyx_code_cache.entries = entries;
        __pyx_code_cache.max_count = new_max;
    }
    for (i=__pyx_code_cache.count; i>pos; i--) {
        entries[i] = entries[i-1];
    }
    entries[pos].code_line = code_line;
    entries[pos].code_object = code_object;
    __pyx_code_cache.count++;
    Py_INCREF(code_object);
}

/* AddTraceback */
#include "compile.h"
#include "frameobject.h"
#include "traceback.h"
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
            const char *funcname, int c_line,
            int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    #if PY_MAJOR_VERSION < 3
    py_srcfile = PyString_FromString(filename);
    #else
    py_srcfile = PyUnicode_FromString(filename);
    #endif
    if (!py_srcfile) goto bad;
    if (c_line) {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #else
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #endif
    }
    else {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromString(funcname);
        #else
        py_funcname = PyUnicode_FromString(funcname);
        #endif
    }
    if (!py_funcname) goto bad;
    py_code = __Pyx_PyCode_New(
        0,
        0,
        0,
        0,
        0,
        __pyx_empty_bytes, /*PyObject *code,*/
        __pyx_empty_tuple, /*PyObject *consts,*/
        __pyx_empty_tuple, /*PyObject *names,*/
        __pyx_empty_tuple, /*PyObject *varnames,*/
        __pyx_empty_tuple, /*PyObject *freevars,*/
        __pyx_empty_tuple, /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        py_line,
        __pyx_empty_bytes  /*PyObject *lnotab*/
    );
    Py_DECREF(py_srcfile);
    Py_DECREF(py_funcname);
    return py_code;
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyFrameObject *py_frame = 0;
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    if (c_line) {
        c_line = __Pyx_CLineForTraceback(tstate, c_line);
    }
    py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
    if (!py_code) {
        py_code = __Pyx_CreateCodeObjectForTraceback(
            funcname, c_line, py_line, filename);
        if (!py_code) goto bad;
        __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
    }
    py_frame = PyFrame_New(
        tstate,            /*PyThreadState *tstate,*/
        py_code,           /*PyCodeObject *code,*/
        __pyx_d,    /*PyObject *globals,*/
        0                  /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}

/* CIntFromPyVerify */
#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
    {\
        func_type value = func_value;\
        if (sizeof(target_type) < sizeof(func_type)) {\
            if (unlikely(value != (func_type) (target_type) value)) {\
                func_type zero = 0;\
                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
                    return (target_type) -1;\
                if (is_unsigned && unlikely(value < zero))\
                    goto raise_neg_overflow;\
                else\
                    goto raise_overflow;\
            }\
        }\
        return (target_type) value;\
    }

/* None */
static CYTHON_INLINE long __Pyx_pow_long(long b, long e) {
    long t = b;
    switch (e) {
        case 3:
            t *= b;
        CYTHON_FALLTHROUGH;
        case 2:
            t *= b;
        CYTHON_FALLTHROUGH;
        case 1:
            return t;
        case 0:
            return 1;
    }
    #if 1
    if (unlikely(e<0)) return 0;
    #endif
    t = 1;
    while (likely(e)) {
        t *= (b * (e&1)) | ((~e)&1);
        b *= b;
        e >>= 1;
    }
    return t;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
#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 (is_unsigned) {
        if (sizeof(int) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(int) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(int),
                                     little, !is_unsigned);
    }
}

/* 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 && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            int val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (int) -1;
        }
    } else {
        int val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (int) -1;
        val = __Pyx_PyInt_As_int(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to int");
    return (int) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to int");
    return (int) -1;
}

/* CIntFromPy */
static CYTHON_INLINE 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 && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            long val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (long) -1;
        }
    } else {
        long val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (long) -1;
        val = __Pyx_PyInt_As_long(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to long");
    return (long) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to long");
    return (long) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PY_LONG_LONG(PY_LONG_LONG value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const PY_LONG_LONG neg_one = (PY_LONG_LONG) -1, const_zero = (PY_LONG_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(PY_LONG_LONG) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(PY_LONG_LONG) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(PY_LONG_LONG) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(PY_LONG_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(PY_LONG_LONG),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 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 char) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(unsigned char) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(unsigned char) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(unsigned char) <= 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 char),
                                     little, !is_unsigned);
    }
}

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

/* CIntFromPy */
static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 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 char) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(unsigned char, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (unsigned char) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (unsigned char) 0;
                case  1: __PYX_VERIFY_RETURN_INT(unsigned char, digit, digits[0])
                case 2:
                    if (8 * sizeof(unsigned char) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) >= 2 * PyLong_SHIFT) {
                            return (unsigned char) (((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(unsigned char) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) >= 3 * PyLong_SHIFT) {
                            return (unsigned char) (((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(unsigned char) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) >= 4 * PyLong_SHIFT) {
                            return (unsigned char) (((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (unsigned char) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(unsigned char) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (unsigned char) 0;
                case -1: __PYX_VERIFY_RETURN_INT(unsigned char, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(unsigned char,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(unsigned char) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT) {
                            return (unsigned char) (((unsigned char)-1)*(((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(unsigned char) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT) {
                            return (unsigned char) ((((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT) {
                            return (unsigned char) (((unsigned char)-1)*(((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(unsigned char) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT) {
                            return (unsigned char) ((((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 4 * PyLong_SHIFT) {
                            return (unsigned char) (((unsigned char)-1)*(((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(unsigned char) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 4 * PyLong_SHIFT) {
                            return (unsigned char) ((((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(unsigned char) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned char, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(unsigned char) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned char, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            unsigned char val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (unsigned char) -1;
        }
    } else {
        unsigned char val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (unsigned char) -1;
        val = __Pyx_PyInt_As_unsigned_char(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to unsigned char");
    return (unsigned char) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to unsigned char");
    return (unsigned char) -1;
}

/* CIntFromPy */
static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const char neg_one = (char) -1, const_zero = (char) 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(char) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (char) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (char) 0;
                case  1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0])
                case 2:
                    if (8 * sizeof(char) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) {
                            return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(char) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) {
                            return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(char) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) >= 4 * PyLong_SHIFT) {
                            return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (char) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(char) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (char) 0;
                case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(char,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
                            return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(char) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
                            return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
                            return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(char) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
                            return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) {
                            return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(char) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) {
                            return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(char) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            char val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (char) -1;
        }
    } else {
        char val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (char) -1;
        val = __Pyx_PyInt_As_char(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to char");
    return (char) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to char");
    return (char) -1;
}

/* 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 && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, 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;
}

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

/* FastTypeChecks */
#if CYTHON_COMPILING_IN_CPYTHON
static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
    while (a) {
        a = a->tp_base;
        if (a == b)
            return 1;
    }
    return b == &PyBaseObject_Type;
}
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
    PyObject *mro;
    if (a == b) return 1;
    mro = a->tp_mro;
    if (likely(mro)) {
        Py_ssize_t i, n;
        n = PyTuple_GET_SIZE(mro);
        for (i = 0; i < n; i++) {
            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
                return 1;
        }
        return 0;
    }
    return __Pyx_InBases(a, b);
}
#if PY_MAJOR_VERSION == 2
static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
    PyObject *exception, *value, *tb;
    int res;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&exception, &value, &tb);
    res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
    if (unlikely(res == -1)) {
        PyErr_WriteUnraisable(err);
        res = 0;
    }
    if (!res) {
        res = PyObject_IsSubclass(err, exc_type2);
        if (unlikely(res == -1)) {
            PyErr_WriteUnraisable(err);
            res = 0;
        }
    }
    __Pyx_ErrRestore(exception, value, tb);
    return res;
}
#else
static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
    int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
    if (!res) {
        res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
    }
    return res;
}
#endif
static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
    Py_ssize_t i, n;
    assert(PyExceptionClass_Check(exc_type));
    n = PyTuple_GET_SIZE(tuple);
#if PY_MAJOR_VERSION >= 3
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
#endif
    for (i=0; i<n; i++) {
        PyObject *t = PyTuple_GET_ITEM(tuple, i);
        #if PY_MAJOR_VERSION < 3
        if (likely(exc_type == t)) return 1;
        #endif
        if (likely(PyExceptionClass_Check(t))) {
            if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
        } else {
        }
    }
    return 0;
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
    if (likely(err == exc_type)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        if (likely(PyExceptionClass_Check(exc_type))) {
            return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
        } else if (likely(PyTuple_Check(exc_type))) {
            return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
        } else {
        }
    }
    return PyErr_GivenExceptionMatches(err, exc_type);
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
    assert(PyExceptionClass_Check(exc_type1));
    assert(PyExceptionClass_Check(exc_type2));
    if (likely(err == exc_type1 || err == exc_type2)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
    }
    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
}
#endif

/* PyObjectCallMethod1 */
static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
    PyObject *result = __Pyx_PyObject_CallOneArg(method, arg);
    Py_DECREF(method);
    return result;
}
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
    PyObject *method = NULL, *result;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_Call2Args(method, obj, arg);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) return NULL;
    return __Pyx__PyObject_CallMethod1(method, arg);
}

/* CoroutineBase */
#include <structmember.h>
#include <frameobject.h>
#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom)
static int __Pyx_PyGen__FetchStopIterationValue(CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject **pvalue) {
    PyObject *et, *ev, *tb;
    PyObject *value = NULL;
    __Pyx_ErrFetch(&et, &ev, &tb);
    if (!et) {
        Py_XDECREF(tb);
        Py_XDECREF(ev);
        Py_INCREF(Py_None);
        *pvalue = Py_None;
        return 0;
    }
    if (likely(et == PyExc_StopIteration)) {
        if (!ev) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#if PY_VERSION_HEX >= 0x030300A0
        else if (Py_TYPE(ev) == (PyTypeObject*)PyExc_StopIteration) {
            value = ((PyStopIterationObject *)ev)->value;
            Py_INCREF(value);
            Py_DECREF(ev);
        }
#endif
        else if (unlikely(PyTuple_Check(ev))) {
            if (PyTuple_GET_SIZE(ev) >= 1) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                value = PyTuple_GET_ITEM(ev, 0);
                Py_INCREF(value);
#else
                value = PySequence_ITEM(ev, 0);
#endif
            } else {
                Py_INCREF(Py_None);
                value = Py_None;
            }
            Py_DECREF(ev);
        }
        else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) {
            value = ev;
        }
        if (likely(value)) {
            Py_XDECREF(tb);
            Py_DECREF(et);
            *pvalue = value;
            return 0;
        }
    } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) {
        __Pyx_ErrRestore(et, ev, tb);
        return -1;
    }
    PyErr_NormalizeException(&et, &ev, &tb);
    if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) {
        __Pyx_ErrRestore(et, ev, tb);
        return -1;
    }
    Py_XDECREF(tb);
    Py_DECREF(et);
#if PY_VERSION_HEX >= 0x030300A0
    value = ((PyStopIterationObject *)ev)->value;
    Py_INCREF(value);
    Py_DECREF(ev);
#else
    {
        PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args);
        Py_DECREF(ev);
        if (likely(args)) {
            value = PySequence_GetItem(args, 0);
            Py_DECREF(args);
        }
        if (unlikely(!value)) {
            __Pyx_ErrRestore(NULL, NULL, NULL);
            Py_INCREF(Py_None);
            value = Py_None;
        }
    }
#endif
    *pvalue = value;
    return 0;
}
static CYTHON_INLINE
void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) {
    PyObject *t, *v, *tb;
    t = exc_state->exc_type;
    v = exc_state->exc_value;
    tb = exc_state->exc_traceback;
    exc_state->exc_type = NULL;
    exc_state->exc_value = NULL;
    exc_state->exc_traceback = NULL;
    Py_XDECREF(t);
    Py_XDECREF(v);
    Py_XDECREF(tb);
}
#define __Pyx_Coroutine_AlreadyRunningError(gen)  (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL)
static void __Pyx__Coroutine_AlreadyRunningError(CYTHON_UNUSED __pyx_CoroutineObject *gen) {
    const char *msg;
    if ((0)) {
    #ifdef __Pyx_Coroutine_USED
    } else if (__Pyx_Coroutine_Check((PyObject*)gen)) {
        msg = "coroutine already executing";
    #endif
    #ifdef __Pyx_AsyncGen_USED
    } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) {
        msg = "async generator already executing";
    #endif
    } else {
        msg = "generator already executing";
    }
    PyErr_SetString(PyExc_ValueError, msg);
}
#define __Pyx_Coroutine_NotStartedError(gen)  (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL)
static void __Pyx__Coroutine_NotStartedError(CYTHON_UNUSED PyObject *gen) {
    const char *msg;
    if ((0)) {
    #ifdef __Pyx_Coroutine_USED
    } else if (__Pyx_Coroutine_Check(gen)) {
        msg = "can't send non-None value to a just-started coroutine";
    #endif
    #ifdef __Pyx_AsyncGen_USED
    } else if (__Pyx_AsyncGen_CheckExact(gen)) {
        msg = "can't send non-None value to a just-started async generator";
    #endif
    } else {
        msg = "can't send non-None value to a just-started generator";
    }
    PyErr_SetString(PyExc_TypeError, msg);
}
#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing)  (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL)
static void __Pyx__Coroutine_AlreadyTerminatedError(CYTHON_UNUSED PyObject *gen, PyObject *value, CYTHON_UNUSED int closing) {
    #ifdef __Pyx_Coroutine_USED
    if (!closing && __Pyx_Coroutine_Check(gen)) {
        PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine");
    } else
    #endif
    if (value) {
        #ifdef __Pyx_AsyncGen_USED
        if (__Pyx_AsyncGen_CheckExact(gen))
            PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration);
        else
        #endif
        PyErr_SetNone(PyExc_StopIteration);
    }
}
static
PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) {
    __Pyx_PyThreadState_declare
    PyThreadState *tstate;
    __Pyx_ExcInfoStruct *exc_state;
    PyObject *retval;
    assert(!self->is_running);
    if (unlikely(self->resume_label == 0)) {
        if (unlikely(value && value != Py_None)) {
            return __Pyx_Coroutine_NotStartedError((PyObject*)self);
        }
    }
    if (unlikely(self->resume_label == -1)) {
        return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing);
    }
#if CYTHON_FAST_THREAD_STATE
    __Pyx_PyThreadState_assign
    tstate = __pyx_tstate;
#else
    tstate = __Pyx_PyThreadState_Current;
#endif
    exc_state = &self->gi_exc_state;
    if (exc_state->exc_type) {
        #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON
        #else
        if (exc_state->exc_traceback) {
            PyTracebackObject *tb = (PyTracebackObject *) exc_state->exc_traceback;
            PyFrameObject *f = tb->tb_frame;
            Py_XINCREF(tstate->frame);
            assert(f->f_back == NULL);
            f->f_back = tstate->frame;
        }
        #endif
    }
#if CYTHON_USE_EXC_INFO_STACK
    exc_state->previous_item = tstate->exc_info;
    tstate->exc_info = exc_state;
#else
    if (exc_state->exc_type) {
        __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
    } else {
        __Pyx_Coroutine_ExceptionClear(exc_state);
        __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
    }
#endif
    self->is_running = 1;
    retval = self->body((PyObject *) self, tstate, value);
    self->is_running = 0;
#if CYTHON_USE_EXC_INFO_STACK
    exc_state = &self->gi_exc_state;
    tstate->exc_info = exc_state->previous_item;
    exc_state->previous_item = NULL;
    __Pyx_Coroutine_ResetFrameBackpointer(exc_state);
#endif
    return retval;
}
static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) {
    PyObject *exc_tb = exc_state->exc_traceback;
    if (likely(exc_tb)) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON
#else
        PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
        PyFrameObject *f = tb->tb_frame;
        Py_CLEAR(f->f_back);
#endif
    }
}
static CYTHON_INLINE
PyObject *__Pyx_Coroutine_MethodReturn(CYTHON_UNUSED PyObject* gen, PyObject *retval) {
    if (unlikely(!retval)) {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        if (!__Pyx_PyErr_Occurred()) {
            PyObject *exc = PyExc_StopIteration;
            #ifdef __Pyx_AsyncGen_USED
            if (__Pyx_AsyncGen_CheckExact(gen))
                exc = __Pyx_PyExc_StopAsyncIteration;
            #endif
            __Pyx_PyErr_SetNone(exc);
        }
    }
    return retval;
}
#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 = Py_TYPE(yf)->tp_iternext(yf);
            else
                ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value);
        }
        gen->is_running = 0;
        if (likely(ret)) {
            return ret;
        }
        retval = __Pyx_Coroutine_FinishDelegation(gen);
    } else {
        retval = __Pyx_Coroutine_SendEx(gen, value, 0);
    }
    return __Pyx_Coroutine_MethodReturn(self, retval);
}
static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) {
    PyObject *retval = NULL;
    int err = 0;
    #ifdef __Pyx_Generator_USED
    if (__Pyx_Generator_CheckExact(yf)) {
        retval = __Pyx_Coroutine_Close(yf);
        if (!retval)
            return -1;
    } else
    #endif
    #ifdef __Pyx_Coroutine_USED
    if (__Pyx_Coroutine_Check(yf)) {
        retval = __Pyx_Coroutine_Close(yf);
        if (!retval)
            return -1;
    } else
    if (__Pyx_CoroutineAwait_CheckExact(yf)) {
        retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL);
        if (!retval)
            return -1;
    } else
    #endif
    #ifdef __Pyx_AsyncGen_USED
    if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
        retval = __Pyx_async_gen_asend_close(yf, NULL);
    } else
    if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) {
        retval = __Pyx_async_gen_athrow_close(yf, NULL);
    } else
    #endif
    {
        PyObject *meth;
        gen->is_running = 1;
        meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_close);
        if (unlikely(!meth)) {
            if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
                PyErr_WriteUnraisable(yf);
            }
            PyErr_Clear();
        } else {
            retval = PyObject_CallFunction(meth, NULL);
            Py_DECREF(meth);
            if (!retval)
                err = -1;
        }
        gen->is_running = 0;
    }
    Py_XDECREF(retval);
    return err;
}
static PyObject *__Pyx_Generator_Next(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
    PyObject *yf = gen->yieldfrom;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        PyObject *ret;
        gen->is_running = 1;
        #ifdef __Pyx_Generator_USED
        if (__Pyx_Generator_CheckExact(yf)) {
            ret = __Pyx_Generator_Next(yf);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
        if (PyGen_CheckExact(yf)) {
            ret = __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 = Py_TYPE(yf)->tp_iternext(yf);
        gen->is_running = 0;
        if (likely(ret)) {
            return ret;
        }
        return __Pyx_Coroutine_FinishDelegation(gen);
    }
    return __Pyx_Coroutine_SendEx(gen, Py_None, 0);
}
static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, CYTHON_UNUSED PyObject *arg) {
    return __Pyx_Coroutine_Close(self);
}
static PyObject *__Pyx_Coroutine_Close(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject *retval, *raised_exception;
    PyObject *yf = gen->yieldfrom;
    int err = 0;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        Py_INCREF(yf);
        err = __Pyx_Coroutine_CloseIter(gen, yf);
        __Pyx_Coroutine_Undelegate(gen);
        Py_DECREF(yf);
    }
    if (err == 0)
        PyErr_SetNone(PyExc_GeneratorExit);
    retval = __Pyx_Coroutine_SendEx(gen, NULL, 1);
    if (unlikely(retval)) {
        const char *msg;
        Py_DECREF(retval);
        if ((0)) {
        #ifdef __Pyx_Coroutine_USED
        } else if (__Pyx_Coroutine_Check(self)) {
            msg = "coroutine ignored GeneratorExit";
        #endif
        #ifdef __Pyx_AsyncGen_USED
        } else if (__Pyx_AsyncGen_CheckExact(self)) {
#if PY_VERSION_HEX < 0x03060000
            msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)";
#else
            msg = "async generator ignored GeneratorExit";
#endif
        #endif
        } else {
            msg = "generator ignored GeneratorExit";
        }
        PyErr_SetString(PyExc_RuntimeError, msg);
        return NULL;
    }
    raised_exception = PyErr_Occurred();
    if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) {
        if (raised_exception) PyErr_Clear();
        Py_INCREF(Py_None);
        return Py_None;
    }
    return NULL;
}
static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb,
                                        PyObject *args, int close_on_genexit) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject *yf = gen->yieldfrom;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        PyObject *ret;
        Py_INCREF(yf);
        if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) {
            int err = __Pyx_Coroutine_CloseIter(gen, yf);
            Py_DECREF(yf);
            __Pyx_Coroutine_Undelegate(gen);
            if (err < 0)
                return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0));
            goto throw_here;
        }
        gen->is_running = 1;
        if (0
        #ifdef __Pyx_Generator_USED
            || __Pyx_Generator_CheckExact(yf)
        #endif
        #ifdef __Pyx_Coroutine_USED
            || __Pyx_Coroutine_Check(yf)
        #endif
            ) {
            ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit);
        #ifdef __Pyx_Coroutine_USED
        } else if (__Pyx_CoroutineAwait_CheckExact(yf)) {
            ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit);
        #endif
        } else {
            PyObject *meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_throw);
            if (unlikely(!meth)) {
                Py_DECREF(yf);
                if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
                    gen->is_running = 0;
                    return NULL;
                }
                PyErr_Clear();
                __Pyx_Coroutine_Undelegate(gen);
                gen->is_running = 0;
                goto throw_here;
            }
            if (likely(args)) {
                ret = PyObject_CallObject(meth, args);
            } else {
                ret = PyObject_CallFunctionObjArgs(meth, typ, val, tb, NULL);
            }
            Py_DECREF(meth);
        }
        gen->is_running = 0;
        Py_DECREF(yf);
        if (!ret) {
            ret = __Pyx_Coroutine_FinishDelegation(gen);
        }
        return __Pyx_Coroutine_MethodReturn(self, ret);
    }
throw_here:
    __Pyx_Raise(typ, val, tb, NULL);
    return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0));
}
static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) {
    PyObject *typ;
    PyObject *val = NULL;
    PyObject *tb = NULL;
    if (!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))
        return NULL;
    return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1);
}
static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) {
    Py_VISIT(exc_state->exc_type);
    Py_VISIT(exc_state->exc_value);
    Py_VISIT(exc_state->exc_traceback);
    return 0;
}
static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) {
    Py_VISIT(gen->closure);
    Py_VISIT(gen->classobj);
    Py_VISIT(gen->yieldfrom);
    return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg);
}
static int __Pyx_Coroutine_clear(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    Py_CLEAR(gen->closure);
    Py_CLEAR(gen->classobj);
    Py_CLEAR(gen->yieldfrom);
    __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state);
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer);
    }
#endif
    Py_CLEAR(gen->gi_code);
    Py_CLEAR(gen->gi_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 (PyObject_CallFinalizerFromDealloc(self))
#else
        Py_TYPE(gen)->tp_del(self);
        if (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);
    PyObject_GC_Del(gen);
}
static void __Pyx_Coroutine_del(PyObject *self) {
    PyObject *error_type, *error_value, *error_traceback;
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    __Pyx_PyThreadState_declare
    if (gen->resume_label < 0) {
        return;
    }
#if !CYTHON_USE_TP_FINALIZE
    assert(self->ob_refcnt == 0);
    __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 (--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, CYTHON_UNUSED void *context)
{
    PyObject *name = self->gi_name;
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    tmp = self->gi_name;
    Py_INCREF(value);
    self->gi_name = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
{
    PyObject *name = self->gi_qualname;
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    tmp = self->gi_qualname;
    Py_INCREF(value);
    self->gi_qualname = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
{
    PyObject *frame = self->gi_frame;
    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;
    gen->gi_exc_state.exc_type = NULL;
    gen->gi_exc_state.exc_value = NULL;
    gen->gi_exc_state.exc_traceback = NULL;
#if CYTHON_USE_EXC_INFO_STACK
    gen->gi_exc_state.previous_item = NULL;
#endif
    gen->gi_weakreflist = NULL;
    Py_XINCREF(qualname);
    gen->gi_qualname = qualname;
    Py_XINCREF(name);
    gen->gi_name = name;
    Py_XINCREF(module_name);
    gen->gi_modulename = module_name;
    Py_XINCREF(code);
    gen->gi_code = code;
    gen->gi_frame = NULL;
    PyObject_GC_Track(gen);
    return gen;
}

/* PatchModuleWithCoroutine */
static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) {
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
    int result;
    PyObject *globals, *result_obj;
    globals = PyDict_New();  if (unlikely(!globals)) goto ignore;
    result = PyDict_SetItemString(globals, "_cython_coroutine_type",
    #ifdef __Pyx_Coroutine_USED
        (PyObject*)__pyx_CoroutineType);
    #else
        Py_None);
    #endif
    if (unlikely(result < 0)) goto ignore;
    result = PyDict_SetItemString(globals, "_cython_generator_type",
    #ifdef __Pyx_Generator_USED
        (PyObject*)__pyx_GeneratorType);
    #else
        Py_None);
    #endif
    if (unlikely(result < 0)) goto ignore;
    if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore;
    if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore;
    result_obj = PyRun_String(py_code, Py_file_input, globals, globals);
    if (unlikely(!result_obj)) goto ignore;
    Py_DECREF(result_obj);
    Py_DECREF(globals);
    return module;
ignore:
    Py_XDECREF(globals);
    PyErr_WriteUnraisable(module);
    if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) {
        Py_DECREF(module);
        module = NULL;
    }
#else
    py_code++;
#endif
    return module;
}

/* PatchGeneratorABC */
#ifndef CYTHON_REGISTER_ABCS
#define CYTHON_REGISTER_ABCS 1
#endif
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
static PyObject* __Pyx_patch_abc_module(PyObject *module);
static PyObject* __Pyx_patch_abc_module(PyObject *module) {
    module = __Pyx_Coroutine_patch_module(
        module, ""
"if _cython_generator_type is not None:\n"
"    try: Generator = _module.Generator\n"
"    except AttributeError: pass\n"
"    else: Generator.register(_cython_generator_type)\n"
"if _cython_coroutine_type is not None:\n"
"    try: Coroutine = _module.Coroutine\n"
"    except AttributeError: pass\n"
"    else: Coroutine.register(_cython_coroutine_type)\n"
    );
    return module;
}
#endif
static int __Pyx_patch_abc(void) {
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
    static int abc_patched = 0;
    if (CYTHON_REGISTER_ABCS && !abc_patched) {
        PyObject *module;
        module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections");
        if (!module) {
            PyErr_WriteUnraisable(NULL);
            if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning,
                    ((PY_MAJOR_VERSION >= 3) ?
                        "Cython module failed to register with collections.abc module" :
                        "Cython module failed to register with collections module"), 1) < 0)) {
                return -1;
            }
        } else {
            module = __Pyx_patch_abc_module(module);
            abc_patched = 1;
            if (unlikely(!module))
                return -1;
            Py_DECREF(module);
        }
        module = PyImport_ImportModule("backports_abc");
        if (module) {
            module = __Pyx_patch_abc_module(module);
            Py_XDECREF(module);
        }
        if (!module) {
            PyErr_Clear();
        }
    }
#else
    if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL);
#endif
    return 0;
}

/* Generator */
static PyMethodDef __pyx_Generator_methods[] = {
    {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O,
     (char*) PyDoc_STR("send(arg) -> send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")},
    {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS,
     (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")},
    {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS,
     (char*) PyDoc_STR("close() -> raise GeneratorExit inside generator.")},
    {0, 0, 0, 0}
};
static PyMemberDef __pyx_Generator_memberlist[] = {
    {(char *) "gi_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL},
    {(char*) "gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY,
     (char*) PyDoc_STR("object being iterated by 'yield from', or None")},
    {(char*) "gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL},
    {0, 0, 0, 0, 0}
};
static PyGetSetDef __pyx_Generator_getsets[] = {
    {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name,
     (char*) PyDoc_STR("name of the generator"), 0},
    {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
     (char*) PyDoc_STR("qualified name of the generator"), 0},
    {(char *) "gi_frame", (getter)__Pyx_Coroutine_get_frame, NULL,
     (char*) PyDoc_STR("Frame of the generator"), 0},
    {0, 0, 0, 0, 0}
};
static PyTypeObject __pyx_GeneratorType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    "generator",
    sizeof(__pyx_CoroutineObject),
    0,
    (destructor) __Pyx_Coroutine_dealloc,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE,
    0,
    (traverseproc) __Pyx_Coroutine_traverse,
    0,
    0,
    offsetof(__pyx_CoroutineObject, gi_weakreflist),
    0,
    (iternextfunc) __Pyx_Generator_Next,
    __pyx_Generator_methods,
    __pyx_Generator_memberlist,
    __pyx_Generator_getsets,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
#if CYTHON_USE_TP_FINALIZE
    0,
#else
    __Pyx_Coroutine_del,
#endif
    0,
#if CYTHON_USE_TP_FINALIZE
    __Pyx_Coroutine_del,
#elif PY_VERSION_HEX >= 0x030400a1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
    0,
#endif
};
static int __pyx_Generator_init(void) {
    __pyx_GeneratorType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
    __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter;
    __pyx_GeneratorType = __Pyx_FetchCommonType(&__pyx_GeneratorType_type);
    if (unlikely(!__pyx_GeneratorType)) {
        return -1;
    }
    return 0;
}

/* CheckBinaryVersion */
static int __Pyx_check_binary_version(void) {
    char ctversion[4], rtversion[4];
    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compiletime version %s of module '%.100s' "
                      "does not match runtime version %s",
                      ctversion, __Pyx_MODULE_NAME, rtversion);
        return PyErr_WarnEx(NULL, message, 1);
    }
    return 0;
}

/* FunctionExport */
static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    union {
        void (*fp)(void);
        void *p;
    } tmp;
    d = PyObject_GetAttrString(__pyx_m, (char *)"__pyx_capi__");
    if (!d) {
        PyErr_Clear();
        d = PyDict_New();
        if (!d)
            goto bad;
        Py_INCREF(d);
        if (PyModule_AddObject(__pyx_m, (char *)"__pyx_capi__", d) < 0)
            goto bad;
    }
    tmp.fp = f;
#if PY_VERSION_HEX >= 0x02070000
    cobj = PyCapsule_New(tmp.p, sig, 0);
#else
    cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0);
#endif
    if (!cobj)
        goto bad;
    if (PyDict_SetItemString(d, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(cobj);
    Py_XDECREF(d);
    return -1;
}

/* FunctionImport */
#ifndef __PYX_HAVE_RT_ImportFunction
#define __PYX_HAVE_RT_ImportFunction
static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    union {
        void (*fp)(void);
        void *p;
    } tmp;
    d = PyObject_GetAttrString(module, (char *)"__pyx_capi__");
    if (!d)
        goto bad;
    cobj = PyDict_GetItemString(d, funcname);
    if (!cobj) {
        PyErr_Format(PyExc_ImportError,
            "%.200s does not export expected C function %.200s",
                PyModule_GetName(module), funcname);
        goto bad;
    }
#if PY_VERSION_HEX >= 0x02070000
    if (!PyCapsule_IsValid(cobj, sig)) {
        PyErr_Format(PyExc_TypeError,
            "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj));
        goto bad;
    }
    tmp.p = PyCapsule_GetPointer(cobj, sig);
#else
    {const char *desc, *s1, *s2;
    desc = (const char *)PyCObject_GetDesc(cobj);
    if (!desc)
        goto bad;
    s1 = desc; s2 = sig;
    while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
    if (*s1 != *s2) {
        PyErr_Format(PyExc_TypeError,
            "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), funcname, sig, desc);
        goto bad;
    }
    tmp.p = PyCObject_AsVoidPtr(cobj);}
#endif
    *f = tmp.fp;
    if (!(*f))
        goto bad;
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(d);
    return -1;
}
#endif

/* InitStrings */
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        #if PY_MAJOR_VERSION < 3
        if (t->is_unicode) {
            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
        } else if (t->intern) {
            *t->p = PyString_InternFromString(t->s);
        } else {
            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        }
        #else
        if (t->is_unicode | t->is_str) {
            if (t->intern) {
                *t->p = PyUnicode_InternFromString(t->s);
            } else if (t->encoding) {
                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
            } else {
                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
            }
        } else {
            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
        }
        #endif
        if (!*t->p)
            return -1;
        if (PyObject_Hash(*t->p) == -1)
            return -1;
        ++t;
    }
    return 0;
}

static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
    return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
}
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
    Py_ssize_t ignore;
    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
}
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
#if !CYTHON_PEP393_ENABLED
static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    char* defenc_c;
    PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
    if (!defenc) return NULL;
    defenc_c = PyBytes_AS_STRING(defenc);
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
    {
        char* end = defenc_c + PyBytes_GET_SIZE(defenc);
        char* c;
        for (c = defenc_c; c < end; c++) {
            if ((unsigned char) (*c) >= 128) {
                PyUnicode_AsASCIIString(o);
                return NULL;
            }
        }
    }
#endif
    *length = PyBytes_GET_SIZE(defenc);
    return defenc_c;
}
#else
static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
    if (likely(PyUnicode_IS_ASCII(o))) {
        *length = PyUnicode_GET_LENGTH(o);
        return PyUnicode_AsUTF8(o);
    } else {
        PyUnicode_AsASCIIString(o);
        return NULL;
    }
#else
    return PyUnicode_AsUTF8AndSize(o, length);
#endif
}
#endif
#endif
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
    if (
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
            __Pyx_sys_getdefaultencoding_not_ascii &&
#endif
            PyUnicode_Check(o)) {
        return __Pyx_PyUnicode_AsStringAndSize(o, length);
    } else
#endif
#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
    if (PyByteArray_Check(o)) {
        *length = PyByteArray_GET_SIZE(o);
        return PyByteArray_AS_STRING(o);
    } else
#endif
    {
        char* result;
        int r = PyBytes_AsStringAndSize(o, &result, length);
        if (unlikely(r < 0)) {
            return NULL;
        } else {
            return result;
        }
    }
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
    int retval;
    if (unlikely(!x)) return -1;
    retval = __Pyx_PyObject_IsTrue(x);
    Py_DECREF(x);
    return retval;
}
static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {
#if PY_MAJOR_VERSION >= 3
    if (PyLong_Check(result)) {
        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                "__int__ returned non-int (type %.200s).  "
                "The ability to return an instance of a strict subclass of int "
                "is deprecated, and may be removed in a future version of Python.",
                Py_TYPE(result)->tp_name)) {
            Py_DECREF(result);
            return NULL;
        }
        return result;
    }
#endif
    PyErr_Format(PyExc_TypeError,
                 "__%.4s__ returned non-%.4s (type %.200s)",
                 type_name, type_name, Py_TYPE(result)->tp_name);
    Py_DECREF(result);
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
#if CYTHON_USE_TYPE_SLOTS
  PyNumberMethods *m;
#endif
  const char *name = NULL;
  PyObject *res = NULL;
#if PY_MAJOR_VERSION < 3
  if (likely(PyInt_Check(x) || PyLong_Check(x)))
#else
  if (likely(PyLong_Check(x)))
#endif
    return __Pyx_NewRef(x);
#if CYTHON_USE_TYPE_SLOTS
  m = Py_TYPE(x)->tp_as_number;
  #if PY_MAJOR_VERSION < 3
  if (m && m->nb_int) {
    name = "int";
    res = m->nb_int(x);
  }
  else if (m && m->nb_long) {
    name = "long";
    res = m->nb_long(x);
  }
  #else
  if (likely(m && m->nb_int)) {
    name = "int";
    res = m->nb_int(x);
  }
  #endif
#else
  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
    res = PyNumber_Int(x);
  }
#endif
  if (likely(res)) {
#if PY_MAJOR_VERSION < 3
    if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {
#else
    if (unlikely(!PyLong_CheckExact(res))) {
#endif
        return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);
    }
  }
  else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_TypeError,
                    "an integer is required");
  }
  return res;
}
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject *x;
#if PY_MAJOR_VERSION < 3
  if (likely(PyInt_CheckExact(b))) {
    if (sizeof(Py_ssize_t) >= sizeof(long))
        return PyInt_AS_LONG(b);
    else
        return PyInt_AsSsize_t(b);
  }
#endif
  if (likely(PyLong_CheckExact(b))) {
    #if CYTHON_USE_PYLONG_INTERNALS
    const digit* digits = ((PyLongObject*)b)->ob_digit;
    const Py_ssize_t size = Py_SIZE(b);
    if (likely(__Pyx_sst_abs(size) <= 1)) {
        ival = likely(size) ? digits[0] : 0;
        if (size == -1) ival = -ival;
        return ival;
    } else {
      switch (size) {
         case 2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
      }
    }
    #endif
    return PyLong_AsSsize_t(b);
  }
  x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyInt_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
  return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
    return PyInt_FromSize_t(ival);
}


#endif /* Py_PYTHON_H */
