/* Generated by Cython 3.2.2 */

/* BEGIN: Cython Metadata
{
    "distutils": {
        "depends": [],
        "extra_compile_args": [
            "-std=c++11"
        ],
        "extra_link_args": [
            "-Wl,-rpath,/home/runner/work/PyGCGOpt/PyGCGOpt/lib",
            "-fopenmp"
        ],
        "include_dirs": [
            "/home/runner/work/PyGCGOpt/PyGCGOpt/src",
            "/usr/include/gcg"
        ],
        "language": "c++",
        "libraries": [
            "scip",
            "gcg"
        ],
        "library_dirs": [
            "/home/runner/work/PyGCGOpt/PyGCGOpt/lib"
        ],
        "name": "pygcgopt.gcg",
        "sources": [
            "src/pygcgopt/gcg.pyx"
        ]
    },
    "module_name": "pygcgopt.gcg"
}
END: Cython Metadata */

#ifndef PY_SSIZE_T_CLEAN
#define PY_SSIZE_T_CLEAN
#endif /* PY_SSIZE_T_CLEAN */
/* InitLimitedAPI */
#if defined(Py_LIMITED_API)
  #if !defined(CYTHON_LIMITED_API)
  #define CYTHON_LIMITED_API 1
  #endif
#elif defined(CYTHON_LIMITED_API)
  #ifdef _MSC_VER
  #pragma message ("Limited API usage is enabled with 'CYTHON_LIMITED_API' but 'Py_LIMITED_API' does not define a Python target version. Consider setting 'Py_LIMITED_API' instead.")
  #else
  #warning Limited API usage is enabled with 'CYTHON_LIMITED_API' but 'Py_LIMITED_API' does not define a Python target version. Consider setting 'Py_LIMITED_API' instead.
  #endif
#endif

#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x03080000
    #error Cython requires Python 3.8+.
#else
#define __PYX_ABI_VERSION "3_2_2"
#define CYTHON_HEX_VERSION 0x030202F0
#define CYTHON_FUTURE_DIVISION 1
/* CModulePreamble */
#include <stddef.h>
#ifndef offsetof
  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif
#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS)
  #ifndef __stdcall
    #define __stdcall
  #endif
  #ifndef __cdecl
    #define __cdecl
  #endif
  #ifndef __fastcall
    #define __fastcall
  #endif
#endif
#ifndef DL_IMPORT
  #define DL_IMPORT(t) t
#endif
#ifndef DL_EXPORT
  #define DL_EXPORT(t) t
#endif
#define __PYX_COMMA ,
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifndef Py_HUGE_VAL
  #define Py_HUGE_VAL HUGE_VAL
#endif
#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX
#if defined(GRAALVM_PYTHON)
  /* For very preliminary testing purposes. Most variables are set the same as PyPy.
     The existence of this section does not imply that anything works or is even tested */
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 1
  #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_TYPE_SPECS
  #define CYTHON_USE_TYPE_SPECS 0
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #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_AVOID_THREAD_UNSAFE_BORROWED_REFS
  #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
  #undef CYTHON_ASSUME_SAFE_MACROS
  #define CYTHON_ASSUME_SAFE_MACROS 0
  #undef CYTHON_ASSUME_SAFE_SIZE
  #define CYTHON_ASSUME_SAFE_SIZE 0
  #undef CYTHON_UNPACK_METHODS
  #define CYTHON_UNPACK_METHODS 0
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #undef CYTHON_USE_MODULE_STATE
  #define CYTHON_USE_MODULE_STATE 0
  #undef CYTHON_USE_SYS_MONITORING
  #define CYTHON_USE_SYS_MONITORING 0
  #undef CYTHON_USE_TP_FINALIZE
  #define CYTHON_USE_TP_FINALIZE 0
  #undef CYTHON_USE_AM_SEND
  #define CYTHON_USE_AM_SEND 0
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 1
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
  #endif
  #undef CYTHON_USE_FREELISTS
  #define CYTHON_USE_FREELISTS 0
  #undef CYTHON_IMMORTAL_CONSTANTS
  #define CYTHON_IMMORTAL_CONSTANTS 0
#elif defined(PYPY_VERSION)
  #define CYTHON_COMPILING_IN_PYPY 1
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 0
  #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 1
  #ifndef CYTHON_USE_TYPE_SPECS
    #define CYTHON_USE_TYPE_SPECS 0
  #endif
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #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_AVOID_THREAD_UNSAFE_BORROWED_REFS
  #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 1
  #undef CYTHON_ASSUME_SAFE_MACROS
  #define CYTHON_ASSUME_SAFE_MACROS 0
  #ifndef CYTHON_ASSUME_SAFE_SIZE
    #define CYTHON_ASSUME_SAFE_SIZE 1
  #endif
  #undef CYTHON_UNPACK_METHODS
  #define CYTHON_UNPACK_METHODS 0
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #if PY_VERSION_HEX < 0x03090000
    #undef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #endif
  #undef CYTHON_USE_MODULE_STATE
  #define CYTHON_USE_MODULE_STATE 0
  #undef CYTHON_USE_SYS_MONITORING
  #define CYTHON_USE_SYS_MONITORING 0
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE (PYPY_VERSION_NUM >= 0x07030C00)
  #endif
  #undef CYTHON_USE_AM_SEND
  #define CYTHON_USE_AM_SEND 0
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_NUM >= 0x07031100)
  #endif
  #undef CYTHON_USE_FREELISTS
  #define CYTHON_USE_FREELISTS 0
  #undef CYTHON_IMMORTAL_CONSTANTS
  #define CYTHON_IMMORTAL_CONSTANTS 0
#elif defined(CYTHON_LIMITED_API)
  #ifdef Py_LIMITED_API
    #undef __PYX_LIMITED_VERSION_HEX
    #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API
  #endif
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 1
  #define CYTHON_COMPILING_IN_GRAAL 0
  #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_TYPE_SPECS
  #define CYTHON_USE_TYPE_SPECS 1
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #undef CYTHON_USE_PYLIST_INTERNALS
  #define CYTHON_USE_PYLIST_INTERNALS 0
  #undef CYTHON_USE_UNICODE_INTERNALS
  #define CYTHON_USE_UNICODE_INTERNALS 0
  #ifndef CYTHON_USE_UNICODE_WRITER
    #define CYTHON_USE_UNICODE_WRITER 0
  #endif
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #ifndef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
    #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
  #endif
  #undef CYTHON_ASSUME_SAFE_MACROS
  #define CYTHON_ASSUME_SAFE_MACROS 0
  #undef CYTHON_ASSUME_SAFE_SIZE
  #define CYTHON_ASSUME_SAFE_SIZE 0
  #undef CYTHON_UNPACK_METHODS
  #define CYTHON_UNPACK_METHODS 0
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL (__PYX_LIMITED_VERSION_HEX >= 0x030C0000)
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #endif
  #ifndef CYTHON_USE_MODULE_STATE
    #define CYTHON_USE_MODULE_STATE 0
  #endif
  #undef CYTHON_USE_SYS_MONITORING
  #define CYTHON_USE_SYS_MONITORING 0
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE 0
  #endif
  #ifndef CYTHON_USE_AM_SEND
    #define CYTHON_USE_AM_SEND (__PYX_LIMITED_VERSION_HEX >= 0x030A0000)
  #endif
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
  #endif
  #ifndef CYTHON_USE_FREELISTS
  #define CYTHON_USE_FREELISTS 1
  #endif
  #undef CYTHON_IMMORTAL_CONSTANTS
  #define CYTHON_IMMORTAL_CONSTANTS 0
#else
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 1
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 0
  #ifdef Py_GIL_DISABLED
    #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 1
  #else
    #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
  #endif
  #if PY_VERSION_HEX < 0x030A0000
    #undef CYTHON_USE_TYPE_SLOTS
    #define CYTHON_USE_TYPE_SLOTS 1
  #elif !defined(CYTHON_USE_TYPE_SLOTS)
    #define CYTHON_USE_TYPE_SLOTS 1
  #endif
  #ifndef CYTHON_USE_TYPE_SPECS
    #define CYTHON_USE_TYPE_SPECS 0
  #endif
  #ifndef CYTHON_USE_PYTYPE_LOOKUP
    #define CYTHON_USE_PYTYPE_LOOKUP 1
  #endif
  #ifndef CYTHON_USE_PYLONG_INTERNALS
    #define CYTHON_USE_PYLONG_INTERNALS 1
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    #undef CYTHON_USE_PYLIST_INTERNALS
    #define CYTHON_USE_PYLIST_INTERNALS 0
  #elif !defined(CYTHON_USE_PYLIST_INTERNALS)
    #define CYTHON_USE_PYLIST_INTERNALS 1
  #endif
  #ifndef CYTHON_USE_UNICODE_INTERNALS
    #define CYTHON_USE_UNICODE_INTERNALS 1
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING || PY_VERSION_HEX >= 0x030B00A2
    #undef CYTHON_USE_UNICODE_WRITER
    #define CYTHON_USE_UNICODE_WRITER 0
  #elif !defined(CYTHON_USE_UNICODE_WRITER)
    #define CYTHON_USE_UNICODE_WRITER 1
  #endif
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    #undef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
    #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 1
  #elif !defined(CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS)
    #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
  #endif
  #ifndef CYTHON_ASSUME_SAFE_MACROS
    #define CYTHON_ASSUME_SAFE_MACROS 1
  #endif
  #ifndef CYTHON_ASSUME_SAFE_SIZE
    #define CYTHON_ASSUME_SAFE_SIZE 1
  #endif
  #ifndef CYTHON_UNPACK_METHODS
    #define CYTHON_UNPACK_METHODS 1
  #endif
  #ifndef CYTHON_FAST_THREAD_STATE
    #define CYTHON_FAST_THREAD_STATE 1
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    #undef CYTHON_FAST_GIL
    #define CYTHON_FAST_GIL 0
  #elif !defined(CYTHON_FAST_GIL)
    #define CYTHON_FAST_GIL (PY_VERSION_HEX < 0x030C00A6)
  #endif
  #ifndef CYTHON_METH_FASTCALL
    #define CYTHON_METH_FASTCALL 1
  #endif
  #ifndef CYTHON_FAST_PYCALL
    #define CYTHON_FAST_PYCALL 1
  #endif
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #endif
  #ifndef CYTHON_USE_MODULE_STATE
    #define CYTHON_USE_MODULE_STATE 0
  #endif
  #ifndef CYTHON_USE_SYS_MONITORING
    #define CYTHON_USE_SYS_MONITORING (PY_VERSION_HEX >= 0x030d00B1)
  #endif
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE 1
  #endif
  #ifndef CYTHON_USE_AM_SEND
    #define CYTHON_USE_AM_SEND 1
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    #undef CYTHON_USE_DICT_VERSIONS
    #define CYTHON_USE_DICT_VERSIONS 0
  #elif !defined(CYTHON_USE_DICT_VERSIONS)
    #define CYTHON_USE_DICT_VERSIONS  (PY_VERSION_HEX < 0x030C00A5 && !CYTHON_USE_MODULE_STATE)
  #endif
  #ifndef CYTHON_USE_EXC_INFO_STACK
    #define CYTHON_USE_EXC_INFO_STACK 1
  #endif
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
  #endif
  #ifndef CYTHON_USE_FREELISTS
    #define CYTHON_USE_FREELISTS (!CYTHON_COMPILING_IN_CPYTHON_FREETHREADING)
  #endif
  #if defined(CYTHON_IMMORTAL_CONSTANTS) && PY_VERSION_HEX < 0x030C0000
    #undef CYTHON_IMMORTAL_CONSTANTS
    #define CYTHON_IMMORTAL_CONSTANTS 0  // definitely won't work
  #elif !defined(CYTHON_IMMORTAL_CONSTANTS)
    #define CYTHON_IMMORTAL_CONSTANTS (PY_VERSION_HEX >= 0x030C0000 && !CYTHON_USE_MODULE_STATE && CYTHON_COMPILING_IN_CPYTHON_FREETHREADING)
  #endif
#endif
#ifndef CYTHON_COMPRESS_STRINGS
  #define CYTHON_COMPRESS_STRINGS 1
#endif
#ifndef CYTHON_FAST_PYCCALL
#define CYTHON_FAST_PYCCALL  CYTHON_FAST_PYCALL
#endif
#ifndef CYTHON_VECTORCALL
#if CYTHON_COMPILING_IN_LIMITED_API
#define CYTHON_VECTORCALL  (__PYX_LIMITED_VERSION_HEX >= 0x030C0000)
#else
#define CYTHON_VECTORCALL  (CYTHON_FAST_PYCCALL)
#endif
#endif
#if CYTHON_USE_PYLONG_INTERNALS
  #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(__cplusplus)
    /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17
     * but leads to warnings with -pedantic, since it is a C++17 feature */
    #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
      #if __has_cpp_attribute(maybe_unused)
        #define CYTHON_UNUSED [[maybe_unused]]
      #endif
    #endif
  #endif
#endif
#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
#     define CYTHON_UNUSED __attribute__ ((__unused__))
#   else
#     define CYTHON_UNUSED
#   endif
# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
#   define CYTHON_UNUSED __attribute__ ((__unused__))
# else
#   define CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_UNUSED_VAR
#  if defined(__cplusplus)
     template<class T> void CYTHON_UNUSED_VAR( const T& ) { }
#  else
#    define CYTHON_UNUSED_VAR(x) (void)(x)
#  endif
#endif
#ifndef CYTHON_MAYBE_UNUSED_VAR
  #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x)
#endif
#ifndef CYTHON_NCP_UNUSED
# if CYTHON_COMPILING_IN_CPYTHON && !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#  define CYTHON_NCP_UNUSED
# else
#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_USE_CPP_STD_MOVE
  #if defined(__cplusplus) && (\
    __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
    #define CYTHON_USE_CPP_STD_MOVE 1
  #else
    #define CYTHON_USE_CPP_STD_MOVE 0
  #endif
#endif
#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
#include <stdint.h>
typedef uintptr_t  __pyx_uintptr_t;
#ifndef CYTHON_FALLTHROUGH
  #if defined(__cplusplus)
    /* for clang __has_cpp_attribute(fallthrough) is true even before C++17
     * but leads to warnings with -pedantic, since it is a C++17 feature */
    #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
      #if __has_cpp_attribute(fallthrough)
        #define CYTHON_FALLTHROUGH [[fallthrough]]
      #endif
    #endif
    #ifndef CYTHON_FALLTHROUGH
      #if __has_cpp_attribute(clang::fallthrough)
        #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
      #elif __has_cpp_attribute(gnu::fallthrough)
        #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
      #endif
    #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 Py_UNREACHABLE
  #define Py_UNREACHABLE()  assert(0); abort()
#endif
#ifdef __cplusplus
  template <typename T>
  struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);};
  #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL<type>::value)
#else
  #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0)
#endif
#if CYTHON_COMPILING_IN_PYPY == 1
  #define __PYX_NEED_TP_PRINT_SLOT  (PY_VERSION_HEX < 0x030A0000)
#else
  #define __PYX_NEED_TP_PRINT_SLOT  (PY_VERSION_HEX < 0x03090000)
#endif
#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer))

/* CppInitCode */
#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 ==(const U& other) const { return *ptr == other; }
    template<typename U> bool operator !=(const U& other) const { return *ptr != other; }
    template<typename U> bool operator==(const __Pyx_FakeReference<U>& other) const { return *ptr == *other.ptr; }
    template<typename U> bool operator!=(const __Pyx_FakeReference<U>& other) const { return *ptr != *other.ptr; }
  private:
    T *ptr;
};

/* PythonCompatibility */
#define __PYX_BUILD_PY_SSIZE_T "n"
#define CYTHON_FORMAT_SSIZE_T "z"
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
#define __Pyx_DefaultClassType PyType_Type
#if CYTHON_COMPILING_IN_LIMITED_API
    #ifndef CO_OPTIMIZED
    static int CO_OPTIMIZED;
    #endif
    #ifndef CO_NEWLOCALS
    static int CO_NEWLOCALS;
    #endif
    #ifndef CO_VARARGS
    static int CO_VARARGS;
    #endif
    #ifndef CO_VARKEYWORDS
    static int CO_VARKEYWORDS;
    #endif
    #ifndef CO_ASYNC_GENERATOR
    static int CO_ASYNC_GENERATOR;
    #endif
    #ifndef CO_GENERATOR
    static int CO_GENERATOR;
    #endif
    #ifndef CO_COROUTINE
    static int CO_COROUTINE;
    #endif
#else
    #ifndef CO_COROUTINE
      #define CO_COROUTINE 0x80
    #endif
    #ifndef CO_ASYNC_GENERATOR
      #define CO_ASYNC_GENERATOR 0x200
    #endif
#endif
static int __Pyx_init_co_variables(void);
#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE)
  #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type)
#else
  #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is)
  #define __Pyx_Py_Is(x, y)  Py_Is(x, y)
#else
  #define __Pyx_Py_Is(x, y) ((x) == (y))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone)
  #define __Pyx_Py_IsNone(ob) Py_IsNone(ob)
#else
  #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue)
  #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob)
#else
  #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse)
  #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob)
#else
  #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False)
#endif
#define __Pyx_NoneAsNull(obj)  (__Pyx_Py_IsNone(obj) ? NULL : (obj))
#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
#else
  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
#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 Py_TPFLAGS_SEQUENCE
  #define Py_TPFLAGS_SEQUENCE 0
#endif
#ifndef Py_TPFLAGS_MAPPING
  #define Py_TPFLAGS_MAPPING 0
#endif
#ifndef Py_TPFLAGS_IMMUTABLETYPE
  #define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
#endif
#ifndef Py_TPFLAGS_DISALLOW_INSTANTIATION
  #define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7)
#endif
#ifndef METH_STACKLESS
  #define METH_STACKLESS 0
#endif
#ifndef 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
  #if PY_VERSION_HEX >= 0x030d00A4
  #  define __Pyx_PyCFunctionFast PyCFunctionFast
  #  define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords
  #else
  #  define __Pyx_PyCFunctionFast _PyCFunctionFast
  #  define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
  #endif
#endif
#if CYTHON_METH_FASTCALL
  #define __Pyx_METH_FASTCALL METH_FASTCALL
  #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast
  #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords
#else
  #define __Pyx_METH_FASTCALL METH_VARARGS
  #define __Pyx_PyCFunction_FastCall PyCFunction
  #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords
#endif
#if CYTHON_VECTORCALL
  #define __pyx_vectorcallfunc vectorcallfunc
  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  PY_VECTORCALL_ARGUMENTS_OFFSET
  #define __Pyx_PyVectorcall_NARGS(n)  PyVectorcall_NARGS((size_t)(n))
#else
  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  0
  #define __Pyx_PyVectorcall_NARGS(n)  ((Py_ssize_t)(n))
#endif
#if PY_VERSION_HEX >= 0x030900B1
#define __Pyx_PyCFunction_CheckExact(func)  PyCFunction_CheckExact(func)
#else
#define __Pyx_PyCFunction_CheckExact(func)  PyCFunction_Check(func)
#endif
#define __Pyx_CyOrPyCFunction_Check(func)  PyCFunction_Check(func)
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func)  (((PyCFunctionObject*)(func))->m_ml->ml_meth)
#elif !CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func)  PyCFunction_GET_FUNCTION(func)
#endif
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CyOrPyCFunction_GET_FLAGS(func)  (((PyCFunctionObject*)(func))->m_ml->ml_flags)
static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) {
    return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self;
}
#endif
static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void (*cfunc)(void)) {
#if CYTHON_COMPILING_IN_LIMITED_API
    return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
#else
    return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
#endif
}
#define __Pyx_IsSameCFunction(func, cfunc)   __Pyx__IsSameCFunction(func, cfunc)
#if PY_VERSION_HEX < 0x03090000 || (CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000)
  #define __Pyx_PyType_FromModuleAndSpec(m, s, b)  ((void)m, PyType_FromSpecWithBases(s, b))
  typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *);
#else
  #define __Pyx_PyType_FromModuleAndSpec(m, s, b)  PyType_FromModuleAndSpec(m, s, b)
  #define __Pyx_PyCMethod  PyCMethod
#endif
#ifndef METH_METHOD
  #define METH_METHOD 0x200
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
  #define PyObject_Malloc(s)   PyMem_Malloc(s)
  #define PyObject_Free(p)     PyMem_Free(p)
  #define PyObject_Realloc(p)  PyMem_Realloc(p)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)
#elif CYTHON_COMPILING_IN_GRAAL && defined(GRAALPY_VERSION_NUM) && GRAALPY_VERSION_NUM > 0x19000000
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) GraalPyFrame_SetLineNumber((frame), (lineno))
#elif CYTHON_COMPILING_IN_GRAAL
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #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_COMPILING_IN_LIMITED_API
  #define __Pyx_PyThreadState_Current PyThreadState_Get()
#elif !CYTHON_FAST_THREAD_STATE
  #define __Pyx_PyThreadState_Current PyThreadState_GET()
#elif PY_VERSION_HEX >= 0x030d00A1
  #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked()
#else
  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
#endif
#if CYTHON_USE_MODULE_STATE
static CYTHON_INLINE void *__Pyx__PyModule_GetState(PyObject *op)
{
    void *result;
    result = PyModule_GetState(op);
    if (!result)
        Py_FatalError("Couldn't find the module state");
    return result;
}
#define __Pyx_PyModule_GetState(o) (__pyx_mstatetype *)__Pyx__PyModule_GetState(o)
#else
#define __Pyx_PyModule_GetState(op) ((void)op,__pyx_mstate_global)
#endif
#define __Pyx_PyObject_GetSlot(obj, name, func_ctype)  __Pyx_PyType_GetSlot(Py_TYPE((PyObject *) obj), name, func_ctype)
#define __Pyx_PyObject_TryGetSlot(obj, name, func_ctype) __Pyx_PyType_TryGetSlot(Py_TYPE(obj), name, func_ctype)
#define __Pyx_PyObject_GetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_GetSubSlot(Py_TYPE(obj), sub, name, func_ctype)
#define __Pyx_PyObject_TryGetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_TryGetSubSlot(Py_TYPE(obj), sub, name, func_ctype)
#if CYTHON_USE_TYPE_SLOTS
  #define __Pyx_PyType_GetSlot(type, name, func_ctype)  ((type)->name)
  #define __Pyx_PyType_TryGetSlot(type, name, func_ctype) __Pyx_PyType_GetSlot(type, name, func_ctype)
  #define __Pyx_PyType_GetSubSlot(type, sub, name, func_ctype) (((type)->sub) ? ((type)->sub->name) : NULL)
  #define __Pyx_PyType_TryGetSubSlot(type, sub, name, func_ctype) __Pyx_PyType_GetSubSlot(type, sub, name, func_ctype)
#else
  #define __Pyx_PyType_GetSlot(type, name, func_ctype)  ((func_ctype) PyType_GetSlot((type), Py_##name))
  #define __Pyx_PyType_TryGetSlot(type, name, func_ctype)\
    ((__PYX_LIMITED_VERSION_HEX >= 0x030A0000 ||\
     (PyType_GetFlags(type) & Py_TPFLAGS_HEAPTYPE) || __Pyx_get_runtime_version() >= 0x030A0000) ?\
     __Pyx_PyType_GetSlot(type, name, func_ctype) : NULL)
  #define __Pyx_PyType_GetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_GetSlot(obj, name, func_ctype)
  #define __Pyx_PyType_TryGetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_TryGetSlot(obj, name, func_ctype)
#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
#define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
#define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_UNICODE_INTERNALS
#define __Pyx_PyDict_GetItemStrWithError(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) {
    PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name);
    if (res == NULL) PyErr_Clear();
    return res;
}
#elif !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000
#define __Pyx_PyDict_GetItemStrWithError  PyDict_GetItemWithError
#define __Pyx_PyDict_GetItemStr           PyDict_GetItem
#else
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) {
#if CYTHON_COMPILING_IN_PYPY
    return PyDict_GetItem(dict, name);
#else
    PyDictEntry *ep;
    PyDictObject *mp = (PyDictObject*) dict;
    long hash = ((PyStringObject *) name)->ob_shash;
    assert(hash != -1);
    ep = (mp->ma_lookup)(mp, name, hash);
    if (ep == NULL) {
        return NULL;
    }
    return ep->me_value;
#endif
}
#define __Pyx_PyDict_GetItemStr           PyDict_GetItem
#endif
#if CYTHON_USE_TYPE_SLOTS
  #define __Pyx_PyType_GetFlags(tp)   (((PyTypeObject *)tp)->tp_flags)
  #define __Pyx_PyType_HasFeature(type, feature)  ((__Pyx_PyType_GetFlags(type) & (feature)) != 0)
#else
  #define __Pyx_PyType_GetFlags(tp)   (PyType_GetFlags((PyTypeObject *)tp))
  #define __Pyx_PyType_HasFeature(type, feature)  PyType_HasFeature(type, feature)
#endif
#define __Pyx_PyObject_GetIterNextFunc(iterator)  __Pyx_PyObject_GetSlot(iterator, tp_iternext, iternextfunc)
#if CYTHON_USE_TYPE_SPECS
#define __Pyx_PyHeapTypeObject_GC_Del(obj)  {\
    PyTypeObject *type = Py_TYPE((PyObject*)obj);\
    assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\
    PyObject_GC_Del(obj);\
    Py_DECREF(type);\
}
#else
#define __Pyx_PyHeapTypeObject_GC_Del(obj)  PyObject_GC_Del(obj)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
  #define __Pyx_PyUnicode_READY(op)       (0)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i)
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((void)u, 1114111U)
  #define __Pyx_PyUnicode_KIND(u)         ((void)u, (0))
  #define __Pyx_PyUnicode_DATA(u)         ((void*)u)
  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)k, PyUnicode_ReadChar((PyObject*)(d), i))
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GetLength(u))
#else
  #if PY_VERSION_HEX >= 0x030C0000
    #define __Pyx_PyUnicode_READY(op)       (0)
  #else
    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                                0 : _PyUnicode_Ready((PyObject *)(op)))
  #endif
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
  #define __Pyx_PyUnicode_KIND(u)         ((int)PyUnicode_KIND(u))
  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, (Py_UCS4) ch)
  #if PY_VERSION_HEX >= 0x030C0000
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
  #else
    #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
    #else
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
    #endif
  #endif
#endif
#if CYTHON_COMPILING_IN_PYPY
  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
#else
  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
#endif
#if CYTHON_COMPILING_IN_PYPY
  #if !defined(PyUnicode_DecodeUnicodeEscape)
    #define PyUnicode_DecodeUnicodeEscape(s, size, errors)  PyUnicode_Decode(s, size, "unicode_escape", errors)
  #endif
  #if !defined(PyUnicode_Contains)
    #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
  #endif
  #if !defined(PyByteArray_Check)
    #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
  #endif
  #if !defined(PyObject_Format)
    #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
  #endif
#endif
#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  #define __Pyx_PySequence_ListKeepNew(obj)\
    (likely(PyList_CheckExact(obj) && PyUnstable_Object_IsUniquelyReferenced(obj)) ? __Pyx_NewRef(obj) : PySequence_List(obj))
#elif CYTHON_COMPILING_IN_CPYTHON
  #define __Pyx_PySequence_ListKeepNew(obj)\
    (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj))
#else
  #define __Pyx_PySequence_ListKeepNew(obj)  PySequence_List(obj)
#endif
#ifndef PySet_CheckExact
  #define PySet_CheckExact(obj)        __Pyx_IS_TYPE(obj, &PySet_Type)
#endif
#if PY_VERSION_HEX >= 0x030900A4
  #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
  #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
#else
  #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
  #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
#endif
enum __Pyx_ReferenceSharing {
  __Pyx_ReferenceSharing_DefinitelyUnique, // We created it so we know it's unshared - no need to check
  __Pyx_ReferenceSharing_OwnStrongReference,
  __Pyx_ReferenceSharing_FunctionArgument,
  __Pyx_ReferenceSharing_SharedReference, // Never trust it to be unshared because it's a global or similar
};
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && PY_VERSION_HEX >= 0x030E0000
#define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing)\
    (sharing == __Pyx_ReferenceSharing_DefinitelyUnique ? 1 :\
      (sharing == __Pyx_ReferenceSharing_FunctionArgument ? PyUnstable_Object_IsUniqueReferencedTemporary(o) :\
      (sharing == __Pyx_ReferenceSharing_OwnStrongReference ? PyUnstable_Object_IsUniquelyReferenced(o) : 0)))
#elif (CYTHON_COMPILING_IN_CPYTHON && !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING) || CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing) (((void)sharing), Py_REFCNT(o) == 1)
#else
#define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing) (((void)o), ((void)sharing), 0)
#endif
#if CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
  #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
    #define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
  #elif CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
    #define __Pyx_PyList_GetItemRef(o, i) (likely((i) >= 0) ? PySequence_GetItem(o, i) : (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
  #else
    #define __Pyx_PyList_GetItemRef(o, i) PySequence_ITEM(o, i)
  #endif
#elif CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
  #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
    #define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
  #else
    #define __Pyx_PyList_GetItemRef(o, i) __Pyx_XNewRef(PyList_GetItem(o, i))
  #endif
#else
  #define __Pyx_PyList_GetItemRef(o, i) __Pyx_NewRef(PyList_GET_ITEM(o, i))
#endif
#if CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS && !CYTHON_COMPILING_IN_LIMITED_API && CYTHON_ASSUME_SAFE_MACROS
  #define __Pyx_PyList_GetItemRefFast(o, i, unsafe_shared) (__Pyx_IS_UNIQUELY_REFERENCED(o, unsafe_shared) ?\
    __Pyx_NewRef(PyList_GET_ITEM(o, i)) : __Pyx_PyList_GetItemRef(o, i))
#else
  #define __Pyx_PyList_GetItemRefFast(o, i, unsafe_shared) __Pyx_PyList_GetItemRef(o, i)
#endif
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
#define __Pyx_PyDict_GetItemRef(dict, key, result) PyDict_GetItemRef(dict, key, result)
#elif CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObject *key, PyObject **result) {
  *result = PyObject_GetItem(dict, key);
  if (*result == NULL) {
    if (PyErr_ExceptionMatches(PyExc_KeyError)) {
      PyErr_Clear();
      return 0;
    }
    return -1;
  }
  return 1;
}
#else
static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObject *key, PyObject **result) {
  *result = PyDict_GetItemWithError(dict, key);
  if (*result == NULL) {
    return PyErr_Occurred() ? -1 : 0;
  }
  Py_INCREF(*result);
  return 1;
}
#endif
#if defined(CYTHON_DEBUG_VISIT_CONST) && CYTHON_DEBUG_VISIT_CONST
  #define __Pyx_VISIT_CONST(obj)  Py_VISIT(obj)
#else
  #define __Pyx_VISIT_CONST(obj)
#endif
#if CYTHON_ASSUME_SAFE_MACROS
  #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i)
  #define __Pyx_PySequence_SIZE(seq)  Py_SIZE(seq)
  #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0))
  #define __Pyx_PyTuple_GET_ITEM(o, i) PyTuple_GET_ITEM(o, i)
  #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0))
  #define __Pyx_PyList_GET_ITEM(o, i) PyList_GET_ITEM(o, i)
#else
  #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i)
  #define __Pyx_PySequence_SIZE(seq)  PySequence_Size(seq)
  #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v)
  #define __Pyx_PyTuple_GET_ITEM(o, i) PyTuple_GetItem(o, i)
  #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v)
  #define __Pyx_PyList_GET_ITEM(o, i) PyList_GetItem(o, i)
#endif
#if CYTHON_ASSUME_SAFE_SIZE
  #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o)
  #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o)
  #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o)
  #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o)
  #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o)
  #define __Pyx_PyUnicode_GET_LENGTH(o) PyUnicode_GET_LENGTH(o)
#else
  #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o)
  #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o)
  #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o)
  #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o)
  #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o)
  #define __Pyx_PyUnicode_GET_LENGTH(o) PyUnicode_GetLength(o)
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_InternFromString)
  #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
#endif
#define __Pyx_PyLong_FromHash_t PyLong_FromSsize_t
#define __Pyx_PyLong_AsHash_t   __Pyx_PyIndex_AsSsize_t
#if __PYX_LIMITED_VERSION_HEX >= 0x030A0000
    #define __Pyx_PySendResult PySendResult
#else
    typedef enum {
        PYGEN_RETURN = 0,
        PYGEN_ERROR = -1,
        PYGEN_NEXT = 1,
    } __Pyx_PySendResult;
#endif
#if CYTHON_COMPILING_IN_LIMITED_API || PY_VERSION_HEX < 0x030A00A3
  typedef __Pyx_PySendResult (*__Pyx_pyiter_sendfunc)(PyObject *iter, PyObject *value, PyObject **result);
#else
  #define __Pyx_pyiter_sendfunc sendfunc
#endif
#if !CYTHON_USE_AM_SEND
#define __PYX_HAS_PY_AM_SEND 0
#elif __PYX_LIMITED_VERSION_HEX >= 0x030A0000
#define __PYX_HAS_PY_AM_SEND 1
#else
#define __PYX_HAS_PY_AM_SEND 2  // our own backported implementation
#endif
#if __PYX_HAS_PY_AM_SEND < 2
    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
#else
    typedef struct {
        unaryfunc am_await;
        unaryfunc am_aiter;
        unaryfunc am_anext;
        __Pyx_pyiter_sendfunc am_send;
    } __Pyx_PyAsyncMethodsStruct;
    #define __Pyx_SlotTpAsAsync(s) ((PyAsyncMethods*)(s))
#endif
#if CYTHON_USE_AM_SEND && PY_VERSION_HEX < 0x030A00F0
    #define __Pyx_TPFLAGS_HAVE_AM_SEND (1UL << 21)
#else
    #define __Pyx_TPFLAGS_HAVE_AM_SEND (0)
#endif
#if PY_VERSION_HEX >= 0x03090000
#define __Pyx_PyInterpreterState_Get() PyInterpreterState_Get()
#else
#define __Pyx_PyInterpreterState_Get() PyThreadState_Get()->interp
#endif
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030A0000
#ifdef __cplusplus
extern "C"
#endif
PyAPI_FUNC(void *) PyMem_Calloc(size_t nelem, size_t elsize);
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_init_co_variable(PyObject *inspect, const char* name, int *write_to) {
    int value;
    PyObject *py_value = PyObject_GetAttrString(inspect, name);
    if (!py_value) return 0;
    value = (int) PyLong_AsLong(py_value);
    Py_DECREF(py_value);
    *write_to = value;
    return value != -1 || !PyErr_Occurred();
}
static int __Pyx_init_co_variables(void) {
    PyObject *inspect;
    int result;
    inspect = PyImport_ImportModule("inspect");
    result =
#if !defined(CO_OPTIMIZED)
        __Pyx_init_co_variable(inspect, "CO_OPTIMIZED", &CO_OPTIMIZED) &&
#endif
#if !defined(CO_NEWLOCALS)
        __Pyx_init_co_variable(inspect, "CO_NEWLOCALS", &CO_NEWLOCALS) &&
#endif
#if !defined(CO_VARARGS)
        __Pyx_init_co_variable(inspect, "CO_VARARGS", &CO_VARARGS) &&
#endif
#if !defined(CO_VARKEYWORDS)
        __Pyx_init_co_variable(inspect, "CO_VARKEYWORDS", &CO_VARKEYWORDS) &&
#endif
#if !defined(CO_ASYNC_GENERATOR)
        __Pyx_init_co_variable(inspect, "CO_ASYNC_GENERATOR", &CO_ASYNC_GENERATOR) &&
#endif
#if !defined(CO_GENERATOR)
        __Pyx_init_co_variable(inspect, "CO_GENERATOR", &CO_GENERATOR) &&
#endif
#if !defined(CO_COROUTINE)
        __Pyx_init_co_variable(inspect, "CO_COROUTINE", &CO_COROUTINE) &&
#endif
        1;
    Py_DECREF(inspect);
    return result ? 0 : -1;
}
#else
static int __Pyx_init_co_variables(void) {
    return 0;  // It's a limited API-only feature
}
#endif

/* MathInitCode */
#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
  #ifndef _USE_MATH_DEFINES
    #define _USE_MATH_DEFINES
  #endif
#endif
#include <math.h>
#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
#define __Pyx_truncl trunc
#else
#define __Pyx_truncl truncl
#endif

#ifndef CYTHON_CLINE_IN_TRACEBACK_RUNTIME
#define CYTHON_CLINE_IN_TRACEBACK_RUNTIME 0
#endif
#ifndef CYTHON_CLINE_IN_TRACEBACK
#define CYTHON_CLINE_IN_TRACEBACK CYTHON_CLINE_IN_TRACEBACK_RUNTIME
#endif
#if CYTHON_CLINE_IN_TRACEBACK
#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; }
#else
#define __PYX_MARK_ERR_POS(f_index, lineno)  { __pyx_filename = __pyx_f[f_index]; (void) __pyx_filename; __pyx_lineno = lineno; (void) __pyx_lineno; (void) __pyx_clineno; }
#endif
#define __PYX_ERR(f_index, lineno, Ln_error) \
    { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }

#ifdef CYTHON_EXTERN_C
    #undef __PYX_EXTERN_C
    #define __PYX_EXTERN_C CYTHON_EXTERN_C
#elif defined(__PYX_EXTERN_C)
    #ifdef _MSC_VER
    #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
    #else
    #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
    #endif
#else
    #define __PYX_EXTERN_C extern "C++"
#endif

#define __PYX_HAVE__pygcgopt__gcg
#define __PYX_HAVE_API__pygcgopt__gcg
/* Early includes */
#include "scip/type_retcode.h"
#include "scip/type_var.h"
#include "scip/type_prob.h"
#include "lpi/type_lpi.h"
#include "scip/type_lp.h"
#include "scip/type_result.h"
#include "scip/type_stat.h"
#include "scip/type_set.h"
#include "scip/type_tree.h"
#include "scip/type_paramset.h"
#include "scip/type_timing.h"
#include "scip/type_expr.h"
#include "scip/type_event.h"
#include "scip/type_benders.h"
#include "scip/type_history.h"
#include "scip/type_sol.h"
#include "scip/scip.h"
#include "scip/tree.h"
#include "scip/scipdefplugins.h"
#include "scip/bendersdefcuts.h"
#include "scip/cons_linear.h"
#include "scip/cons_knapsack.h"
#include "scip/cons_nonlinear.h"
#include "scip/cons_sos1.h"
#include "scip/cons_sos2.h"
#include "scip/cons_disjunction.h"
#include "scip/cons_and.h"
#include "scip/cons_or.h"
#include "scip/cons_xor.h"
#include "scip/scip_cons.h"
#include "blockmemshell/memory.h"
#include "scip/scip_expr.h"
#include "scip/pub_expr.h"
#include "scip/expr_var.h"
#include "scip/expr_varidx.h"
#include "scip/expr_value.h"
#include "scip/expr_sum.h"
#include "scip/expr_abs.h"
#include "scip/expr_exp.h"
#include "scip/expr_log.h"
#include "scip/expr_trig.h"
#include "scip/expr_product.h"
#include "scip/expr_pow.h"
#include "scip/pub_nlp.h"
#include "scip/scip_nlp.h"
#include "scip/cons_cardinality.h"
#include "scip/cons_indicator.h"
#include "scip/misc.h"
#include "scip/scip_copy.h"
#include "scip/heuristics.h"
#include "scip/cons_countsols.h"
#include "scip/paramset.h"
#include "scip/pub_lp.h"
#include "scip/scip_tree.h"
#include "scip/scip_var.h"
#include "tpi/tpi.h"
#include "ios"
#include "new"
#include "stdexcept"
#include "typeinfo"
#include <vector>
#include <string.h>
#include <string_view>
#include <string>
#include <utility>

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

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

    #endif
    
#include "limits.h"
#include "gcg/gcg.h"
#include "gcg/pub_gcgsepa.h"
#include "gcg/gcgplugins.h"
#include "gcg/pricer_gcg.h"
#include "gcg/pub_solver.h"
#include "gcg/pub_gcgcol.h"
#include "gcg/cons_decomp.h"
#include "gcg/cons_decomp.hpp"
#include "gcg/class_partialdecomp.h"
#include "gcg/class_detprobdata.h"
#include "gcg/class_conspartition.h"
#include "gcg/class_varpartition.h"
#include <stdio.h>

    #if PY_MAJOR_VERSION >= 3
      #define __Pyx_PyFloat_FromString(obj)  PyFloat_FromString(obj)
    #else
      #define __Pyx_PyFloat_FromString(obj)  PyFloat_FromString(obj, NULL)
    #endif
    
#include <stddef.h>

    #if PY_MAJOR_VERSION <= 2
    #define PyDict_GetItemWithError _PyDict_GetItemWithError
    #endif

    #if __PYX_LIMITED_VERSION_HEX < 0x030d0000
    static CYTHON_INLINE int
    __Pyx_CAPI_PyDict_GetItemStringRef(PyObject *mp, const char *key, PyObject **result)
    {
        int res;
        PyObject *key_obj = PyUnicode_FromString(key);
        if (key_obj == NULL) {
            *result = NULL;
            return -1;
        }
        res = __Pyx_PyDict_GetItemRef(mp, key_obj, result);
        Py_DECREF(key_obj);
        return res;
    }
    #else
    #define __Pyx_CAPI_PyDict_GetItemStringRef PyDict_GetItemStringRef
    #endif
    #if PY_VERSION_HEX < 0x030d0000 || (CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030F0000)
    static CYTHON_INLINE int
    __Pyx_CAPI_PyDict_SetDefaultRef(PyObject *d, PyObject *key, PyObject *default_value,
                        PyObject **result)
    {
        PyObject *value;
        if (__Pyx_PyDict_GetItemRef(d, key, &value) < 0) {
            // get error
            if (result) {
                *result = NULL;
            }
            return -1;
        }
        if (value != NULL) {
            // present
            if (result) {
                *result = value;
            }
            else {
                Py_DECREF(value);
            }
            return 1;
        }

        // missing: set the item
        if (PyDict_SetItem(d, key, default_value) < 0) {
            // set error
            if (result) {
                *result = NULL;
            }
            return -1;
        }
        if (result) {
            Py_INCREF(default_value);
            *result = default_value;
        }
        return 0;
    }
    #else
    #define __Pyx_CAPI_PyDict_SetDefaultRef PyDict_SetDefaultRef
    #endif
    

    #if PY_VERSION_HEX < 0x030d0000
    static CYTHON_INLINE int __Pyx_PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
    {
        PyObject *obj = PyWeakref_GetObject(ref);
        if (obj == NULL) {
            // SystemError if ref is NULL
            *pobj = NULL;
            return -1;
        }
        if (obj == Py_None) {
            *pobj = NULL;
            return 0;
        }
        Py_INCREF(obj);
        *pobj = obj;
        return 1;
    }
    #else
    #define __Pyx_PyWeakref_GetRef PyWeakref_GetRef
    #endif
    
#include "pythread.h"

    #if (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030600) && !defined(PyContextVar_Get)
    #define PyContextVar_Get(var, d, v)         ((d) ?             ((void)(var), Py_INCREF(d), (v)[0] = (d), 0) :             ((v)[0] = NULL, 0)         )
    #endif
    
#include <stdlib.h>
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

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

#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
#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 Py_ssize_t __Pyx_ssize_strlen(const char *s);
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*);
#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 CYTHON_ASSUME_SAFE_MACROS
    #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_PyByteArray_AsString(s) PyByteArray_AS_STRING(s)
#else
    #define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AsString(s))
    #define __Pyx_PyByteArray_AsString(s) PyByteArray_AsString(s)
#endif
#define __Pyx_PyObject_AsWritableString(s)    ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
#define __Pyx_PyUnicode_FromOrdinal(o)       PyUnicode_FromOrdinal((int)o)
#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
static CYTHON_INLINE PyObject *__Pyx_NewRef(PyObject *obj) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030a0000 || defined(Py_NewRef)
    return Py_NewRef(obj);
#else
    Py_INCREF(obj);
    return obj;
#endif
}
static CYTHON_INLINE PyObject *__Pyx_XNewRef(PyObject *obj) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030a0000 || defined(Py_XNewRef)
    return Py_XNewRef(obj);
#else
    Py_XINCREF(obj);
    return obj;
#endif
}
static CYTHON_INLINE PyObject *__Pyx_Owned_Py_None(int b);
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_Long(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_PyLong_FromSize_t(size_t);
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __Pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#define __Pyx_PyFloat_AS_DOUBLE(x) PyFloat_AS_DOUBLE(x)
#else
#define __Pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#define __Pyx_PyFloat_AS_DOUBLE(x) PyFloat_AsDouble(x)
#endif
#define __Pyx_PyFloat_AsFloat(x) ((float) __Pyx_PyFloat_AsDouble(x))
#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
#if CYTHON_USE_PYLONG_INTERNALS
  #if PY_VERSION_HEX >= 0x030C00A7
  #ifndef _PyLong_SIGN_MASK
    #define _PyLong_SIGN_MASK 3
  #endif
  #ifndef _PyLong_NON_SIZE_BITS
    #define _PyLong_NON_SIZE_BITS 3
  #endif
  #define __Pyx_PyLong_Sign(x)  (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK)
  #define __Pyx_PyLong_IsNeg(x)  ((__Pyx_PyLong_Sign(x) & 2) != 0)
  #define __Pyx_PyLong_IsNonNeg(x)  (!__Pyx_PyLong_IsNeg(x))
  #define __Pyx_PyLong_IsZero(x)  (__Pyx_PyLong_Sign(x) & 1)
  #define __Pyx_PyLong_IsPos(x)  (__Pyx_PyLong_Sign(x) == 0)
  #define __Pyx_PyLong_CompactValueUnsigned(x)  (__Pyx_PyLong_Digits(x)[0])
  #define __Pyx_PyLong_DigitCount(x)  ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS))
  #define __Pyx_PyLong_SignedDigitCount(x)\
        ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x))
  #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue)
    #define __Pyx_PyLong_IsCompact(x)     PyUnstable_Long_IsCompact((PyLongObject*) x)
    #define __Pyx_PyLong_CompactValue(x)  PyUnstable_Long_CompactValue((PyLongObject*) x)
  #else
    #define __Pyx_PyLong_IsCompact(x)     (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS))
    #define __Pyx_PyLong_CompactValue(x)  ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0])
  #endif
  typedef Py_ssize_t  __Pyx_compact_pylong;
  typedef size_t  __Pyx_compact_upylong;
  #else
  #define __Pyx_PyLong_IsNeg(x)  (Py_SIZE(x) < 0)
  #define __Pyx_PyLong_IsNonNeg(x)  (Py_SIZE(x) >= 0)
  #define __Pyx_PyLong_IsZero(x)  (Py_SIZE(x) == 0)
  #define __Pyx_PyLong_IsPos(x)  (Py_SIZE(x) > 0)
  #define __Pyx_PyLong_CompactValueUnsigned(x)  ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0])
  #define __Pyx_PyLong_DigitCount(x)  __Pyx_sst_abs(Py_SIZE(x))
  #define __Pyx_PyLong_SignedDigitCount(x)  Py_SIZE(x)
  #define __Pyx_PyLong_IsCompact(x)  (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1)
  #define __Pyx_PyLong_CompactValue(x)\
        ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0]))
  typedef sdigit  __Pyx_compact_pylong;
  typedef digit  __Pyx_compact_upylong;
  #endif
  #if PY_VERSION_HEX >= 0x030C00A5
  #define __Pyx_PyLong_Digits(x)  (((PyLongObject*)x)->long_value.ob_digit)
  #else
  #define __Pyx_PyLong_Digits(x)  (((PyLongObject*)x)->ob_digit)
  #endif
#endif
#if __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
#elif __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeASCII(c_str, size, NULL)
#else
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
#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__ */
/* PretendToInitialize */
#ifdef __cplusplus
#if __cplusplus > 201103L
#include <type_traits>
#endif
template <typename T>
static void __Pyx_pretend_to_initialize(T* ptr) {
#if __cplusplus > 201103L
    if ((std::is_trivially_default_constructible<T>::value))
#endif
        *ptr = T();
    (void)ptr;
}
#else
static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
#endif


#if !CYTHON_USE_MODULE_STATE
static PyObject *__pyx_m = NULL;
#endif
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * const __pyx_cfilenm = __FILE__;
static const char *__pyx_filename;

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

static const char* const __pyx_f[] = {
  "src/pygcgopt/gcg.pyx",
  "src/pygcgopt/consclassifier.pxi",
  "<stringsource>",
  "cpython/contextvars.pxd",
  "src/pygcgopt/detector.pxi",
  "src/pygcgopt/pricing_solver.pxi",
  "src/pygcgopt/score.pxi",
  "src/pygcgopt/partition.pxi",
  "src/pygcgopt/decomposition.pxi",
  "src/pygcgopt/detprobdata.pxi",
  "src/pygcgopt/varclassifier.pxi",
  "pyscipopt/scip.pxd",
  "cpython/type.pxd",
  "cpython/bool.pxd",
  "cpython/complex.pxd",
};
/* #### Code section: utility_code_proto_before_types ### */
/* Atomics.proto (used by UnpackUnboundCMethod) */
#include <pythread.h>
#ifndef CYTHON_ATOMICS
    #define CYTHON_ATOMICS 1
#endif
#define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS
#define __PYX_GET_CYTHON_COMPILING_IN_CPYTHON_FREETHREADING() CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#define __pyx_atomic_int_type int
#define __pyx_nonatomic_int_type int
#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
                        (__STDC_VERSION__ >= 201112L) &&\
                        !defined(__STDC_NO_ATOMICS__))
    #include <stdatomic.h>
#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
                    (__cplusplus >= 201103L) ||\
                    (defined(_MSC_VER) && _MSC_VER >= 1700)))
    #include <atomic>
#endif
#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
                        (__STDC_VERSION__ >= 201112L) &&\
                        !defined(__STDC_NO_ATOMICS__) &&\
                       ATOMIC_INT_LOCK_FREE == 2)
    #undef __pyx_atomic_int_type
    #define __pyx_atomic_int_type atomic_int
    #define __pyx_atomic_ptr_type atomic_uintptr_t
    #define __pyx_nonatomic_ptr_type uintptr_t
    #define __pyx_atomic_incr_relaxed(value) atomic_fetch_add_explicit(value, 1, memory_order_relaxed)
    #define __pyx_atomic_incr_acq_rel(value) atomic_fetch_add_explicit(value, 1, memory_order_acq_rel)
    #define __pyx_atomic_decr_acq_rel(value) atomic_fetch_sub_explicit(value, 1, memory_order_acq_rel)
    #define __pyx_atomic_sub(value, arg) atomic_fetch_sub(value, arg)
    #define __pyx_atomic_int_cmp_exchange(value, expected, desired) atomic_compare_exchange_strong(value, expected, desired)
    #define __pyx_atomic_load(value) atomic_load(value)
    #define __pyx_atomic_store(value, new_value) atomic_store(value, new_value)
    #define __pyx_atomic_pointer_load_relaxed(value) atomic_load_explicit(value, memory_order_relaxed)
    #define __pyx_atomic_pointer_load_acquire(value) atomic_load_explicit(value, memory_order_acquire)
    #define __pyx_atomic_pointer_exchange(value, new_value) atomic_exchange(value, (__pyx_nonatomic_ptr_type)new_value)
    #define __pyx_atomic_pointer_cmp_exchange(value, expected, desired) atomic_compare_exchange_strong(value, expected, desired)
    #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
        #pragma message ("Using standard C atomics")
    #elif defined(__PYX_DEBUG_ATOMICS)
        #warning "Using standard C atomics"
    #endif
#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
                    (__cplusplus >= 201103L) ||\
\
                    (defined(_MSC_VER) && _MSC_VER >= 1700)) &&\
                    ATOMIC_INT_LOCK_FREE == 2)
    #undef __pyx_atomic_int_type
    #define __pyx_atomic_int_type std::atomic_int
    #define __pyx_atomic_ptr_type std::atomic_uintptr_t
    #define __pyx_nonatomic_ptr_type uintptr_t
    #define __pyx_atomic_incr_relaxed(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_relaxed)
    #define __pyx_atomic_incr_acq_rel(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_acq_rel)
    #define __pyx_atomic_decr_acq_rel(value) std::atomic_fetch_sub_explicit(value, 1, std::memory_order_acq_rel)
    #define __pyx_atomic_sub(value, arg) std::atomic_fetch_sub(value, arg)
    #define __pyx_atomic_int_cmp_exchange(value, expected, desired) std::atomic_compare_exchange_strong(value, expected, desired)
    #define __pyx_atomic_load(value) std::atomic_load(value)
    #define __pyx_atomic_store(value, new_value) std::atomic_store(value, new_value)
    #define __pyx_atomic_pointer_load_relaxed(value) std::atomic_load_explicit(value, std::memory_order_relaxed)
    #define __pyx_atomic_pointer_load_acquire(value) std::atomic_load_explicit(value, std::memory_order_acquire)
    #define __pyx_atomic_pointer_exchange(value, new_value) std::atomic_exchange(value, (__pyx_nonatomic_ptr_type)new_value)
    #define __pyx_atomic_pointer_cmp_exchange(value, expected, desired) std::atomic_compare_exchange_strong(value, expected, desired)
    #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
        #pragma message ("Using standard C++ atomics")
    #elif defined(__PYX_DEBUG_ATOMICS)
        #warning "Using standard C++ atomics"
    #endif
#elif CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\
                    (__GNUC_MINOR__ > 1 ||\
                    (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 2))))
    #define __pyx_atomic_ptr_type void*
    #define __pyx_nonatomic_ptr_type void*
    #define __pyx_atomic_incr_relaxed(value) __sync_fetch_and_add(value, 1)
    #define __pyx_atomic_incr_acq_rel(value) __sync_fetch_and_add(value, 1)
    #define __pyx_atomic_decr_acq_rel(value) __sync_fetch_and_sub(value, 1)
    #define __pyx_atomic_sub(value, arg) __sync_fetch_and_sub(value, arg)
    static CYTHON_INLINE int __pyx_atomic_int_cmp_exchange(__pyx_atomic_int_type* value, __pyx_nonatomic_int_type* expected, __pyx_nonatomic_int_type desired) {
        __pyx_nonatomic_int_type old = __sync_val_compare_and_swap(value, *expected, desired);
        int result = old == *expected;
        *expected = old;
        return result;
    }
    #define __pyx_atomic_load(value) __sync_fetch_and_add(value, 0)
    #define __pyx_atomic_store(value, new_value) __sync_lock_test_and_set(value, new_value)
    #define __pyx_atomic_pointer_load_relaxed(value) __sync_fetch_and_add(value, 0)
    #define __pyx_atomic_pointer_load_acquire(value) __sync_fetch_and_add(value, 0)
    #define __pyx_atomic_pointer_exchange(value, new_value) __sync_lock_test_and_set(value, (__pyx_atomic_ptr_type)new_value)
    static CYTHON_INLINE int __pyx_atomic_pointer_cmp_exchange(__pyx_atomic_ptr_type* value, __pyx_nonatomic_ptr_type* expected, __pyx_nonatomic_ptr_type desired) {
        __pyx_nonatomic_ptr_type old = __sync_val_compare_and_swap(value, *expected, desired);
        int result = old == *expected;
        *expected = old;
        return result;
    }
    #ifdef __PYX_DEBUG_ATOMICS
        #warning "Using GNU atomics"
    #endif
#elif CYTHON_ATOMICS && defined(_MSC_VER)
    #include <intrin.h>
    #undef __pyx_atomic_int_type
    #define __pyx_atomic_int_type long
    #define __pyx_atomic_ptr_type void*
    #undef __pyx_nonatomic_int_type
    #define __pyx_nonatomic_int_type long
    #define __pyx_nonatomic_ptr_type void*
    #pragma intrinsic (_InterlockedExchangeAdd, _InterlockedExchange, _InterlockedCompareExchange, _InterlockedCompareExchangePointer, _InterlockedExchangePointer)
    #define __pyx_atomic_incr_relaxed(value) _InterlockedExchangeAdd(value, 1)
    #define __pyx_atomic_incr_acq_rel(value) _InterlockedExchangeAdd(value, 1)
    #define __pyx_atomic_decr_acq_rel(value) _InterlockedExchangeAdd(value, -1)
    #define __pyx_atomic_sub(value, arg) _InterlockedExchangeAdd(value, -arg)
    static CYTHON_INLINE int __pyx_atomic_int_cmp_exchange(__pyx_atomic_int_type* value, __pyx_nonatomic_int_type* expected, __pyx_nonatomic_int_type desired) {
        __pyx_nonatomic_int_type old = _InterlockedCompareExchange(value, desired, *expected);
        int result = old == *expected;
        *expected = old;
        return result;
    }
    #define __pyx_atomic_load(value) _InterlockedExchangeAdd(value, 0)
    #define __pyx_atomic_store(value, new_value) _InterlockedExchange(value, new_value)
    #define __pyx_atomic_pointer_load_relaxed(value) *(void * volatile *)value
    #define __pyx_atomic_pointer_load_acquire(value) _InterlockedCompareExchangePointer(value, 0, 0)
    #define __pyx_atomic_pointer_exchange(value, new_value) _InterlockedExchangePointer(value, (__pyx_atomic_ptr_type)new_value)
    static CYTHON_INLINE int __pyx_atomic_pointer_cmp_exchange(__pyx_atomic_ptr_type* value, __pyx_nonatomic_ptr_type* expected, __pyx_nonatomic_ptr_type desired) {
        __pyx_atomic_ptr_type old = _InterlockedCompareExchangePointer(value, desired, *expected);
        int result = old == *expected;
        *expected = old;
        return result;
    }
    #ifdef __PYX_DEBUG_ATOMICS
        #pragma message ("Using MSVC atomics")
    #endif
#else
    #undef CYTHON_ATOMICS
    #define CYTHON_ATOMICS 0
    #ifdef __PYX_DEBUG_ATOMICS
        #warning "Not using atomics"
    #endif
#endif

/* CriticalSectionsDefinition.proto (used by CriticalSections) */
#if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#define __Pyx_PyCriticalSection void*
#define __Pyx_PyCriticalSection2 void*
#define __Pyx_PyCriticalSection_End(cs)
#define __Pyx_PyCriticalSection2_End(cs)
#else
#define __Pyx_PyCriticalSection PyCriticalSection
#define __Pyx_PyCriticalSection2 PyCriticalSection2
#define __Pyx_PyCriticalSection_End PyCriticalSection_End
#define __Pyx_PyCriticalSection2_End PyCriticalSection2_End
#endif

/* CriticalSections.proto (used by ParseKeywordsImpl) */
#if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#define __Pyx_PyCriticalSection_Begin(cs, arg) (void)(cs)
#define __Pyx_PyCriticalSection2_Begin(cs, arg1, arg2) (void)(cs)
#else
#define __Pyx_PyCriticalSection_Begin PyCriticalSection_Begin
#define __Pyx_PyCriticalSection2_Begin PyCriticalSection2_Begin
#endif
#if PY_VERSION_HEX < 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_BEGIN_CRITICAL_SECTION(o) {
#define __Pyx_END_CRITICAL_SECTION() }
#else
#define __Pyx_BEGIN_CRITICAL_SECTION Py_BEGIN_CRITICAL_SECTION
#define __Pyx_END_CRITICAL_SECTION Py_END_CRITICAL_SECTION
#endif

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

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

/* IncludeStructmemberH.proto (used by FixUpExtensionType) */
#include <structmember.h>

/* #### Code section: numeric_typedefs ### */
/* #### Code section: complex_type_declarations ### */
/* #### Code section: type_declarations ### */

/*--- Type declarations ---*/
struct __pyx_obj_9pyscipopt_4scip_Expr;
struct __pyx_obj_9pyscipopt_4scip_Event;
struct __pyx_obj_9pyscipopt_4scip_Column;
struct __pyx_obj_9pyscipopt_4scip_ColumnExact;
struct __pyx_obj_9pyscipopt_4scip_Row;
struct __pyx_obj_9pyscipopt_4scip_RowExact;
struct __pyx_obj_9pyscipopt_4scip_NLRow;
struct __pyx_obj_9pyscipopt_4scip_Solution;
struct __pyx_obj_9pyscipopt_4scip_DomainChanges;
struct __pyx_obj_9pyscipopt_4scip_BoundChange;
struct __pyx_obj_9pyscipopt_4scip_Node;
struct __pyx_obj_9pyscipopt_4scip_Variable;
struct __pyx_obj_9pyscipopt_4scip_Constraint;
struct __pyx_obj_9pyscipopt_4scip_IIS;
struct __pyx_obj_9pyscipopt_4scip_Model;
struct __pyx_obj_8pygcgopt_3gcg_DetProbData;
struct __pyx_obj_8pygcgopt_3gcg_ConsPart;
struct __pyx_obj_8pygcgopt_3gcg_VarPart;
struct __pyx_obj_8pygcgopt_3gcg_GCGColumn;
struct __pyx_obj_8pygcgopt_3gcg_Detector;
struct __pyx_obj_8pygcgopt_3gcg_PricingSolver;
struct __pyx_obj_8pygcgopt_3gcg_Score;
struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition;
struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier;
struct __pyx_obj_8pygcgopt_3gcg_VarClassifier;
struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS;
struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN;
struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO;
struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO;
struct __pyx_obj_8pygcgopt_3gcg_Model;
struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel;
struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel;
struct __pyx_opt_args_7cpython_11contextvars_get_value;
struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default;

/* "cpython/contextvars.pxd":116
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 * cdef inline object get_value(var, default_value=None):             # <<<<<<<<<<<<<<
 *     """Return a new reference to the value of the context variable,
 *     or the default value of the context variable,
*/
struct __pyx_opt_args_7cpython_11contextvars_get_value {
  int __pyx_n;
  PyObject *default_value;
};

/* "cpython/contextvars.pxd":134
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 * cdef inline object get_value_no_default(var, default_value=None):             # <<<<<<<<<<<<<<
 *     """Return a new reference to the value of the context variable,
 *     or the provided default value if no such value was found.
*/
struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default {
  int __pyx_n;
  PyObject *default_value;
};
struct __pyx_opt_args_8pygcgopt_3gcg_20PartialDecomposition___generate_visualization;

/* "src/pygcgopt/decomposition.pxi":1398
 *         return self.__generate_visualization("png")
 * 
 *     cdef __generate_visualization(self, format="svg"):             # <<<<<<<<<<<<<<
 *         format = format.lower()
 *         if format not in ["svg", "png"]:
*/
struct __pyx_opt_args_8pygcgopt_3gcg_20PartialDecomposition___generate_visualization {
  int __pyx_n;
  PyObject *format;
};

/* "pyscipopt/scip.pxd":2110
 *     int SCIPtpiGetNumThreads()
 * 
 * cdef class Expr:             # <<<<<<<<<<<<<<
 *     cdef public terms
 * 
*/
struct __pyx_obj_9pyscipopt_4scip_Expr {
  PyObject_HEAD
  PyObject *terms;
};


/* "pyscipopt/scip.pxd":2113
 *     cdef public terms
 * 
 * cdef class Event:             # <<<<<<<<<<<<<<
 *     cdef SCIP_EVENT* event
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_Event {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_Event *__pyx_vtab;
  SCIP_EVENT *event;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2120
 *     cdef create(SCIP_EVENT* scip_event)
 * 
 * cdef class Column:             # <<<<<<<<<<<<<<
 *     cdef SCIP_COL* scip_col
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_Column {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_Column *__pyx_vtab;
  SCIP_COL *scip_col;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2128
 *     cdef create(SCIP_COL* scipcol)
 * 
 * cdef class ColumnExact:             # <<<<<<<<<<<<<<
 *     cdef SCIP_COLEXACT* scip_col_exact
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_ColumnExact {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_ColumnExact *__pyx_vtab;
  SCIP_COLEXACT *scip_col_exact;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2136
 *     cdef create(SCIP_COLEXACT* scip_col_exact)
 * 
 * cdef class Row:             # <<<<<<<<<<<<<<
 *     cdef SCIP_ROW* scip_row
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_Row {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_Row *__pyx_vtab;
  SCIP_ROW *scip_row;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2144
 *     cdef create(SCIP_ROW* sciprow)
 * 
 * cdef class RowExact:             # <<<<<<<<<<<<<<
 *     cdef SCIP_ROWEXACT* scip_row_exact
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_RowExact {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_RowExact *__pyx_vtab;
  SCIP_ROWEXACT *scip_row_exact;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2152
 *     cdef create(SCIP_ROWEXACT* scip_row_exact)
 * 
 * cdef class NLRow:             # <<<<<<<<<<<<<<
 *     cdef SCIP_NLROW* scip_nlrow
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_NLRow {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_NLRow *__pyx_vtab;
  SCIP_NLROW *scip_nlrow;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2160
 *     cdef create(SCIP_NLROW* scipnlrow)
 * 
 * cdef class Solution:             # <<<<<<<<<<<<<<
 *     cdef SCIP_SOL* sol
 *     cdef SCIP* scip
*/
struct __pyx_obj_9pyscipopt_4scip_Solution {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_Solution *__pyx_vtab;
  SCIP_SOL *sol;
  SCIP *scip;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2169
 *     cdef create(SCIP* scip, SCIP_SOL* scip_sol)
 * 
 * cdef class DomainChanges:             # <<<<<<<<<<<<<<
 *     cdef SCIP_DOMCHG* scip_domchg
 * 
*/
struct __pyx_obj_9pyscipopt_4scip_DomainChanges {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_DomainChanges *__pyx_vtab;
  SCIP_DOMCHG *scip_domchg;
};


/* "pyscipopt/scip.pxd":2175
 *     cdef create(SCIP_DOMCHG* scip_domchg)
 * 
 * cdef class BoundChange:             # <<<<<<<<<<<<<<
 *     cdef SCIP_BOUNDCHG* scip_boundchg
 * 
*/
struct __pyx_obj_9pyscipopt_4scip_BoundChange {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_BoundChange *__pyx_vtab;
  SCIP_BOUNDCHG *scip_boundchg;
};


/* "pyscipopt/scip.pxd":2181
 *     cdef create(SCIP_BOUNDCHG* scip_boundchg)
 * 
 * cdef class Node:             # <<<<<<<<<<<<<<
 *     cdef SCIP_NODE* scip_node
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_Node {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_Node *__pyx_vtab;
  SCIP_NODE *scip_node;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2189
 *     cdef create(SCIP_NODE* scipnode)
 * 
 * cdef class Variable(Expr):             # <<<<<<<<<<<<<<
 *     cdef SCIP_VAR* scip_var
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_Variable {
  struct __pyx_obj_9pyscipopt_4scip_Expr __pyx_base;
  struct __pyx_vtabstruct_9pyscipopt_4scip_Variable *__pyx_vtab;
  SCIP_VAR *scip_var;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2197
 *     cdef create(SCIP_VAR* scipvar)
 * 
 * cdef class Constraint:             # <<<<<<<<<<<<<<
 *     cdef SCIP_CONS* scip_cons
 *     # can be used to store problem data
*/
struct __pyx_obj_9pyscipopt_4scip_Constraint {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_Constraint *__pyx_vtab;
  SCIP_CONS *scip_cons;
  PyObject *data;
};


/* "pyscipopt/scip.pxd":2205
 *     cdef create(SCIP_CONS* scipcons)
 * 
 * cdef class IIS:             # <<<<<<<<<<<<<<
 *     cdef SCIP_IIS* _iis
 * 
*/
struct __pyx_obj_9pyscipopt_4scip_IIS {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_IIS *__pyx_vtab;
  SCIP_IIS *_iis;
};


/* "pyscipopt/scip.pxd":2211
 *     cdef create(SCIP_IIS* iis)
 * 
 * cdef class Model:             # <<<<<<<<<<<<<<
 *     cdef SCIP* _scip
 *     cdef SCIP_Bool* _valid
*/
struct __pyx_obj_9pyscipopt_4scip_Model {
  PyObject_HEAD
  struct __pyx_vtabstruct_9pyscipopt_4scip_Model *__pyx_vtab;
  SCIP *_scip;
  SCIP_Bool *_valid;
  struct __pyx_obj_9pyscipopt_4scip_Solution *_bestSol;
  PyObject *data;
  PyObject *__weakref__;
  SCIP_Bool _freescip;
  PyObject *_modelvars;
  int _generated_event_handlers_count;
  PyObject *_benders_subproblems;
  SCIP_IIS *_iis;
};


/* "pygcgopt/gcg.pxd":530
 *     SCIP_Real SCIPgetClockTime(SCIP* scip, SCIP_CLOCK* clck)
 * 
 * cdef class DetProbData:             # <<<<<<<<<<<<<<
 *     cdef DETPROBDATA* thisptr
 * 
*/
struct __pyx_obj_8pygcgopt_3gcg_DetProbData {
  PyObject_HEAD
  struct __pyx_vtabstruct_8pygcgopt_3gcg_DetProbData *__pyx_vtab;
  gcg::DETPROBDATA *thisptr;
};


/* "pygcgopt/gcg.pxd":536
 *     cdef create(DETPROBDATA* thisptr)
 * 
 * cdef class ConsPart:             # <<<<<<<<<<<<<<
 *     cdef ConsPartition* consPartition
 *     cdef DetProbData detProbData
*/
struct __pyx_obj_8pygcgopt_3gcg_ConsPart {
  PyObject_HEAD
  struct __pyx_vtabstruct_8pygcgopt_3gcg_ConsPart *__pyx_vtab;
  gcg::ConsPartition *consPartition;
  struct __pyx_obj_8pygcgopt_3gcg_DetProbData *detProbData;
};


/* "pygcgopt/gcg.pxd":543
 *     cdef create(ConsPartition* thisptr, DetProbData detProbData)
 * 
 * cdef class VarPart:             # <<<<<<<<<<<<<<
 *     cdef VarPartition* varPartition
 *     cdef DetProbData detProbData
*/
struct __pyx_obj_8pygcgopt_3gcg_VarPart {
  PyObject_HEAD
  struct __pyx_vtabstruct_8pygcgopt_3gcg_VarPart *__pyx_vtab;
  gcg::VarPartition *varPartition;
  struct __pyx_obj_8pygcgopt_3gcg_DetProbData *detProbData;
};


/* "pygcgopt/gcg.pxd":550
 *     cdef create(VarPartition* thisptr, DetProbData detProbData)
 * 
 * cdef class GCGColumn:             # <<<<<<<<<<<<<<
 *     cdef GCG_COL* gcg_col
 * 
*/
struct __pyx_obj_8pygcgopt_3gcg_GCGColumn {
  PyObject_HEAD
  struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGColumn *__pyx_vtab;
  GCG_COL *gcg_col;
};


/* "src/pygcgopt/detector.pxi":1
 * cdef class Detector:             # <<<<<<<<<<<<<<
 *     """Base class of the Detector Plugin"""
 *     cdef public Model model
*/
struct __pyx_obj_8pygcgopt_3gcg_Detector {
  PyObject_HEAD
  struct __pyx_obj_8pygcgopt_3gcg_Model *model;
  PyObject *detectorname;
};


/* "src/pygcgopt/pricing_solver.pxi":1
 * cdef class PricingSolver:             # <<<<<<<<<<<<<<
 *     """Base class of the Pricing Solver Plugin"""
 * 
*/
struct __pyx_obj_8pygcgopt_3gcg_PricingSolver {
  PyObject_HEAD
  struct __pyx_obj_8pygcgopt_3gcg_Model *model;
  PyObject *solvername;
};


/* "src/pygcgopt/score.pxi":1
 * cdef class Score:             # <<<<<<<<<<<<<<
 *     """Base class of the Score Plugin"""
 * 
*/
struct __pyx_obj_8pygcgopt_3gcg_Score {
  PyObject_HEAD
  struct __pyx_obj_8pygcgopt_3gcg_Model *model;
  PyObject *scorename;
};


/* "src/pygcgopt/decomposition.pxi":1
 * cdef class PartialDecomposition:             # <<<<<<<<<<<<<<
 *     """class to manage partial decompositions
 * 
*/
struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition {
  PyObject_HEAD
  struct __pyx_vtabstruct_8pygcgopt_3gcg_PartialDecomposition *__pyx_vtab;
  gcg::PARTIALDECOMP *thisptr;
  bool delete_thisptr;
  PyObject *_visualizations;
  PyObject *py_block_id_map;
};


/* "src/pygcgopt/consclassifier.pxi":1
 * cdef class ConsClassifier:             # <<<<<<<<<<<<<<
 *     """Base class of the Constraint Classifier Plugin"""
 *     cdef public Model model
*/
struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier {
  PyObject_HEAD
  struct __pyx_obj_8pygcgopt_3gcg_Model *model;
  PyObject *name;
};


/* "src/pygcgopt/varclassifier.pxi":1
 * cdef class VarClassifier:             # <<<<<<<<<<<<<<
 *     """Base class of the Variable Classifier Plugin"""
 *     cdef public Model model
*/
struct __pyx_obj_8pygcgopt_3gcg_VarClassifier {
  PyObject_HEAD
  struct __pyx_obj_8pygcgopt_3gcg_Model *model;
  PyObject *name;
};


/* "pygcgopt/gcg.pyx":49
 * 
 * 
 * cdef class PY_GCG_PRICINGSTATUS:             # <<<<<<<<<<<<<<
 *     UNKNOWN       = GCG_PRICINGSTATUS_UNKNOWN
 *     NOTAPPLICABLE = GCG_PRICINGSTATUS_NOTAPPLICABLE
*/
struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS {
  PyObject_HEAD
};


/* "pygcgopt/gcg.pyx":57
 *     UNBOUNDED     = GCG_PRICINGSTATUS_UNBOUNDED
 * 
 * cdef class PY_USERGIVEN:             # <<<<<<<<<<<<<<
 *     PY_NOT                    = NOT
 *     PY_PARTIAL                = PARTIAL
*/
struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN {
  PyObject_HEAD
};


/* "pygcgopt/gcg.pyx":63
 *     PY_COMPLETED_CONSTOMASTER = COMPLETED_CONSTOMASTER
 * 
 * cdef class PY_VAR_DECOMPINFO:             # <<<<<<<<<<<<<<
 *     PY_ALL     = ALL
 *     PY_LINKING = LINKING
*/
struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO {
  PyObject_HEAD
};


/* "pygcgopt/gcg.pyx":69
 *     PY_BLOCK   = BLOCK
 * 
 * cdef class PY_CONS_DECOMPINFO:             # <<<<<<<<<<<<<<
 *     PY_BOTH         = BOTH
 *     PY_ONLY_MASTER  = ONLY_MASTER
*/
struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO {
  PyObject_HEAD
};


/* "pygcgopt/gcg.pyx":74
 *     PY_ONLY_PRICING = ONLY_PRICING
 * 
 * cdef class Model(SCIPModel):             # <<<<<<<<<<<<<<
 *     """Main class for interaction with the GCG solver."""
 * 
*/
struct __pyx_obj_8pygcgopt_3gcg_Model {
  struct __pyx_obj_9pyscipopt_4scip_Model __pyx_base;
  GCG *_gcg;
};


/* "pygcgopt/gcg.pyx":560
 * 
 * 
 * cdef class GCGPricingModel(SCIPModel):             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     cdef create(SCIP* scip):
*/
struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel {
  struct __pyx_obj_9pyscipopt_4scip_Model __pyx_base;
};


/* "pygcgopt/gcg.pyx":601
 * 
 * 
 * cdef class GCGMasterModel(SCIPModel):             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     cdef create(SCIP* scip):
*/
struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel {
  struct __pyx_obj_9pyscipopt_4scip_Model __pyx_base;
};



/* "pyscipopt/scip.pxd":2113
 *     cdef public terms
 * 
 * cdef class Event:             # <<<<<<<<<<<<<<
 *     cdef SCIP_EVENT* event
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_Event {
  PyObject *(*create)(SCIP_EVENT *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_Event *__pyx_vtabptr_9pyscipopt_4scip_Event;


/* "pyscipopt/scip.pxd":2120
 *     cdef create(SCIP_EVENT* scip_event)
 * 
 * cdef class Column:             # <<<<<<<<<<<<<<
 *     cdef SCIP_COL* scip_col
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_Column {
  PyObject *(*create)(SCIP_COL *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_Column *__pyx_vtabptr_9pyscipopt_4scip_Column;


/* "pyscipopt/scip.pxd":2128
 *     cdef create(SCIP_COL* scipcol)
 * 
 * cdef class ColumnExact:             # <<<<<<<<<<<<<<
 *     cdef SCIP_COLEXACT* scip_col_exact
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_ColumnExact {
  PyObject *(*create)(SCIP_COLEXACT *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_ColumnExact *__pyx_vtabptr_9pyscipopt_4scip_ColumnExact;


/* "pyscipopt/scip.pxd":2136
 *     cdef create(SCIP_COLEXACT* scip_col_exact)
 * 
 * cdef class Row:             # <<<<<<<<<<<<<<
 *     cdef SCIP_ROW* scip_row
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_Row {
  PyObject *(*create)(SCIP_ROW *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_Row *__pyx_vtabptr_9pyscipopt_4scip_Row;


/* "pyscipopt/scip.pxd":2144
 *     cdef create(SCIP_ROW* sciprow)
 * 
 * cdef class RowExact:             # <<<<<<<<<<<<<<
 *     cdef SCIP_ROWEXACT* scip_row_exact
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_RowExact {
  PyObject *(*create)(SCIP_ROWEXACT *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_RowExact *__pyx_vtabptr_9pyscipopt_4scip_RowExact;


/* "pyscipopt/scip.pxd":2152
 *     cdef create(SCIP_ROWEXACT* scip_row_exact)
 * 
 * cdef class NLRow:             # <<<<<<<<<<<<<<
 *     cdef SCIP_NLROW* scip_nlrow
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_NLRow {
  PyObject *(*create)(SCIP_NLROW *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_NLRow *__pyx_vtabptr_9pyscipopt_4scip_NLRow;


/* "pyscipopt/scip.pxd":2160
 *     cdef create(SCIP_NLROW* scipnlrow)
 * 
 * cdef class Solution:             # <<<<<<<<<<<<<<
 *     cdef SCIP_SOL* sol
 *     cdef SCIP* scip
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_Solution {
  PyObject *(*create)(SCIP *, SCIP_SOL *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_Solution *__pyx_vtabptr_9pyscipopt_4scip_Solution;


/* "pyscipopt/scip.pxd":2169
 *     cdef create(SCIP* scip, SCIP_SOL* scip_sol)
 * 
 * cdef class DomainChanges:             # <<<<<<<<<<<<<<
 *     cdef SCIP_DOMCHG* scip_domchg
 * 
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_DomainChanges {
  PyObject *(*create)(SCIP_DOMCHG *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_DomainChanges *__pyx_vtabptr_9pyscipopt_4scip_DomainChanges;


/* "pyscipopt/scip.pxd":2175
 *     cdef create(SCIP_DOMCHG* scip_domchg)
 * 
 * cdef class BoundChange:             # <<<<<<<<<<<<<<
 *     cdef SCIP_BOUNDCHG* scip_boundchg
 * 
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_BoundChange {
  PyObject *(*create)(SCIP_BOUNDCHG *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_BoundChange *__pyx_vtabptr_9pyscipopt_4scip_BoundChange;


/* "pyscipopt/scip.pxd":2181
 *     cdef create(SCIP_BOUNDCHG* scip_boundchg)
 * 
 * cdef class Node:             # <<<<<<<<<<<<<<
 *     cdef SCIP_NODE* scip_node
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_Node {
  PyObject *(*create)(SCIP_NODE *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_Node *__pyx_vtabptr_9pyscipopt_4scip_Node;


/* "pyscipopt/scip.pxd":2189
 *     cdef create(SCIP_NODE* scipnode)
 * 
 * cdef class Variable(Expr):             # <<<<<<<<<<<<<<
 *     cdef SCIP_VAR* scip_var
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_Variable {
  PyObject *(*create)(SCIP_VAR *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_Variable *__pyx_vtabptr_9pyscipopt_4scip_Variable;


/* "pyscipopt/scip.pxd":2197
 *     cdef create(SCIP_VAR* scipvar)
 * 
 * cdef class Constraint:             # <<<<<<<<<<<<<<
 *     cdef SCIP_CONS* scip_cons
 *     # can be used to store problem data
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_Constraint {
  PyObject *(*create)(SCIP_CONS *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_Constraint *__pyx_vtabptr_9pyscipopt_4scip_Constraint;


/* "pyscipopt/scip.pxd":2205
 *     cdef create(SCIP_CONS* scipcons)
 * 
 * cdef class IIS:             # <<<<<<<<<<<<<<
 *     cdef SCIP_IIS* _iis
 * 
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_IIS {
  PyObject *(*create)(SCIP_IIS *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_IIS *__pyx_vtabptr_9pyscipopt_4scip_IIS;


/* "pyscipopt/scip.pxd":2211
 *     cdef create(SCIP_IIS* iis)
 * 
 * cdef class Model:             # <<<<<<<<<<<<<<
 *     cdef SCIP* _scip
 *     cdef SCIP_Bool* _valid
*/

struct __pyx_vtabstruct_9pyscipopt_4scip_Model {
  PyObject *(*create)(SCIP *);
};
static struct __pyx_vtabstruct_9pyscipopt_4scip_Model *__pyx_vtabptr_9pyscipopt_4scip_Model;


/* "src/pygcgopt/detprobdata.pxi":1
 * cdef class DetProbData:             # <<<<<<<<<<<<<<
 *     """Base class holding a pointer to corresponding DETPROBDATA"""
 * 
*/

struct __pyx_vtabstruct_8pygcgopt_3gcg_DetProbData {
  PyObject *(*create)(gcg::DETPROBDATA *);
};
static struct __pyx_vtabstruct_8pygcgopt_3gcg_DetProbData *__pyx_vtabptr_8pygcgopt_3gcg_DetProbData;


/* "src/pygcgopt/partition.pxi":1
 * cdef class ConsPart:             # <<<<<<<<<<<<<<
 *     """Base class holding a pointer to corresponding ConsPartition"""
 * 
*/

struct __pyx_vtabstruct_8pygcgopt_3gcg_ConsPart {
  PyObject *(*create)(gcg::ConsPartition *, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *);
};
static struct __pyx_vtabstruct_8pygcgopt_3gcg_ConsPart *__pyx_vtabptr_8pygcgopt_3gcg_ConsPart;


/* "src/pygcgopt/partition.pxi":200
 *         self.consPartition.setClassDecompInfo(classindex, decompInfo)
 * 
 * cdef class VarPart:             # <<<<<<<<<<<<<<
 *     """Base class holding a pointer to corresponding VarPartition"""
 * 
*/

struct __pyx_vtabstruct_8pygcgopt_3gcg_VarPart {
  PyObject *(*create)(gcg::VarPartition *, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *);
};
static struct __pyx_vtabstruct_8pygcgopt_3gcg_VarPart *__pyx_vtabptr_8pygcgopt_3gcg_VarPart;


/* "pygcgopt/gcg.pyx":628
 * 
 * 
 * cdef class GCGColumn:             # <<<<<<<<<<<<<<
 *     """Base class holding a pointer to corresponding GCG_COL"""
 * 
*/

struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGColumn {
  PyObject *(*create)(GCG_COL *);
};
static struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGColumn *__pyx_vtabptr_8pygcgopt_3gcg_GCGColumn;


/* "src/pygcgopt/decomposition.pxi":1
 * cdef class PartialDecomposition:             # <<<<<<<<<<<<<<
 *     """class to manage partial decompositions
 * 
*/

struct __pyx_vtabstruct_8pygcgopt_3gcg_PartialDecomposition {
  PyObject *(*create)(gcg::PARTIALDECOMP *);
  PyObject *(*_PartialDecomposition__generate_visualization)(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *, struct __pyx_opt_args_8pygcgopt_3gcg_20PartialDecomposition___generate_visualization *__pyx_optional_args);
};
static struct __pyx_vtabstruct_8pygcgopt_3gcg_PartialDecomposition *__pyx_vtabptr_8pygcgopt_3gcg_PartialDecomposition;


/* "pygcgopt/gcg.pyx":74
 *     PY_ONLY_PRICING = ONLY_PRICING
 * 
 * cdef class Model(SCIPModel):             # <<<<<<<<<<<<<<
 *     """Main class for interaction with the GCG solver."""
 * 
*/

struct __pyx_vtabstruct_8pygcgopt_3gcg_Model {
  struct __pyx_vtabstruct_9pyscipopt_4scip_Model __pyx_base;
};
static struct __pyx_vtabstruct_8pygcgopt_3gcg_Model *__pyx_vtabptr_8pygcgopt_3gcg_Model;


/* "pygcgopt/gcg.pyx":560
 * 
 * 
 * cdef class GCGPricingModel(SCIPModel):             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     cdef create(SCIP* scip):
*/

struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGPricingModel {
  struct __pyx_vtabstruct_9pyscipopt_4scip_Model __pyx_base;
};
static struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGPricingModel *__pyx_vtabptr_8pygcgopt_3gcg_GCGPricingModel;


/* "pygcgopt/gcg.pyx":601
 * 
 * 
 * cdef class GCGMasterModel(SCIPModel):             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     cdef create(SCIP* scip):
*/

struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGMasterModel {
  struct __pyx_vtabstruct_9pyscipopt_4scip_Model __pyx_base;
};
static struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGMasterModel *__pyx_vtabptr_8pygcgopt_3gcg_GCGMasterModel;
/* #### Code section: utility_code_proto ### */

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

/* PyErrExceptionMatches.proto (used by PyObjectGetAttrStrNoError) */
#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 (used by PyErrFetchRestore) */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
#if PY_VERSION_HEX >= 0x030C00A6
#define __Pyx_PyErr_Occurred()  (__pyx_tstate->current_exception != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL)
#else
#define __Pyx_PyErr_Occurred()  (__pyx_tstate->curexc_type != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  (__pyx_tstate->curexc_type)
#endif
#else
#define __Pyx_PyThreadState_declare
#define __Pyx_PyThreadState_assign
#define __Pyx_PyErr_Occurred()  (PyErr_Occurred() != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  PyErr_Occurred()
#endif

/* PyErrFetchRestore.proto (used by PyObjectGetAttrStrNoError) */
#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 && PY_VERSION_HEX < 0x030C00A6
#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
#else
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#endif
#else
#define __Pyx_PyErr_Clear() PyErr_Clear()
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestoreInState(tstate, type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchInState(tstate, type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
#endif

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

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

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

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

/* TupleAndListFromArray.proto (used by fastcall) */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
#endif
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
#endif

/* IncludeStringH.proto (used by BytesEquals) */
#include <string.h>

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

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

/* fastcall.proto */
#if CYTHON_AVOID_BORROWED_REFS
    #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_PySequence_ITEM(args, i)
#elif CYTHON_ASSUME_SAFE_MACROS
    #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_NewRef(__Pyx_PyTuple_GET_ITEM(args, i))
#else
    #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_XNewRef(PyTuple_GetItem(args, i))
#endif
#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds)
#define __Pyx_KwValues_VARARGS(args, nargs) NULL
#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s)
#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw)
#if CYTHON_METH_FASTCALL
    #define __Pyx_ArgRef_FASTCALL(args, i) __Pyx_NewRef(args[i])
    #define __Pyx_NumKwargs_FASTCALL(kwds) __Pyx_PyTuple_GET_SIZE(kwds)
    #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs))
    static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
    CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues);
  #else
    #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw)
  #endif
#else
    #define __Pyx_ArgRef_FASTCALL __Pyx_ArgRef_VARARGS
    #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS
    #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS
    #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS
    #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
#endif
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
#if CYTHON_METH_FASTCALL || (CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(args + start, stop - start)
#else
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
#endif

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

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

/* CallCFunction.proto (used by CallUnboundCMethod0) */
#define __Pyx_CallCFunction(cfunc, self, args)\
    ((PyCFunction)(void(*)(void))(cfunc)->func)(self, args)
#define __Pyx_CallCFunctionWithKeywords(cfunc, self, args, kwargs)\
    ((PyCFunctionWithKeywords)(void(*)(void))(cfunc)->func)(self, args, kwargs)
#define __Pyx_CallCFunctionFast(cfunc, self, args, nargs)\
    ((__Pyx_PyCFunctionFast)(void(*)(void))(PyCFunction)(cfunc)->func)(self, args, nargs)
#define __Pyx_CallCFunctionFastWithKeywords(cfunc, self, args, nargs, kwnames)\
    ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))(PyCFunction)(cfunc)->func)(self, args, nargs, kwnames)

/* PyObjectCall.proto (used by PyObjectFastCall) */
#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 (used by PyObjectFastCall) */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
#endif

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

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

/* UnpackUnboundCMethod.proto (used by CallUnboundCMethod0) */
typedef struct {
    PyObject *type;
    PyObject **method_name;
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && CYTHON_ATOMICS
    __pyx_atomic_int_type initialized;
#endif
    PyCFunction func;
    PyObject *method;
    int flag;
} __Pyx_CachedCFunction;
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
static CYTHON_INLINE int __Pyx_CachedCFunction_GetAndSetInitializing(__Pyx_CachedCFunction *cfunc) {
#if !CYTHON_ATOMICS
    return 1;
#else
    __pyx_nonatomic_int_type expected = 0;
    if (__pyx_atomic_int_cmp_exchange(&cfunc->initialized, &expected, 1)) {
        return 0;
    }
    return expected;
#endif
}
static CYTHON_INLINE void __Pyx_CachedCFunction_SetFinishedInitializing(__Pyx_CachedCFunction *cfunc) {
#if CYTHON_ATOMICS
    __pyx_atomic_store(&cfunc->initialized, 2);
#endif
}
#else
#define __Pyx_CachedCFunction_GetAndSetInitializing(cfunc) 2
#define __Pyx_CachedCFunction_SetFinishedInitializing(cfunc)
#endif

/* CallUnboundCMethod0.proto */
CYTHON_UNUSED
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
#else
#define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
#endif

/* py_dict_values.proto (used by OwnedDictNext) */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d);

/* OwnedDictNext.proto (used by RejectKeywords) */
#if CYTHON_AVOID_BORROWED_REFS
static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject **pkey, PyObject **pvalue);
#else
CYTHON_INLINE
static int __Pyx_PyDict_NextRef(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue);
#endif

/* RejectKeywords.export */
static void __Pyx_RejectKeywords(const char* function_name, PyObject *kwds);

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

/* ParseKeywordsImpl.export */
static int __Pyx_ParseKeywordsTuple(
    PyObject *kwds,
    PyObject * const *kwvalues,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs
);
static int __Pyx_ParseKeywordDictToDict(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name
);
static int __Pyx_ParseKeywordDict(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs
);

/* CallUnboundCMethod2.proto */
CYTHON_UNUSED
static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2);
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2);
#else
#define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2)  __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2)
#endif

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

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

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

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

/* PyDictVersioning.proto (used by GetModuleGlobalName) */
#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_XNewRef(__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)  do {\
    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_mstate_global->__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);\
} while(0)
#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
    PY_UINT64_T __pyx_dict_version;\
    PyObject *__pyx_dict_cached_value;\
    (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
} while(0)
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

/* PyTypeError_Check.proto */
#define __Pyx_PyExc_TypeError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_TypeError)

/* PyObjectFastCallMethod.proto */
#if CYTHON_VECTORCALL && PY_VERSION_HEX >= 0x03090000
#define __Pyx_PyObject_FastCallMethod(name, args, nargsf) PyObject_VectorcallMethod(name, args, nargsf, NULL)
#else
static PyObject *__Pyx_PyObject_FastCallMethod(PyObject *name, PyObject *const *args, size_t nargsf);
#endif

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

/* PyRange_Check.proto */
#if CYTHON_COMPILING_IN_PYPY && !defined(PyRange_Check)
  #define PyRange_Check(obj)  __Pyx_TypeCheck((obj), &PyRange_Type)
#endif

/* GetItemInt.proto */
#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck, unsafe_shared) :\
    (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, has_gil, unsafe_shared)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck, unsafe_shared) :\
    (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, int unsafe_shared);
#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck, unsafe_shared) :\
    (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, int unsafe_shared);
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, int unsafe_shared);

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

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

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

/* PyWarning_Check.proto */
#define __Pyx_PyExc_Warning_Check(obj)  __Pyx_TypeCheck(obj, PyExc_Warning)

/* decode_c_string_utf16.proto (used by decode_c_string) */
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_string.proto */
static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
         const char* cstring, 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));

/* ArgTypeTestFunc.export */
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);

/* ArgTypeTest.proto */
#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
    ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\
        __Pyx__ArgTypeTest(obj, type, name, exact))

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

/* ListAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
        Py_INCREF(x);
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
        L->ob_item[len] = x;
        #else
        PyList_SET_ITEM(list, len, x);
        #endif
        __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

/* MoveIfSupported.proto */
#if CYTHON_USE_CPP_STD_MOVE
  #include <utility>
  #define __PYX_STD_MOVE_IF_SUPPORTED(x) std::move(x)
#else
  #define __PYX_STD_MOVE_IF_SUPPORTED(x) x
#endif

/* 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);
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
        L->ob_item[len] = x;
        #else
        PyList_SET_ITEM(list, len, x);
        #endif
        __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

/* PyValueError_Check.proto */
#define __Pyx_PyExc_ValueError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_ValueError)

/* PyObjectFormatSimple.proto */
#if CYTHON_COMPILING_IN_PYPY
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        PyObject_Format(s, f))
#elif CYTHON_USE_TYPE_SLOTS
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\
        likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\
        PyObject_Format(s, f))
#else
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        PyObject_Format(s, f))
#endif

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

/* PyDictContains.proto */
static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) {
    int result = PyDict_Contains(dict, item);
    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
}

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

/* PyObject_Unicode.proto */
#define __Pyx_PyObject_Unicode(obj)\
    (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj))

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

/* GetTopmostException.proto (used by SaveResetException) */
#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
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

/* DictGetItem.proto */
#if !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

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

/* PyObjectDelAttr.proto (used by PyObjectSetAttrStr) */
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030d0000
#define __Pyx_PyObject_DelAttr(o, n) PyObject_SetAttr(o, n, NULL)
#else
#define __Pyx_PyObject_DelAttr(o, n) PyObject_DelAttr(o, n)
#endif

/* 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)   __Pyx_PyObject_DelAttr(o,n)
#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
#endif

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

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

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

/* object_ord.proto */
#define __Pyx_PyObject_Ord(c)\
    (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c))
static long __Pyx__PyObject_Ord(PyObject* c);

/* PyObjectVectorCallKwBuilder.proto (used by PyObjectVectorCallMethodKwBuilder) */
CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n);
#if CYTHON_VECTORCALL
#if PY_VERSION_HEX >= 0x03090000
#define __Pyx_Object_Vectorcall_CallFromBuilder PyObject_Vectorcall
#else
#define __Pyx_Object_Vectorcall_CallFromBuilder _PyObject_Vectorcall
#endif
#define __Pyx_MakeVectorcallBuilderKwds(n) PyTuple_New(n)
static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n);
static int __Pyx_VectorcallBuilder_AddArgStr(const char *key, PyObject *value, PyObject *builder, PyObject **args, int n);
#else
#define __Pyx_Object_Vectorcall_CallFromBuilder __Pyx_PyObject_FastCallDict
#define __Pyx_MakeVectorcallBuilderKwds(n) __Pyx_PyDict_NewPresized(n)
#define __Pyx_VectorcallBuilder_AddArg(key, value, builder, args, n) PyDict_SetItem(builder, key, value)
#define __Pyx_VectorcallBuilder_AddArgStr(key, value, builder, args, n) PyDict_SetItemString(builder, key, value)
#endif

/* PyObjectVectorCallMethodKwBuilder.proto */
#if CYTHON_VECTORCALL && PY_VERSION_HEX >= 0x03090000
#define __Pyx_Object_VectorcallMethod_CallFromBuilder PyObject_VectorcallMethod
#else
static PyObject *__Pyx_Object_VectorcallMethod_CallFromBuilder(PyObject *name, PyObject *const *args, size_t nargsf, PyObject *kwnames);
#endif

/* AllocateExtensionType.proto */
static PyObject *__Pyx_AllocateExtensionType(PyTypeObject *t, int is_final);

/* CallTypeTraverse.proto */
#if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
#define __Pyx_call_type_traverse(o, always_call, visit, arg) 0
#else
static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitproc visit, void *arg);
#endif

/* CallNextTpDealloc.proto */
static void __Pyx_call_next_tp_dealloc(PyObject* obj, destructor current_tp_dealloc);

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

/* LimitedApiGetTypeDict.proto (used by SetItemOnTypeDict) */
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_GetTypeDict(PyTypeObject *tp);
#endif

/* SetItemOnTypeDict.proto (used by FixUpExtensionType) */
static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObject *v);
#define __Pyx_SetItemOnTypeDict(tp, k, v) __Pyx__SetItemOnTypeDict((PyTypeObject*)tp, k, v)

/* FixUpExtensionType.proto */
static CYTHON_INLINE int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);

/* PyObjectGetMethod.proto (used by PyObjectCallMethod0) */
#if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
#endif

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

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

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

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

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

/* MergeVTables.proto */
static int __Pyx_MergeVtables(PyTypeObject *type);

/* DelItemOnTypeDict.proto (used by SetupReduce) */
static int __Pyx__DelItemOnTypeDict(PyTypeObject *tp, PyObject *k);
#define __Pyx_DelItemOnTypeDict(tp, k) __Pyx__DelItemOnTypeDict((PyTypeObject*)tp, k)

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

/* TypeImport.proto */
#ifndef __PYX_HAVE_RT_ImportType_proto_3_2_2
#define __PYX_HAVE_RT_ImportType_proto_3_2_2
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#include <stdalign.h>
#endif
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L
#define __PYX_GET_STRUCT_ALIGNMENT_3_2_2(s) alignof(s)
#else
#define __PYX_GET_STRUCT_ALIGNMENT_3_2_2(s) sizeof(void*)
#endif
enum __Pyx_ImportType_CheckSize_3_2_2 {
   __Pyx_ImportType_CheckSize_Error_3_2_2 = 0,
   __Pyx_ImportType_CheckSize_Warn_3_2_2 = 1,
   __Pyx_ImportType_CheckSize_Ignore_3_2_2 = 2
};
static PyTypeObject *__Pyx_ImportType_3_2_2(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_2_2 check_size);
#endif

/* HasAttr.proto (used by ImportImpl) */
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
#define __Pyx_HasAttr(o, n)  PyObject_HasAttrWithError(o, n)
#else
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
#endif

/* ImportImpl.export */
static PyObject *__Pyx__Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, PyObject *moddict, int level);

/* Import.proto */
static CYTHON_INLINE PyObject *__Pyx_Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, int level);

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

/* dict_setdefault.proto (used by FetchCommonType) */
static CYTHON_INLINE PyObject *__Pyx_PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *default_value);

/* AddModuleRef.proto (used by FetchSharedCythonModule) */
#if ((CYTHON_COMPILING_IN_CPYTHON_FREETHREADING ) ||\
     __PYX_LIMITED_VERSION_HEX < 0x030d0000)
  static PyObject *__Pyx_PyImport_AddModuleRef(const char *name);
#else
  #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
#endif

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

/* FetchCommonType.proto (used by CommonTypesMetaclass) */
static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases);

/* CommonTypesMetaclass.proto (used by CythonFunctionShared) */
static int __pyx_CommonTypesMetaclass_init(PyObject *module);
#define __Pyx_CommonTypesMetaclass_USED

/* PyMethodNew.proto (used by CythonFunctionShared) */
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ);

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

/* CythonFunctionShared.proto (used by CythonFunction) */
#define __Pyx_CyFunction_USED
#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
#define __Pyx_CYFUNCTION_CCLASS        0x04
#define __Pyx_CYFUNCTION_COROUTINE     0x08
#define __Pyx_CyFunction_GetClosure(f)\
    (((__pyx_CyFunctionObject *) (f))->func_closure)
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
  #define __Pyx_CyFunction_GetClassObj(f)\
      (((__pyx_CyFunctionObject *) (f))->func_classobj)
#else
  #define __Pyx_CyFunction_GetClassObj(f)\
      ((PyObject*) ((PyCMethodObject *) (f))->mm_class)
#endif
#define __Pyx_CyFunction_SetClassObj(f, classobj)\
    __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj))
#define __Pyx_CyFunction_Defaults(type, f)\
    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
typedef struct {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject_HEAD
    PyObject *func;
#elif PY_VERSION_HEX < 0x030900B1
    PyCFunctionObject func;
#else
    PyCMethodObject func;
#endif
#if CYTHON_COMPILING_IN_LIMITED_API && CYTHON_METH_FASTCALL
    __pyx_vectorcallfunc func_vectorcall;
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *func_weakreflist;
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    PyObject *func_dict;
#endif
    PyObject *func_name;
    PyObject *func_qualname;
    PyObject *func_doc;
    PyObject *func_globals;
    PyObject *func_code;
    PyObject *func_closure;
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    PyObject *func_classobj;
#endif
    PyObject *defaults;
    int flags;
    PyObject *defaults_tuple;
    PyObject *defaults_kwdict;
    PyObject *(*defaults_getter)(PyObject *);
    PyObject *func_annotations;
    PyObject *func_is_coroutine;
} __pyx_CyFunctionObject;
#undef __Pyx_CyOrPyCFunction_Check
#define __Pyx_CyFunction_Check(obj)  __Pyx_TypeCheck(obj, __pyx_mstate_global->__pyx_CyFunctionType)
#define __Pyx_CyOrPyCFunction_Check(obj)  __Pyx_TypeCheck2(obj, __pyx_mstate_global->__pyx_CyFunctionType, &PyCFunction_Type)
#define __Pyx_CyFunction_CheckExact(obj)  __Pyx_IS_TYPE(obj, __pyx_mstate_global->__pyx_CyFunctionType)
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void));
#undef __Pyx_IsSameCFunction
#define __Pyx_IsSameCFunction(func, cfunc)   __Pyx__IsSameCyOrCFunction(func, cfunc)
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml,
                                      int flags, PyObject* qualname,
                                      PyObject *closure,
                                      PyObject *module, PyObject *globals,
                                      PyObject* code);
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj);
static CYTHON_INLINE PyObject *__Pyx_CyFunction_InitDefaults(PyObject *func,
                                                         PyTypeObject *defaults_type);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
                                                            PyObject *tuple);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
                                                             PyObject *dict);
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
                                                              PyObject *dict);
static int __pyx_CyFunction_init(PyObject *module);
#if CYTHON_METH_FASTCALL
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall)
#else
#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall)
#endif
#endif

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

/* CLineInTraceback.proto (used by AddTraceback) */
#if CYTHON_CLINE_IN_TRACEBACK && CYTHON_CLINE_IN_TRACEBACK_RUNTIME
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
#else
#define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
#endif

/* CodeObjectCache.proto (used by AddTraceback) */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject __Pyx_CachedCodeObjectType;
#else
typedef PyCodeObject __Pyx_CachedCodeObjectType;
#endif
typedef struct {
    __Pyx_CachedCodeObjectType* code_object;
    int code_line;
} __Pyx_CodeObjectCacheEntry;
struct __Pyx_CodeObjectCache {
    int count;
    int max_count;
    __Pyx_CodeObjectCacheEntry* entries;
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_atomic_int_type accessor_count;
  #endif
};
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
static __Pyx_CachedCodeObjectType *__pyx_find_code_object(int code_line);
static void __pyx_insert_code_object(int code_line, __Pyx_CachedCodeObjectType* code_object);

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

/* CheckUnpickleChecksum.proto */
static CYTHON_INLINE int __Pyx_CheckUnpickleChecksum(long checksum, long checksum1, long checksum2, long checksum3, const char *members);

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

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

/* LengthHint.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_PyObject_LengthHint(o, defaultval)  (defaultval)
#else
#define __Pyx_PyObject_LengthHint(o, defaultval)  PyObject_LengthHint(o, defaultval)
#endif

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

/* CIntFromPy.proto */
static CYTHON_INLINE gcg::USERGIVEN __Pyx_PyLong_As_gcg_3a__3a_USERGIVEN(PyObject *);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_gcg_3a__3a_USERGIVEN(gcg::USERGIVEN value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_GCG_PRICINGSTATUS(GCG_PRICINGSTATUS value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_gcg_3a__3a_VAR_DECOMPINFO(gcg::VAR_DECOMPINFO value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_gcg_3a__3a_CONS_DECOMPINFO(gcg::CONS_DECOMPINFO value);

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

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

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

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_SCIP_RESULT(SCIP_RESULT value);

/* CIntFromPy.proto */
static CYTHON_INLINE SCIP_RESULT __Pyx_PyLong_As_SCIP_RESULT(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE GCG_PRICINGSTATUS __Pyx_PyLong_As_GCG_PRICINGSTATUS(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE gcg::CONS_DECOMPINFO __Pyx_PyLong_As_gcg_3a__3a_CONS_DECOMPINFO(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE gcg::VAR_DECOMPINFO __Pyx_PyLong_As_gcg_3a__3a_VAR_DECOMPINFO(PyObject *);

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

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

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_SCIP_RETCODE(SCIP_RETCODE value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_SCIP_STAGE(SCIP_STAGE value);

/* CIntFromPy.proto */
static CYTHON_INLINE SCIP_PARAMSETTING __Pyx_PyLong_As_SCIP_PARAMSETTING(PyObject *);

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

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

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

/* UpdateUnpickledDict.proto */
static int __Pyx_UpdateUnpickledDict(PyObject *obj, PyObject *state, Py_ssize_t index);

/* FormatTypeName.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%U"
#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
#define __Pyx_PyType_GetFullyQualifiedName PyType_GetFullyQualifiedName
#else
static __Pyx_TypeName __Pyx_PyType_GetFullyQualifiedName(PyTypeObject* tp);
#endif
#else  // !LIMITED_API
typedef const char *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%.200s"
#define __Pyx_PyType_GetFullyQualifiedName(tp) ((tp)->tp_name)
#define __Pyx_DECREF_TypeName(obj)
#endif

/* FastTypeChecks.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2)
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
#else
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2))
#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2) {
    return PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2);
}
#endif
#define __Pyx_PyErr_ExceptionMatches2(err1, err2)  __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2)
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
#ifdef PyExceptionInstance_Check
  #define __Pyx_PyBaseException_Check(obj) PyExceptionInstance_Check(obj)
#else
  #define __Pyx_PyBaseException_Check(obj) __Pyx_TypeCheck(obj, PyExc_BaseException)
#endif

/* GetRuntimeVersion.proto */
#if __PYX_LIMITED_VERSION_HEX < 0x030b0000
static unsigned long __Pyx_cached_runtime_version = 0;
static void __Pyx_init_runtime_version(void);
#else
#define __Pyx_init_runtime_version()
#endif
static unsigned long __Pyx_get_runtime_version(void);

/* CheckBinaryVersion.proto */
static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer);

/* DecompressString.proto */
static PyObject *__Pyx_DecompressString(const char *s, Py_ssize_t length, int algo);

/* MultiPhaseInitModuleState.proto */
#if CYTHON_PEP489_MULTI_PHASE_INIT && CYTHON_USE_MODULE_STATE
static PyObject *__Pyx_State_FindModule(void*);
static int __Pyx_State_AddModule(PyObject* module, void*);
static int __Pyx_State_RemoveModule(void*);
#elif CYTHON_USE_MODULE_STATE
#define __Pyx_State_FindModule PyState_FindModule
#define __Pyx_State_AddModule PyState_AddModule
#define __Pyx_State_RemoveModule PyState_RemoveModule
#endif

/* #### Code section: module_declarations ### */
/* CythonABIVersion.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
    #if CYTHON_METH_FASTCALL
        #define __PYX_FASTCALL_ABI_SUFFIX  "_fastcall"
    #else
        #define __PYX_FASTCALL_ABI_SUFFIX
    #endif
    #define __PYX_LIMITED_ABI_SUFFIX "limited" __PYX_FASTCALL_ABI_SUFFIX __PYX_AM_SEND_ABI_SUFFIX
#else
    #define __PYX_LIMITED_ABI_SUFFIX
#endif
#if __PYX_HAS_PY_AM_SEND == 1
    #define __PYX_AM_SEND_ABI_SUFFIX
#elif __PYX_HAS_PY_AM_SEND == 2
    #define __PYX_AM_SEND_ABI_SUFFIX "amsendbackport"
#else
    #define __PYX_AM_SEND_ABI_SUFFIX "noamsend"
#endif
#ifndef __PYX_MONITORING_ABI_SUFFIX
    #define __PYX_MONITORING_ABI_SUFFIX
#endif
#if CYTHON_USE_TP_FINALIZE
    #define __PYX_TP_FINALIZE_ABI_SUFFIX
#else
    #define __PYX_TP_FINALIZE_ABI_SUFFIX "nofinalize"
#endif
#if CYTHON_USE_FREELISTS || !defined(__Pyx_AsyncGen_USED)
    #define __PYX_FREELISTS_ABI_SUFFIX
#else
    #define __PYX_FREELISTS_ABI_SUFFIX "nofreelists"
#endif
#define CYTHON_ABI  __PYX_ABI_VERSION __PYX_LIMITED_ABI_SUFFIX __PYX_MONITORING_ABI_SUFFIX __PYX_TP_FINALIZE_ABI_SUFFIX __PYX_FREELISTS_ABI_SUFFIX __PYX_AM_SEND_ABI_SUFFIX
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self); /* proto*/
#endif
#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self); /* proto*/
#endif
static PyObject *__pyx_f_8pygcgopt_3gcg_8ConsPart_create(gcg::ConsPartition *__pyx_v_consPartition, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_detProbData); /* proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_7VarPart_create(gcg::VarPartition *__pyx_v_varPartition, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_detProbData); /* proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(gcg::PARTIALDECOMP *__pyx_v_thisptr); /* proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_20PartialDecomposition__PartialDecomposition__generate_visualization(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_opt_args_8pygcgopt_3gcg_20PartialDecomposition___generate_visualization *__pyx_optional_args); /* proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_11DetProbData_create(gcg::DETPROBDATA *__pyx_v_thisptr); /* proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_15GCGPricingModel_create(SCIP *__pyx_v_scip); /* proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_14GCGMasterModel_create(SCIP *__pyx_v_scip); /* proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_9GCGColumn_create(GCG_COL *__pyx_v_gcgcol); /* proto*/

/* Module declarations from "pyscipopt.scip" */

/* Module declarations from "libcpp" */

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

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

/* Module declarations from "libcpp.string_view" */

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

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

/* Module declarations from "libcpp.pair" */

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

/* Module declarations from "__builtin__" */

/* Module declarations from "cpython.type" */

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

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

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

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

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

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

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

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

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

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

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

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

/* Module declarations from "__builtin__" */

/* Module declarations from "cpython.bool" */

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

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

/* Module declarations from "cython" */

/* Module declarations from "__builtin__" */

/* Module declarations from "cpython.complex" */

/* Module declarations from "libc.stddef" */

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

/* Module declarations from "cpython.pyport" */

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

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

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

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

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

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

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

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

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

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

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

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

/* Module declarations from "cpython.contextvars" */

/* Module declarations from "cpython" */

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

/* Module declarations from "pygcgopt.gcg" */
static struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_f_8pygcgopt_3gcg_get_py_detector(GCG_DETECTOR *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_get_py_partialdec_detection_data(PARTIALDEC_DETECTION_DATA *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg_wrap_detector_callback_result(struct __pyx_obj_8pygcgopt_3gcg_Detector *, PARTIALDEC_DETECTION_DATA *, SCIP_RESULT *, PyObject *, double); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorFree(GCG *, GCG_DETECTOR *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorInit(GCG *, GCG_DETECTOR *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorExit(GCG *, GCG_DETECTOR *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorPropagatePartialdec(GCG *, GCG_DETECTOR *, PARTIALDEC_DETECTION_DATA *, SCIP_RESULT *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorFinishPartialdec(GCG *, GCG_DETECTOR *, PARTIALDEC_DETECTION_DATA *, SCIP_RESULT *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorPostprocessPartialdec(GCG *, GCG_DETECTOR *, PARTIALDEC_DETECTION_DATA *, SCIP_RESULT *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamAggressive(GCG *, GCG_DETECTOR *, SCIP_RESULT *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamDefault(GCG *, GCG_DETECTOR *, SCIP_RESULT *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamFast(GCG *, GCG_DETECTOR *, SCIP_RESULT *); /*proto*/
static struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(GCG_SOLVER *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverFree(GCG *, GCG_SOLVER *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverInit(GCG *, GCG_SOLVER *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverExit(GCG *, GCG_SOLVER *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverInitSol(GCG *, GCG_SOLVER *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverExitSol(GCG *, GCG_SOLVER *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverUpdate(GCG *, SCIP *, GCG_SOLVER *, int, SCIP_Bool, SCIP_Bool, SCIP_Bool); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverSolve(GCG *, SCIP *, GCG_SOLVER *, int, SCIP_Real, SCIP_Real *, GCG_PRICINGSTATUS *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverSolveHeur(GCG *, SCIP *, GCG_SOLVER *, int, SCIP_Real, SCIP_Real *, GCG_PRICINGSTATUS *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyScoreFree(GCG *, GCG_SCORE *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyScoreCalculate(GCG *, GCG_SCORE *, int, SCIP_Real *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyConsClassifierFree(GCG *, GCG_CONSCLASSIFIER *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyConsClassifierClassify(GCG *, GCG_CONSCLASSIFIER *, SCIP_Bool); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyVarClassifierFree(GCG *, GCG_VARCLASSIFIER *); /*proto*/
static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyVarClassifierClassify(GCG *, GCG_VARCLASSIFIER *, SCIP_Bool); /*proto*/
static SCIP_CLOCK *__pyx_f_8pygcgopt_3gcg_start_new_clock(GCG *); /*proto*/
static double __pyx_f_8pygcgopt_3gcg_stop_and_free_clock(GCG *, SCIP_CLOCK *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_Detector__set_state(struct __pyx_obj_8pygcgopt_3gcg_Detector *, PyObject *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PricingSolver__set_state(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *, PyObject *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_Score__set_state(struct __pyx_obj_8pygcgopt_3gcg_Score *, PyObject *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_ConsClassifier__set_state(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *, PyObject *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_VarClassifier__set_state(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *, PyObject *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS *, PyObject *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_USERGIVEN__set_state(struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN *, PyObject *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_VAR_DECOMPINFO__set_state(struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO *, PyObject *); /*proto*/
static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_CONS_DECOMPINFO__set_state(struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO *, PyObject *); /*proto*/
static PyObject *__pyx_convert_vector_to_py_int(std::vector<int>  const &); /*proto*/
static PyObject *__pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___(std::vector<std::vector<int> >  const &); /*proto*/
static PyObject *__pyx_convert_vector_to_py_double(std::vector<double>  const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string(std::string const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string(std::string const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string(std::string const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string(std::string const &); /*proto*/
static PyObject *__pyx_convert_vector_to_py_std_3a__3a_string(std::vector<std::string>  const &); /*proto*/
static PyObject *__pyx_convert_pair_to_py_int____int(std::pair<int,int>  const &); /*proto*/
static PyObject *__pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___(std::vector<std::pair<int,int> >  const &); /*proto*/
static std::pair<int,int>  __pyx_convert_pair_from_py_int__and_int(PyObject *); /*proto*/
static PyObject *__pyx_convert_vector_to_py_SCIP_Real(std::vector<SCIP_Real>  const &); /*proto*/
static std::vector<double>  __pyx_convert_vector_from_py_double(PyObject *); /*proto*/
static std::vector<int>  __pyx_convert_vector_from_py_int(PyObject *); /*proto*/
static std::vector<std::pair<int,int> >  __pyx_convert_vector_from_py_std_3a__3a_pair_3c_int_2c_int_3e___(PyObject *); /*proto*/
/* #### Code section: typeinfo ### */
/* #### Code section: before_global_var ### */
#define __Pyx_MODULE_NAME "pygcgopt.gcg"
extern int __pyx_module_is_main_pygcgopt__gcg;
int __pyx_module_is_main_pygcgopt__gcg = 0;

/* Implementation of "pygcgopt.gcg" */
/* #### Code section: global_var ### */
static PyObject *__pyx_builtin_print;
static PyObject *__pyx_builtin_super;
static PyObject *__pyx_builtin_enumerate;
/* #### Code section: string_decls ### */
static const char __pyx_k__6[] = "";
static const char __pyx_k_model_name[] = "model, name";
static const char __pyx_k_model_scorename[] = "model, scorename";
static const char __pyx_k_model_solvername[] = "model, solvername";
static const char __pyx_k_detectorname_model[] = "detectorname, model";
/* #### Code section: decls ### */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_freeDetector(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_2initDetector(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_4exitDetector(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_6propagatePartialdec(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_detprobdata, CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_8finishPartialdec(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_detprobdata, CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_10postprocessPartialdec(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_detprobdata, CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_12setParamAggressive(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_14setParamDefault(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_16setParamFast(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_5model___get__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_8Detector_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_8Detector_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_12detectorname___get__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_8Detector_12detectorname_2__set__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_8Detector_12detectorname_4__del__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_18__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_20__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_freeSolver(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_2initSolver(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_4exitSolver(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_6initSolution(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_8exitSolution(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_10updateSolver(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_pricingprob, CYTHON_UNUSED PyObject *__pyx_v_probnr, CYTHON_UNUSED PyObject *__pyx_v_varobjschanged, CYTHON_UNUSED PyObject *__pyx_v_varbndschanged, CYTHON_UNUSED PyObject *__pyx_v_consschanged); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_12solve(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_pricingprob, CYTHON_UNUSED PyObject *__pyx_v_probnr, CYTHON_UNUSED PyObject *__pyx_v_dualsolconv); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_14solveHeuristic(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_pricingprob, CYTHON_UNUSED PyObject *__pyx_v_probnr, CYTHON_UNUSED PyObject *__pyx_v_dualsolconv); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_5model___get__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_13PricingSolver_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_13PricingSolver_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_10solvername___get__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_13PricingSolver_10solvername_2__set__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_13PricingSolver_10solvername_4__del__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_16__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_18__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_scorefree(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_2scorecalculate(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_partialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_5model___get__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_5Score_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_5Score_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_9scorename___get__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_5Score_9scorename_2__set__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_5Score_9scorename_4__del__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_4__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_6__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_getClassDescription(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_2getClassName(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_4getName(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_6getNClasses(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_8removeEmptyClasses(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_10setClassDescription(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_desc); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_12setClassName(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_14addClass(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_desc, PyObject *__pyx_v_decompInfo); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_16assignConsToClass(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons, PyObject *__pyx_v_classindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_18getAllSubsets(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_both, PyObject *__pyx_v_only_master, PyObject *__pyx_v_only_pricing); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_20getClassDecompInfo(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_22getClassNameOfCons(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_24getClassOfCons(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_26getNConss(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_28getNConssOfClasses(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_30isConsClassified(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_32reduceClasses(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_maxNumberOfClasses); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_34setClassDecompInfo(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_decompInfo); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_36__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_38__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_getClassDescription(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_2getClassName(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_4getName(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_6getNClasses(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_8removeEmptyClasses(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_10setClassDescription(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_desc); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_12setClassName(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_14addClass(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_desc, PyObject *__pyx_v_decompInfo); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_16assignVarToClass(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, PyObject *__pyx_v_classindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_18getAllSubsets(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_all, PyObject *__pyx_v_linking, PyObject *__pyx_v_master, PyObject *__pyx_v_block); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_20getClassDecompInfo(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_22getClassNameOfVar(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_24getClassOfVar(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_26getNVars(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_28getNVarsOfClasses(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_30isVarClassified(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_32reduceClasses(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_maxNumberOfClasses); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_34setClassDecompInfo(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_decompInfo); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_36__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_38__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition___cinit__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static void __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_2__dealloc__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_4__copy__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_6copy(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_10isSelected___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_10isSelected_2__set__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_selected); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_8addBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_10assignOpenConssToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_12isComplete(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_14isTrivial(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_16getNBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_18getNConss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_20getNVars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_22getID(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_24getHashValue(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_26getDetprobdata(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_28fixConsToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_30fixConssToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_conss); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_32fixConsToBlockId(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_34fixConssToBlockId(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_conss, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_36fixConsToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons, PyObject *__pyx_v_block); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_38fixConssToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_conss, PyObject *__pyx_v_block); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_40hasSetppccardMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_42hasSetppcMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_44hasSetppMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_46getNOpenconss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_48getOpenconss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_50getNLinkingvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_52getLinkingvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_54getNMasterconss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_56getMasterconss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_58getNMastervars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_60getMastervars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_62getNOpenvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_64getOpenvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_66getNStairlinkingvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_68getConssForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_70getConssForBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_72getNVarsForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_74getVarsForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_76setConsToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_78setVarToBlockId(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_80setVarToLinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_82fixVarToLinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_84setVarToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_86fixVarToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_88setVarToStairlinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_block1_id, int __pyx_v_block2_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_90fixVarToStairlinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_firstblock_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_92isConsMastercons(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_94isConsOpencons(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_96isVarBlockvarOfBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_98isVarLinkingvar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_100isVarMastervar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_102isVarOpenvar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_104isVarStairlinkingvar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_106isVarStairlinkingvarOfBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_108deleteOpencons(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_110deleteOpenvar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_112setUsergiven(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, gcg::USERGIVEN __pyx_v_value); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_114getUsergiven(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_15max_white_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_13classic_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_17border_area_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_19max_for_white_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_24set_part_for_white_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_23max_for_white_agg_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_28set_part_for_white_agg_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_13benders_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_19strong_decomp_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_116addClockTime(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_clocktime); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_118addPctConssFromFree(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_120addPctConssToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_122addPctConssToBorder(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_124addPctVarsFromFree(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_126addPctVarsToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_128addPctVarsToBorder(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_130getPctVarsToBorder(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_132getPctVarsToBorderVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_134getPctVarsToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_136getPctVarsToBlockVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_138getPctVarsFromFree(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_140getPctVarsFromFreeVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_142getPctConssToBorder(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_144getPctConssToBorderVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_146getPctConssToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_148getPctConssToBlockVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_150getPctConssFromFree(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_152getPctConssFromFreeVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_154getScore(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_score); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_156checkAllConssAssigned(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_158checkConsistency(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_160complete(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_162sort(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_164completeByConnected(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_166completeByConnectedConssAdjacency(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_168completeGreedily(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_170prepare(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_172getNDetectors(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_174getNEquivalenceClasses(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_176getNCoeffsForMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_178setNBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_nblocks); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_180getNTotalStairlinkingvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_182getNVarsForBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_184findVarsLinkingToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_186findVarsLinkingToStairlinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_188getNCoeffsForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_190addNNewBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_nnewblocks); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_192getNConssForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_194removeMastercons(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_196isAssignedToOrigProb(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_198refineToBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_200refineToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_202alreadyAssignedConssToBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_204assignCurrentStairlinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_206aggInfoCalculated(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_208considerImplicits(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_210displayInfo(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detailLevel); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_212getAncestorList(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_214assignSmallestComponentsButOneConssAdjacency(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_216deleteEmptyBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_variables); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_218getTranslatedpartialdecid(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_220setTranslatedpartialdecid(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_dec_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_222buildDecChainString(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_buffer); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_224addDecChangesFromAncestor(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_ancestor); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_226addDetectorChainInfo(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_decinfo); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_228getAncestorID(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_ancestor_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_230copyPartitionStatistics(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_otherpartialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_232removeAncestorID(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_ancestor_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_234addAncestorID(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_ancestor_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_236getBlocksForEqClass(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_rep_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_238getNNewBlocksVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_240getNAncestors(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_242getNNewBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchain_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_244getFinishedByFinisher(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_246getDetectorchainInfo(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_248shouldCompletedByConsToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_250setFinishedByFinisher(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_finished); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_252calcAggregationInformation(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_ignoreDetectionLimits); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_254setDetectorPropagated(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_256setDetectorFinished(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_258setDetectorFinishedOrig(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_260setPctConssToBlockVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_262setPctConssFromFreeVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_264setPctConssToBorderVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_266setPctVarsToBorderVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_268setPctVarsToBlockVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_270setPctVarsFromFreeVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_272setDetectorClockTimes(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_274setFinishedByFinisherOrig(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_finished); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_276setStemsFromOrig(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_fromorig); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_278getDetectorClockTime(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchain_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_280getEqClassForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_282showVisualization(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_284_repr_svg_(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_286_repr_png_(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_288__repr__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_290setAncestorList(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newlist); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_292getDetectorClockTimes(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_294getRepVarmap(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_repid, int __pyx_v_blockrepid); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_296getVarProbindexForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_varid, int __pyx_v_block); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_298setConsPartitionStatistics(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex, struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_partition, PyObject *__pyx_v_consclassesmaster); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_300setVarPartitionStatistics(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex, struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_partition, PyObject *__pyx_v_varclasseslinking, PyObject *__pyx_v_varclassesmaster); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_2__set__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_4__del__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_302__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_304__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_createConsPart(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_nclasses, PyObject *__pyx_v_ncons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_2createVarPart(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_nclasses, PyObject *__pyx_v_nvars); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_4candidatesNBlocks(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_6candidatesNBlocks(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_candidatesNBlocks); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_8conspartitioncollection(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_10conspartitioncollection(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_conspartitioncollection); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_12varpartitioncollection(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_14varpartitioncollection(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_varpartitioncollection); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_16classificationtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_18classificationtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, double __pyx_v_classificationtime); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_20nblockscandidatescalctime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_22nblockscandidatescalctime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, double __pyx_v_nblockscandidatescalctime); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_24postprocessingtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_26postprocessingtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, double __pyx_v_postprocessingtime); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_28translatingtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_30translatingtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, double __pyx_v_translatingtime); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_32addConsPartition(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_partition); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_34addCandidatesNBlocksNVotes(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, int __pyx_v_candidate, int __pyx_v_nvotes); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_36addPartialdecToAncestor(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_38addPartialdecToOpen(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_40addPartialdecToFinished(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_42addPartialdecToFinishedUnchecked(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_44addVarPartition(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_partition); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_46clearAncestorPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_48clearCurrentPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_50clearFinishedPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_52createConssAdjacency(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_54freeTemporaryData(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_56getAncestorPartialdec(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_partialdecindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_58getConsPartition(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_partitionIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_60getConsPartitions(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_62getCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_64getConssForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_66getConssForVar(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_varIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_68getOpenPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_70getFinishedPartialdec(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, int __pyx_v_partialdecindex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_72getFinishedPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_74getIndexForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_76getIndexForVar(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_78getNAncestorPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_80getNConsPartitions(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_82getNConss(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_84getNConssForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_86getNConssForVar(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_varIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_88getNOpenPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_90getNFinishedPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_92getNPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_94getNNonzeros(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_96getNVarPartitions(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_98getNVars(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_100getNVarsForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_102getOrigVarsFixedZero(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_104getRelevantConss(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_106getRelevantVars(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_108getSortedCandidatesNBlocks(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_candidates); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_110getVal(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_112getValsForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_114getVarPartition(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_partitionIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_116getVarPartitions(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_118getVar(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_varIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_120getVarsForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_122isConsCardinalityCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_124isConssAdjInitialized(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_126isConsSetpp(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_128isConsSetppc(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_130isPartialdecDuplicateofFinished(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_132isAssignedToOrigProb(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_134partialdecIsNoDuplicateOfPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_comppartialdec, PyObject *__pyx_v_partialdecs, PyObject *__pyx_v_sort); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_136sortFinishedForScore(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_138translatePartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_otherdata, PyObject *__pyx_v_otherpartialdecs, PyObject *__pyx_v_translateSymmetry); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_140__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_142__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_freeConsClassifier(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_2classify(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_conss, CYTHON_UNUSED PyObject *__pyx_v_partition); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_5model___get__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4name___get__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4name_2__set__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4name_4__del__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_6__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_freeVarClassifier(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_2classify(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vars, CYTHON_UNUSED PyObject *__pyx_v_partition); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_5model___get__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_13VarClassifier_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_13VarClassifier_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_4name___get__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_13VarClassifier_4name_2__set__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_13VarClassifier_4name_4__del__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_4__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_6__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS___reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_2__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_12PY_USERGIVEN___reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_12PY_USERGIVEN_2__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO___reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_2__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO___reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_2__setstate_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_8pygcgopt_3gcg_5Model___init__(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_problemName, CYTHON_UNUSED PyObject *__pyx_v_defaultPlugins, struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_sourceModel, PyObject *__pyx_v_creategcg); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_2includeDefaultPlugins(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_4addVar(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_6presolve(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_8detect(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_10printStatistics(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_12printVersion(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_14optimize(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_16getDualbound(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_18getDetprobdataOrig(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_20getDetprobdataPresolved(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_22listDecompositions(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_24getPartDecompFromID(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_id); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_26addDecompositionFromConss(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_master_conss, PyObject *__pyx_v_block_conss); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_28addPreexistingPartialDecomposition(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_30addDecomposition(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_32createDecomposition(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_34includePricingSolver(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_pricingSolver, PyObject *__pyx_v_solvername, PyObject *__pyx_v_desc, PyObject *__pyx_v_priority, PyObject *__pyx_v_heuristicEnabled, PyObject *__pyx_v_exactEnabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_36listPricingSolvers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_38setPricingSolverEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_pricing_solver_name, PyObject *__pyx_v_is_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_40setPricingSolverExactEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_pricing_solver_name, PyObject *__pyx_v_is_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_42setPricingSolverHeuristicEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_pricing_solver_name, PyObject *__pyx_v_is_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_44includeConsClassifier(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_consclassifier, PyObject *__pyx_v_consclassifiername, PyObject *__pyx_v_desc, PyObject *__pyx_v_priority, PyObject *__pyx_v_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_46getNConsClassifiers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_48listConsClassifiers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_50includeVarClassifier(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_varclassifier, PyObject *__pyx_v_varclassifiername, PyObject *__pyx_v_desc, PyObject *__pyx_v_priority, PyObject *__pyx_v_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_52getNVarClassifiers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_54listVarClassifiers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_56setVarClassifierEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_varclassifier_name, PyObject *__pyx_v_is_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_58includeDetector(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector, PyObject *__pyx_v_detectorname, PyObject *__pyx_v_decchar, PyObject *__pyx_v_desc, PyObject *__pyx_v_freqcallround, PyObject *__pyx_v_maxcallround, PyObject *__pyx_v_mincallround, PyObject *__pyx_v_freqcallroundoriginal, PyObject *__pyx_v_maxcallroundoriginal, PyObject *__pyx_v_mincallroundoriginal, PyObject *__pyx_v_priority, PyObject *__pyx_v_enabled, PyObject *__pyx_v_enabledfinishing, PyObject *__pyx_v_enabledpostprocessing, PyObject *__pyx_v_skip, PyObject *__pyx_v_usefulrecall); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_60includeScore(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_score, PyObject *__pyx_v_scorename, PyObject *__pyx_v_shortname, PyObject *__pyx_v_desc); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_62listDetectors(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_64listScores(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_66setDetectorEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_detector_name, PyObject *__pyx_v_is_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_68setDetectorFinishingEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_detector_name, PyObject *__pyx_v_is_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_70setDetectorPostprocessingEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_detector_name, PyObject *__pyx_v_is_enabled); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_72getMasterProb(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_74setGCGSeparating(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_setting); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_76writeAllDecomps(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_directory, PyObject *__pyx_v_extension, bool __pyx_v_original, bool __pyx_v_presolved, PyObject *__pyx_v_createDirectory); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_78getMastervars(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_80__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_82__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_15GCGPricingModel_createGcgCol(struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *__pyx_v_self, PyObject *__pyx_v_probnr, PyObject *__pyx_v_variables, PyObject *__pyx_v_vals, bool __pyx_v_isray, PyObject *__pyx_v_redcost); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_15GCGPricingModel_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_15GCGPricingModel_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_addCol(struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_col); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_2getOrigvars(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *__pyx_v_self, PyObject *__pyx_v_var); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static Py_hash_t __pyx_pf_8pygcgopt_3gcg_9GCGColumn___hash__(struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_9GCGColumn_2__eq__(struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_9GCGColumn_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg_9GCGColumn_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8pygcgopt_3gcg___pyx_unpickle_Detector(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_8pygcgopt_3gcg_2__pyx_unpickle_PricingSolver(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_8pygcgopt_3gcg_4__pyx_unpickle_Score(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_8pygcgopt_3gcg_6__pyx_unpickle_ConsClassifier(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_8pygcgopt_3gcg_8__pyx_unpickle_VarClassifier(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_8pygcgopt_3gcg_10__pyx_unpickle_PY_GCG_PRICINGSTATUS(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_8pygcgopt_3gcg_12__pyx_unpickle_PY_USERGIVEN(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_8pygcgopt_3gcg_14__pyx_unpickle_PY_VAR_DECOMPINFO(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_8pygcgopt_3gcg_16__pyx_unpickle_PY_CONS_DECOMPINFO(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_8pygcgopt_3gcg_DetProbData(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_ConsPart(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_VarPart(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_GCGColumn(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_Detector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PricingSolver(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_Score(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PartialDecomposition(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_ConsClassifier(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_VarClassifier(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PY_USERGIVEN(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PY_VAR_DECOMPINFO(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PY_CONS_DECOMPINFO(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_Model(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_GCGPricingModel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8pygcgopt_3gcg_GCGMasterModel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
/* #### Code section: late_includes ### */
/* #### Code section: module_state ### */
/* SmallCodeConfig */
#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

typedef struct {
  PyObject *__pyx_d;
  PyObject *__pyx_b;
  PyObject *__pyx_cython_runtime;
  PyObject *__pyx_empty_tuple;
  PyObject *__pyx_empty_bytes;
  PyObject *__pyx_empty_unicode;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Expr;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Event;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Column;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_ColumnExact;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Row;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_RowExact;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_NLRow;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Solution;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_DomainChanges;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_BoundChange;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Node;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Variable;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Constraint;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_IIS;
  PyTypeObject *__pyx_ptype_9pyscipopt_4scip_Model;
  PyTypeObject *__pyx_ptype_7cpython_4type_type;
  PyTypeObject *__pyx_ptype_7cpython_4bool_bool;
  PyTypeObject *__pyx_ptype_7cpython_7complex_complex;
  PyObject *__pyx_type_8pygcgopt_3gcg_DetProbData;
  PyObject *__pyx_type_8pygcgopt_3gcg_ConsPart;
  PyObject *__pyx_type_8pygcgopt_3gcg_VarPart;
  PyObject *__pyx_type_8pygcgopt_3gcg_GCGColumn;
  PyObject *__pyx_type_8pygcgopt_3gcg_Detector;
  PyObject *__pyx_type_8pygcgopt_3gcg_PricingSolver;
  PyObject *__pyx_type_8pygcgopt_3gcg_Score;
  PyObject *__pyx_type_8pygcgopt_3gcg_PartialDecomposition;
  PyObject *__pyx_type_8pygcgopt_3gcg_ConsClassifier;
  PyObject *__pyx_type_8pygcgopt_3gcg_VarClassifier;
  PyObject *__pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS;
  PyObject *__pyx_type_8pygcgopt_3gcg_PY_USERGIVEN;
  PyObject *__pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO;
  PyObject *__pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO;
  PyObject *__pyx_type_8pygcgopt_3gcg_Model;
  PyObject *__pyx_type_8pygcgopt_3gcg_GCGPricingModel;
  PyObject *__pyx_type_8pygcgopt_3gcg_GCGMasterModel;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_DetProbData;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_ConsPart;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_VarPart;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_GCGColumn;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_Detector;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_PricingSolver;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_Score;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_ConsClassifier;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_VarClassifier;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_Model;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel;
  PyTypeObject *__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_items;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_pop;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_values;
  gcg::USERGIVEN __pyx_k_;
  PyObject *__pyx_k__4;
  PyObject *__pyx_k__5;
  PyObject *__pyx_tuple[11];
  PyObject *__pyx_codeobj_tab[362];
  PyObject *__pyx_string_tab[1344];
  PyObject *__pyx_number_tab[7];
/* #### Code section: module_state_contents ### */
/* CommonTypesMetaclass.module_state_decls */
PyTypeObject *__pyx_CommonTypesMetaclassType;

/* CachedMethodType.module_state_decls */
#if CYTHON_COMPILING_IN_LIMITED_API
PyObject *__Pyx_CachedMethodType;
#endif

/* CythonFunctionShared.module_state_decls */
PyTypeObject *__pyx_CyFunctionType;

/* CodeObjectCache.module_state_decls */
struct __Pyx_CodeObjectCache __pyx_code_cache;

/* #### Code section: module_state_end ### */
} __pyx_mstatetype;

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

#define __pyx_mstate_global (__Pyx_PyModule_GetState(__Pyx_State_FindModule(&__pyx_moduledef)))

#define __pyx_m (__Pyx_State_FindModule(&__pyx_moduledef))
#else
static __pyx_mstatetype __pyx_mstate_global_static =
#ifdef __cplusplus
    {};
#else
    {0};
#endif
static __pyx_mstatetype * const __pyx_mstate_global = &__pyx_mstate_global_static;
#endif
/* #### Code section: constant_name_defines ### */
#define __pyx_kp_u_Consclassifier_0_yields_a_classi __pyx_string_tab[0]
#define __pyx_kp_u_Detector_callback_returned_of_ty __pyx_string_tab[1]
#define __pyx_kp_u_Expected_iterable_as_first_argum __pyx_string_tab[2]
#define __pyx_kp_u_Format __pyx_string_tab[3]
#define __pyx_kp_u_Length_of_value_for_decchar_must __pyx_string_tab[4]
#define __pyx_kp_u_Note_that_Cython_is_deliberately __pyx_string_tab[5]
#define __pyx_kp_u_PartialDecomposition_nBlocks __pyx_string_tab[6]
#define __pyx_kp_u_The_value_of_the_key_newpartiald __pyx_string_tab[7]
#define __pyx_kp_u_Varclassifier_0_yields_a_classif __pyx_string_tab[8]
#define __pyx_kp_u__2 __pyx_string_tab[9]
#define __pyx_kp_u__3 __pyx_string_tab[10]
#define __pyx_kp_u__7 __pyx_string_tab[11]
#define __pyx_kp_u_add_note __pyx_string_tab[12]
#define __pyx_kp_u_alldecompositions __pyx_string_tab[13]
#define __pyx_kp_u_border_area __pyx_string_tab[14]
#define __pyx_kp_u_cannot_create_Column_with_GCG_CO __pyx_string_tab[15]
#define __pyx_kp_u_cannot_create_ConsPart_with_Cons __pyx_string_tab[16]
#define __pyx_kp_u_cannot_create_DetProbData_with_D __pyx_string_tab[17]
#define __pyx_kp_u_cannot_create_Model_with_SCIP_NU __pyx_string_tab[18]
#define __pyx_kp_u_cannot_create_PartialDecompositi __pyx_string_tab[19]
#define __pyx_kp_u_cannot_create_VarPart_with_VarPa __pyx_string_tab[20]
#define __pyx_kp_u_detection_classification_varclas __pyx_string_tab[21]
#define __pyx_kp_u_detection_detectors_enabled __pyx_string_tab[22]
#define __pyx_kp_u_detection_detectors_finishingena __pyx_string_tab[23]
#define __pyx_kp_u_detection_detectors_postprocessi __pyx_string_tab[24]
#define __pyx_kp_u_disable __pyx_string_tab[25]
#define __pyx_kp_u_enable __pyx_string_tab[26]
#define __pyx_kp_u_experimental_benders_score __pyx_string_tab[27]
#define __pyx_kp_u_gc __pyx_string_tab[28]
#define __pyx_kp_u_is_not_supported_Only_svg_and_p __pyx_string_tab[29]
#define __pyx_kp_u_isenabled __pyx_string_tab[30]
#define __pyx_kp_u_maxForWhiteScore __pyx_string_tab[31]
#define __pyx_kp_u_max_foreseeing_white __pyx_string_tab[32]
#define __pyx_kp_u_max_foreseeing_white_with_aggreg __pyx_string_tab[33]
#define __pyx_kp_u_nLinkingVars __pyx_string_tab[34]
#define __pyx_kp_u_nMasterConss __pyx_string_tab[35]
#define __pyx_kp_u_nMasterVars __pyx_string_tab[36]
#define __pyx_kp_u_no_default___reduce___due_to_non __pyx_string_tab[37]
#define __pyx_kp_u_ppc_max_white __pyx_string_tab[38]
#define __pyx_kp_u_ppc_max_white_with_aggregation_i __pyx_string_tab[39]
#define __pyx_kp_u_pricingsolver_exactenabled __pyx_string_tab[40]
#define __pyx_kp_u_pricingsolver_heurenabled __pyx_string_tab[41]
#define __pyx_kp_u_self__gcg_self__iis_self__scip_s __pyx_string_tab[42]
#define __pyx_kp_u_self__iis_self__scip_self__valid __pyx_string_tab[43]
#define __pyx_kp_u_self_consPartition_cannot_be_con __pyx_string_tab[44]
#define __pyx_kp_u_self_detectorname_is_not_None_or __pyx_string_tab[45]
#define __pyx_kp_u_self_gcg_col_cannot_be_converted __pyx_string_tab[46]
#define __pyx_kp_u_self_model_is_not_None_or_self_n __pyx_string_tab[47]
#define __pyx_kp_u_self_model_is_not_None_or_self_s __pyx_string_tab[48]
#define __pyx_kp_u_self_model_is_not_None_or_self_s_2 __pyx_string_tab[49]
#define __pyx_kp_u_self_thisptr_cannot_be_converted __pyx_string_tab[50]
#define __pyx_kp_u_self_varPartition_cannot_be_conv __pyx_string_tab[51]
#define __pyx_kp_u_src_pygcgopt_consclassifier_pxi __pyx_string_tab[52]
#define __pyx_kp_u_src_pygcgopt_decomposition_pxi __pyx_string_tab[53]
#define __pyx_kp_u_src_pygcgopt_detector_pxi __pyx_string_tab[54]
#define __pyx_kp_u_src_pygcgopt_detprobdata_pxi __pyx_string_tab[55]
#define __pyx_kp_u_src_pygcgopt_gcg_pyx __pyx_string_tab[56]
#define __pyx_kp_u_src_pygcgopt_partition_pxi __pyx_string_tab[57]
#define __pyx_kp_u_src_pygcgopt_pricing_solver_pxi __pyx_string_tab[58]
#define __pyx_kp_u_src_pygcgopt_score_pxi __pyx_string_tab[59]
#define __pyx_kp_u_src_pygcgopt_varclassifier_pxi __pyx_string_tab[60]
#define __pyx_kp_u_stringsource __pyx_string_tab[61]
#define __pyx_kp_u_strong_decomposition_score __pyx_string_tab[62]
#define __pyx_kp_u_vis_gp __pyx_string_tab[63]
#define __pyx_n_u_ConsClassifier __pyx_string_tab[64]
#define __pyx_n_u_ConsClassifier___reduce_cython __pyx_string_tab[65]
#define __pyx_n_u_ConsClassifier___setstate_cython __pyx_string_tab[66]
#define __pyx_n_u_ConsClassifier_classify __pyx_string_tab[67]
#define __pyx_n_u_ConsClassifier_freeConsClassifie __pyx_string_tab[68]
#define __pyx_n_u_ConsPart __pyx_string_tab[69]
#define __pyx_n_u_ConsPart___reduce_cython __pyx_string_tab[70]
#define __pyx_n_u_ConsPart___setstate_cython __pyx_string_tab[71]
#define __pyx_n_u_ConsPart_addClass __pyx_string_tab[72]
#define __pyx_n_u_ConsPart_assignConsToClass __pyx_string_tab[73]
#define __pyx_n_u_ConsPart_getAllSubsets __pyx_string_tab[74]
#define __pyx_n_u_ConsPart_getClassDecompInfo __pyx_string_tab[75]
#define __pyx_n_u_ConsPart_getClassDescription __pyx_string_tab[76]
#define __pyx_n_u_ConsPart_getClassName __pyx_string_tab[77]
#define __pyx_n_u_ConsPart_getClassNameOfCons __pyx_string_tab[78]
#define __pyx_n_u_ConsPart_getClassOfCons __pyx_string_tab[79]
#define __pyx_n_u_ConsPart_getNClasses __pyx_string_tab[80]
#define __pyx_n_u_ConsPart_getNConss __pyx_string_tab[81]
#define __pyx_n_u_ConsPart_getNConssOfClasses __pyx_string_tab[82]
#define __pyx_n_u_ConsPart_getName __pyx_string_tab[83]
#define __pyx_n_u_ConsPart_isConsClassified __pyx_string_tab[84]
#define __pyx_n_u_ConsPart_reduceClasses __pyx_string_tab[85]
#define __pyx_n_u_ConsPart_removeEmptyClasses __pyx_string_tab[86]
#define __pyx_n_u_ConsPart_setClassDecompInfo __pyx_string_tab[87]
#define __pyx_n_u_ConsPart_setClassDescription __pyx_string_tab[88]
#define __pyx_n_u_ConsPart_setClassName __pyx_string_tab[89]
#define __pyx_n_u_DetProbData __pyx_string_tab[90]
#define __pyx_n_u_DetProbData___reduce_cython __pyx_string_tab[91]
#define __pyx_n_u_DetProbData___setstate_cython __pyx_string_tab[92]
#define __pyx_n_u_DetProbData_addCandidatesNBlocks __pyx_string_tab[93]
#define __pyx_n_u_DetProbData_addConsPartition __pyx_string_tab[94]
#define __pyx_n_u_DetProbData_addPartialdecToAnces __pyx_string_tab[95]
#define __pyx_n_u_DetProbData_addPartialdecToFinis __pyx_string_tab[96]
#define __pyx_n_u_DetProbData_addPartialdecToFinis_2 __pyx_string_tab[97]
#define __pyx_n_u_DetProbData_addPartialdecToOpen __pyx_string_tab[98]
#define __pyx_n_u_DetProbData_addVarPartition __pyx_string_tab[99]
#define __pyx_n_u_DetProbData_candidatesNBlocks __pyx_string_tab[100]
#define __pyx_n_u_DetProbData_classificationtime __pyx_string_tab[101]
#define __pyx_n_u_DetProbData_clearAncestorPartial __pyx_string_tab[102]
#define __pyx_n_u_DetProbData_clearCurrentPartiald __pyx_string_tab[103]
#define __pyx_n_u_DetProbData_clearFinishedPartial __pyx_string_tab[104]
#define __pyx_n_u_DetProbData_conspartitioncollect __pyx_string_tab[105]
#define __pyx_n_u_DetProbData_createConsPart __pyx_string_tab[106]
#define __pyx_n_u_DetProbData_createConssAdjacency __pyx_string_tab[107]
#define __pyx_n_u_DetProbData_createVarPart __pyx_string_tab[108]
#define __pyx_n_u_DetProbData_freeTemporaryData __pyx_string_tab[109]
#define __pyx_n_u_DetProbData_getAncestorPartialde __pyx_string_tab[110]
#define __pyx_n_u_DetProbData_getCons __pyx_string_tab[111]
#define __pyx_n_u_DetProbData_getConsPartition __pyx_string_tab[112]
#define __pyx_n_u_DetProbData_getConsPartitions __pyx_string_tab[113]
#define __pyx_n_u_DetProbData_getConssForCons __pyx_string_tab[114]
#define __pyx_n_u_DetProbData_getConssForVar __pyx_string_tab[115]
#define __pyx_n_u_DetProbData_getFinishedPartialde __pyx_string_tab[116]
#define __pyx_n_u_DetProbData_getFinishedPartialde_2 __pyx_string_tab[117]
#define __pyx_n_u_DetProbData_getIndexForCons __pyx_string_tab[118]
#define __pyx_n_u_DetProbData_getIndexForVar __pyx_string_tab[119]
#define __pyx_n_u_DetProbData_getNAncestorPartiald __pyx_string_tab[120]
#define __pyx_n_u_DetProbData_getNConsPartitions __pyx_string_tab[121]
#define __pyx_n_u_DetProbData_getNConss __pyx_string_tab[122]
#define __pyx_n_u_DetProbData_getNConssForCons __pyx_string_tab[123]
#define __pyx_n_u_DetProbData_getNConssForVar __pyx_string_tab[124]
#define __pyx_n_u_DetProbData_getNFinishedPartiald __pyx_string_tab[125]
#define __pyx_n_u_DetProbData_getNNonzeros __pyx_string_tab[126]
#define __pyx_n_u_DetProbData_getNOpenPartialdecs __pyx_string_tab[127]
#define __pyx_n_u_DetProbData_getNPartialdecs __pyx_string_tab[128]
#define __pyx_n_u_DetProbData_getNVarPartitions __pyx_string_tab[129]
#define __pyx_n_u_DetProbData_getNVars __pyx_string_tab[130]
#define __pyx_n_u_DetProbData_getNVarsForCons __pyx_string_tab[131]
#define __pyx_n_u_DetProbData_getOpenPartialdecs __pyx_string_tab[132]
#define __pyx_n_u_DetProbData_getOrigVarsFixedZero __pyx_string_tab[133]
#define __pyx_n_u_DetProbData_getRelevantConss __pyx_string_tab[134]
#define __pyx_n_u_DetProbData_getRelevantVars __pyx_string_tab[135]
#define __pyx_n_u_DetProbData_getSortedCandidatesN __pyx_string_tab[136]
#define __pyx_n_u_DetProbData_getVal __pyx_string_tab[137]
#define __pyx_n_u_DetProbData_getValsForCons __pyx_string_tab[138]
#define __pyx_n_u_DetProbData_getVar __pyx_string_tab[139]
#define __pyx_n_u_DetProbData_getVarPartition __pyx_string_tab[140]
#define __pyx_n_u_DetProbData_getVarPartitions __pyx_string_tab[141]
#define __pyx_n_u_DetProbData_getVarsForCons __pyx_string_tab[142]
#define __pyx_n_u_DetProbData_isAssignedToOrigProb __pyx_string_tab[143]
#define __pyx_n_u_DetProbData_isConsCardinalityCon __pyx_string_tab[144]
#define __pyx_n_u_DetProbData_isConsSetpp __pyx_string_tab[145]
#define __pyx_n_u_DetProbData_isConsSetppc __pyx_string_tab[146]
#define __pyx_n_u_DetProbData_isConssAdjInitialize __pyx_string_tab[147]
#define __pyx_n_u_DetProbData_isPartialdecDuplicat __pyx_string_tab[148]
#define __pyx_n_u_DetProbData_nblockscandidatescal __pyx_string_tab[149]
#define __pyx_n_u_DetProbData_partialdecIsNoDuplic __pyx_string_tab[150]
#define __pyx_n_u_DetProbData_postprocessingtime __pyx_string_tab[151]
#define __pyx_n_u_DetProbData_sortFinishedForScore __pyx_string_tab[152]
#define __pyx_n_u_DetProbData_translatePartialdecs __pyx_string_tab[153]
#define __pyx_n_u_DetProbData_translatingtime __pyx_string_tab[154]
#define __pyx_n_u_DetProbData_varpartitioncollecti __pyx_string_tab[155]
#define __pyx_n_u_Detector __pyx_string_tab[156]
#define __pyx_n_u_Detector___reduce_cython __pyx_string_tab[157]
#define __pyx_n_u_Detector___setstate_cython __pyx_string_tab[158]
#define __pyx_n_u_Detector_exitDetector __pyx_string_tab[159]
#define __pyx_n_u_Detector_finishPartialdec __pyx_string_tab[160]
#define __pyx_n_u_Detector_freeDetector __pyx_string_tab[161]
#define __pyx_n_u_Detector_initDetector __pyx_string_tab[162]
#define __pyx_n_u_Detector_postprocessPartialdec __pyx_string_tab[163]
#define __pyx_n_u_Detector_propagatePartialdec __pyx_string_tab[164]
#define __pyx_n_u_Detector_setParamAggressive __pyx_string_tab[165]
#define __pyx_n_u_Detector_setParamDefault __pyx_string_tab[166]
#define __pyx_n_u_Detector_setParamFast __pyx_string_tab[167]
#define __pyx_n_u_False __pyx_string_tab[168]
#define __pyx_n_u_GCGColumn __pyx_string_tab[169]
#define __pyx_n_u_GCGColumn___reduce_cython __pyx_string_tab[170]
#define __pyx_n_u_GCGColumn___setstate_cython __pyx_string_tab[171]
#define __pyx_n_u_GCGMasterModel __pyx_string_tab[172]
#define __pyx_n_u_GCGMasterModel___reduce_cython __pyx_string_tab[173]
#define __pyx_n_u_GCGMasterModel___setstate_cython __pyx_string_tab[174]
#define __pyx_n_u_GCGMasterModel_addCol __pyx_string_tab[175]
#define __pyx_n_u_GCGMasterModel_getOrigvars __pyx_string_tab[176]
#define __pyx_n_u_GCGPricingModel __pyx_string_tab[177]
#define __pyx_n_u_GCGPricingModel___reduce_cython __pyx_string_tab[178]
#define __pyx_n_u_GCGPricingModel___setstate_cytho __pyx_string_tab[179]
#define __pyx_n_u_GCGPricingModel_createGcgCol __pyx_string_tab[180]
#define __pyx_n_u_INFEASIBLE __pyx_string_tab[181]
#define __pyx_n_u_Iterable __pyx_string_tab[182]
#define __pyx_n_u_List __pyx_string_tab[183]
#define __pyx_n_u_Model __pyx_string_tab[184]
#define __pyx_n_u_Model___reduce_cython __pyx_string_tab[185]
#define __pyx_n_u_Model___setstate_cython __pyx_string_tab[186]
#define __pyx_n_u_Model_addDecomposition __pyx_string_tab[187]
#define __pyx_n_u_Model_addDecompositionFromConss __pyx_string_tab[188]
#define __pyx_n_u_Model_addPreexistingPartialDecom __pyx_string_tab[189]
#define __pyx_n_u_Model_addVar __pyx_string_tab[190]
#define __pyx_n_u_Model_createDecomposition __pyx_string_tab[191]
#define __pyx_n_u_Model_detect __pyx_string_tab[192]
#define __pyx_n_u_Model_getDetprobdataOrig __pyx_string_tab[193]
#define __pyx_n_u_Model_getDetprobdataPresolved __pyx_string_tab[194]
#define __pyx_n_u_Model_getDualbound __pyx_string_tab[195]
#define __pyx_n_u_Model_getMasterProb __pyx_string_tab[196]
#define __pyx_n_u_Model_getMastervars __pyx_string_tab[197]
#define __pyx_n_u_Model_getNConsClassifiers __pyx_string_tab[198]
#define __pyx_n_u_Model_getNVarClassifiers __pyx_string_tab[199]
#define __pyx_n_u_Model_getPartDecompFromID __pyx_string_tab[200]
#define __pyx_n_u_Model_includeConsClassifier __pyx_string_tab[201]
#define __pyx_n_u_Model_includeDefaultPlugins __pyx_string_tab[202]
#define __pyx_n_u_Model_includeDetector __pyx_string_tab[203]
#define __pyx_n_u_Model_includePricingSolver __pyx_string_tab[204]
#define __pyx_n_u_Model_includeScore __pyx_string_tab[205]
#define __pyx_n_u_Model_includeVarClassifier __pyx_string_tab[206]
#define __pyx_n_u_Model_listConsClassifiers __pyx_string_tab[207]
#define __pyx_n_u_Model_listDecompositions __pyx_string_tab[208]
#define __pyx_n_u_Model_listDetectors __pyx_string_tab[209]
#define __pyx_n_u_Model_listPricingSolvers __pyx_string_tab[210]
#define __pyx_n_u_Model_listScores __pyx_string_tab[211]
#define __pyx_n_u_Model_listVarClassifiers __pyx_string_tab[212]
#define __pyx_n_u_Model_optimize __pyx_string_tab[213]
#define __pyx_n_u_Model_presolve __pyx_string_tab[214]
#define __pyx_n_u_Model_printStatistics __pyx_string_tab[215]
#define __pyx_n_u_Model_printVersion __pyx_string_tab[216]
#define __pyx_n_u_Model_setDetectorEnabled __pyx_string_tab[217]
#define __pyx_n_u_Model_setDetectorFinishingEnable __pyx_string_tab[218]
#define __pyx_n_u_Model_setDetectorPostprocessingE __pyx_string_tab[219]
#define __pyx_n_u_Model_setGCGSeparating __pyx_string_tab[220]
#define __pyx_n_u_Model_setPricingSolverEnabled __pyx_string_tab[221]
#define __pyx_n_u_Model_setPricingSolverExactEnabl __pyx_string_tab[222]
#define __pyx_n_u_Model_setPricingSolverHeuristicE __pyx_string_tab[223]
#define __pyx_n_u_Model_setVarClassifierEnabled __pyx_string_tab[224]
#define __pyx_n_u_Model_writeAllDecomps __pyx_string_tab[225]
#define __pyx_n_u_NOTAPPLICABLE __pyx_string_tab[226]
#define __pyx_n_u_OPTIMAL __pyx_string_tab[227]
#define __pyx_n_u_PY_ALL __pyx_string_tab[228]
#define __pyx_n_u_PY_BLOCK __pyx_string_tab[229]
#define __pyx_n_u_PY_BOTH __pyx_string_tab[230]
#define __pyx_n_u_PY_COMPLETE __pyx_string_tab[231]
#define __pyx_n_u_PY_COMPLETED_CONSTOMASTER __pyx_string_tab[232]
#define __pyx_n_u_PY_CONS_DECOMPINFO __pyx_string_tab[233]
#define __pyx_n_u_PY_CONS_DECOMPINFO___reduce_cyth __pyx_string_tab[234]
#define __pyx_n_u_PY_CONS_DECOMPINFO___setstate_cy __pyx_string_tab[235]
#define __pyx_n_u_PY_GCG_PRICINGSTATUS __pyx_string_tab[236]
#define __pyx_n_u_PY_GCG_PRICINGSTATUS___reduce_cy __pyx_string_tab[237]
#define __pyx_n_u_PY_GCG_PRICINGSTATUS___setstate __pyx_string_tab[238]
#define __pyx_n_u_PY_LINKING __pyx_string_tab[239]
#define __pyx_n_u_PY_MASTER __pyx_string_tab[240]
#define __pyx_n_u_PY_NOT __pyx_string_tab[241]
#define __pyx_n_u_PY_ONLY_MASTER __pyx_string_tab[242]
#define __pyx_n_u_PY_ONLY_PRICING __pyx_string_tab[243]
#define __pyx_n_u_PY_PARTIAL __pyx_string_tab[244]
#define __pyx_n_u_PY_SCIP_CALL __pyx_string_tab[245]
#define __pyx_n_u_PY_USERGIVEN __pyx_string_tab[246]
#define __pyx_n_u_PY_USERGIVEN___reduce_cython __pyx_string_tab[247]
#define __pyx_n_u_PY_USERGIVEN___setstate_cython __pyx_string_tab[248]
#define __pyx_n_u_PY_VAR_DECOMPINFO __pyx_string_tab[249]
#define __pyx_n_u_PY_VAR_DECOMPINFO___reduce_cytho __pyx_string_tab[250]
#define __pyx_n_u_PY_VAR_DECOMPINFO___setstate_cyt __pyx_string_tab[251]
#define __pyx_n_u_PartialDecomposition __pyx_string_tab[252]
#define __pyx_n_u_PartialDecomposition___copy __pyx_string_tab[253]
#define __pyx_n_u_PartialDecomposition___reduce_cy __pyx_string_tab[254]
#define __pyx_n_u_PartialDecomposition___setstate __pyx_string_tab[255]
#define __pyx_n_u_PartialDecomposition__repr_png __pyx_string_tab[256]
#define __pyx_n_u_PartialDecomposition__repr_svg __pyx_string_tab[257]
#define __pyx_n_u_PartialDecomposition_addAncestor __pyx_string_tab[258]
#define __pyx_n_u_PartialDecomposition_addBlock __pyx_string_tab[259]
#define __pyx_n_u_PartialDecomposition_addClockTim __pyx_string_tab[260]
#define __pyx_n_u_PartialDecomposition_addDecChang __pyx_string_tab[261]
#define __pyx_n_u_PartialDecomposition_addDetector __pyx_string_tab[262]
#define __pyx_n_u_PartialDecomposition_addNNewBloc __pyx_string_tab[263]
#define __pyx_n_u_PartialDecomposition_addPctConss __pyx_string_tab[264]
#define __pyx_n_u_PartialDecomposition_addPctConss_2 __pyx_string_tab[265]
#define __pyx_n_u_PartialDecomposition_addPctConss_3 __pyx_string_tab[266]
#define __pyx_n_u_PartialDecomposition_addPctVarsF __pyx_string_tab[267]
#define __pyx_n_u_PartialDecomposition_addPctVarsT __pyx_string_tab[268]
#define __pyx_n_u_PartialDecomposition_addPctVarsT_2 __pyx_string_tab[269]
#define __pyx_n_u_PartialDecomposition_aggInfoCalc __pyx_string_tab[270]
#define __pyx_n_u_PartialDecomposition_alreadyAssi __pyx_string_tab[271]
#define __pyx_n_u_PartialDecomposition_assignCurre __pyx_string_tab[272]
#define __pyx_n_u_PartialDecomposition_assignOpenC __pyx_string_tab[273]
#define __pyx_n_u_PartialDecomposition_assignSmall __pyx_string_tab[274]
#define __pyx_n_u_PartialDecomposition_buildDecCha __pyx_string_tab[275]
#define __pyx_n_u_PartialDecomposition_calcAggrega __pyx_string_tab[276]
#define __pyx_n_u_PartialDecomposition_checkAllCon __pyx_string_tab[277]
#define __pyx_n_u_PartialDecomposition_checkConsis __pyx_string_tab[278]
#define __pyx_n_u_PartialDecomposition_complete __pyx_string_tab[279]
#define __pyx_n_u_PartialDecomposition_completeByC __pyx_string_tab[280]
#define __pyx_n_u_PartialDecomposition_completeByC_2 __pyx_string_tab[281]
#define __pyx_n_u_PartialDecomposition_completeGre __pyx_string_tab[282]
#define __pyx_n_u_PartialDecomposition_considerImp __pyx_string_tab[283]
#define __pyx_n_u_PartialDecomposition_copy __pyx_string_tab[284]
#define __pyx_n_u_PartialDecomposition_copyPartiti __pyx_string_tab[285]
#define __pyx_n_u_PartialDecomposition_deleteEmpty __pyx_string_tab[286]
#define __pyx_n_u_PartialDecomposition_deleteOpenc __pyx_string_tab[287]
#define __pyx_n_u_PartialDecomposition_deleteOpenv __pyx_string_tab[288]
#define __pyx_n_u_PartialDecomposition_displayInfo __pyx_string_tab[289]
#define __pyx_n_u_PartialDecomposition_findVarsLin __pyx_string_tab[290]
#define __pyx_n_u_PartialDecomposition_findVarsLin_2 __pyx_string_tab[291]
#define __pyx_n_u_PartialDecomposition_fixConsToBl __pyx_string_tab[292]
#define __pyx_n_u_PartialDecomposition_fixConsToBl_2 __pyx_string_tab[293]
#define __pyx_n_u_PartialDecomposition_fixConsToMa __pyx_string_tab[294]
#define __pyx_n_u_PartialDecomposition_fixConssToB __pyx_string_tab[295]
#define __pyx_n_u_PartialDecomposition_fixConssToB_2 __pyx_string_tab[296]
#define __pyx_n_u_PartialDecomposition_fixConssToM __pyx_string_tab[297]
#define __pyx_n_u_PartialDecomposition_fixVarToLin __pyx_string_tab[298]
#define __pyx_n_u_PartialDecomposition_fixVarToMas __pyx_string_tab[299]
#define __pyx_n_u_PartialDecomposition_fixVarToSta __pyx_string_tab[300]
#define __pyx_n_u_PartialDecomposition_getAncestor __pyx_string_tab[301]
#define __pyx_n_u_PartialDecomposition_getAncestor_2 __pyx_string_tab[302]
#define __pyx_n_u_PartialDecomposition_getBlocksFo __pyx_string_tab[303]
#define __pyx_n_u_PartialDecomposition_getConssFor __pyx_string_tab[304]
#define __pyx_n_u_PartialDecomposition_getConssFor_2 __pyx_string_tab[305]
#define __pyx_n_u_PartialDecomposition_getDetector __pyx_string_tab[306]
#define __pyx_n_u_PartialDecomposition_getDetector_2 __pyx_string_tab[307]
#define __pyx_n_u_PartialDecomposition_getDetector_3 __pyx_string_tab[308]
#define __pyx_n_u_PartialDecomposition_getDetprobd __pyx_string_tab[309]
#define __pyx_n_u_PartialDecomposition_getEqClassF __pyx_string_tab[310]
#define __pyx_n_u_PartialDecomposition_getFinished __pyx_string_tab[311]
#define __pyx_n_u_PartialDecomposition_getHashValu __pyx_string_tab[312]
#define __pyx_n_u_PartialDecomposition_getID __pyx_string_tab[313]
#define __pyx_n_u_PartialDecomposition_getLinkingv __pyx_string_tab[314]
#define __pyx_n_u_PartialDecomposition_getMasterco __pyx_string_tab[315]
#define __pyx_n_u_PartialDecomposition_getMasterva __pyx_string_tab[316]
#define __pyx_n_u_PartialDecomposition_getNAncesto __pyx_string_tab[317]
#define __pyx_n_u_PartialDecomposition_getNBlocks __pyx_string_tab[318]
#define __pyx_n_u_PartialDecomposition_getNCoeffsF __pyx_string_tab[319]
#define __pyx_n_u_PartialDecomposition_getNCoeffsF_2 __pyx_string_tab[320]
#define __pyx_n_u_PartialDecomposition_getNConss __pyx_string_tab[321]
#define __pyx_n_u_PartialDecomposition_getNConssFo __pyx_string_tab[322]
#define __pyx_n_u_PartialDecomposition_getNDetecto __pyx_string_tab[323]
#define __pyx_n_u_PartialDecomposition_getNEquival __pyx_string_tab[324]
#define __pyx_n_u_PartialDecomposition_getNLinking __pyx_string_tab[325]
#define __pyx_n_u_PartialDecomposition_getNMasterc __pyx_string_tab[326]
#define __pyx_n_u_PartialDecomposition_getNMasterv __pyx_string_tab[327]
#define __pyx_n_u_PartialDecomposition_getNNewBloc __pyx_string_tab[328]
#define __pyx_n_u_PartialDecomposition_getNNewBloc_2 __pyx_string_tab[329]
#define __pyx_n_u_PartialDecomposition_getNOpencon __pyx_string_tab[330]
#define __pyx_n_u_PartialDecomposition_getNOpenvar __pyx_string_tab[331]
#define __pyx_n_u_PartialDecomposition_getNStairli __pyx_string_tab[332]
#define __pyx_n_u_PartialDecomposition_getNTotalSt __pyx_string_tab[333]
#define __pyx_n_u_PartialDecomposition_getNVars __pyx_string_tab[334]
#define __pyx_n_u_PartialDecomposition_getNVarsFor __pyx_string_tab[335]
#define __pyx_n_u_PartialDecomposition_getNVarsFor_2 __pyx_string_tab[336]
#define __pyx_n_u_PartialDecomposition_getOpencons __pyx_string_tab[337]
#define __pyx_n_u_PartialDecomposition_getOpenvars __pyx_string_tab[338]
#define __pyx_n_u_PartialDecomposition_getPctConss __pyx_string_tab[339]
#define __pyx_n_u_PartialDecomposition_getPctConss_2 __pyx_string_tab[340]
#define __pyx_n_u_PartialDecomposition_getPctConss_3 __pyx_string_tab[341]
#define __pyx_n_u_PartialDecomposition_getPctConss_4 __pyx_string_tab[342]
#define __pyx_n_u_PartialDecomposition_getPctConss_5 __pyx_string_tab[343]
#define __pyx_n_u_PartialDecomposition_getPctConss_6 __pyx_string_tab[344]
#define __pyx_n_u_PartialDecomposition_getPctVarsF __pyx_string_tab[345]
#define __pyx_n_u_PartialDecomposition_getPctVarsF_2 __pyx_string_tab[346]
#define __pyx_n_u_PartialDecomposition_getPctVarsT __pyx_string_tab[347]
#define __pyx_n_u_PartialDecomposition_getPctVarsT_2 __pyx_string_tab[348]
#define __pyx_n_u_PartialDecomposition_getPctVarsT_3 __pyx_string_tab[349]
#define __pyx_n_u_PartialDecomposition_getPctVarsT_4 __pyx_string_tab[350]
#define __pyx_n_u_PartialDecomposition_getRepVarma __pyx_string_tab[351]
#define __pyx_n_u_PartialDecomposition_getScore __pyx_string_tab[352]
#define __pyx_n_u_PartialDecomposition_getTranslat __pyx_string_tab[353]
#define __pyx_n_u_PartialDecomposition_getUsergive __pyx_string_tab[354]
#define __pyx_n_u_PartialDecomposition_getVarProbi __pyx_string_tab[355]
#define __pyx_n_u_PartialDecomposition_getVarsForB __pyx_string_tab[356]
#define __pyx_n_u_PartialDecomposition_hasSetppMas __pyx_string_tab[357]
#define __pyx_n_u_PartialDecomposition_hasSetppcMa __pyx_string_tab[358]
#define __pyx_n_u_PartialDecomposition_hasSetppcca __pyx_string_tab[359]
#define __pyx_n_u_PartialDecomposition_isAssignedT __pyx_string_tab[360]
#define __pyx_n_u_PartialDecomposition_isComplete __pyx_string_tab[361]
#define __pyx_n_u_PartialDecomposition_isConsMaste __pyx_string_tab[362]
#define __pyx_n_u_PartialDecomposition_isConsOpenc __pyx_string_tab[363]
#define __pyx_n_u_PartialDecomposition_isTrivial __pyx_string_tab[364]
#define __pyx_n_u_PartialDecomposition_isVarBlockv __pyx_string_tab[365]
#define __pyx_n_u_PartialDecomposition_isVarLinkin __pyx_string_tab[366]
#define __pyx_n_u_PartialDecomposition_isVarMaster __pyx_string_tab[367]
#define __pyx_n_u_PartialDecomposition_isVarOpenva __pyx_string_tab[368]
#define __pyx_n_u_PartialDecomposition_isVarStairl __pyx_string_tab[369]
#define __pyx_n_u_PartialDecomposition_isVarStairl_2 __pyx_string_tab[370]
#define __pyx_n_u_PartialDecomposition_prepare __pyx_string_tab[371]
#define __pyx_n_u_PartialDecomposition_refineToBlo __pyx_string_tab[372]
#define __pyx_n_u_PartialDecomposition_refineToMas __pyx_string_tab[373]
#define __pyx_n_u_PartialDecomposition_removeAnces __pyx_string_tab[374]
#define __pyx_n_u_PartialDecomposition_removeMaste __pyx_string_tab[375]
#define __pyx_n_u_PartialDecomposition_setAncestor __pyx_string_tab[376]
#define __pyx_n_u_PartialDecomposition_setConsPart __pyx_string_tab[377]
#define __pyx_n_u_PartialDecomposition_setConsToMa __pyx_string_tab[378]
#define __pyx_n_u_PartialDecomposition_setDetector __pyx_string_tab[379]
#define __pyx_n_u_PartialDecomposition_setDetector_2 __pyx_string_tab[380]
#define __pyx_n_u_PartialDecomposition_setDetector_3 __pyx_string_tab[381]
#define __pyx_n_u_PartialDecomposition_setDetector_4 __pyx_string_tab[382]
#define __pyx_n_u_PartialDecomposition_setFinished __pyx_string_tab[383]
#define __pyx_n_u_PartialDecomposition_setFinished_2 __pyx_string_tab[384]
#define __pyx_n_u_PartialDecomposition_setNBlocks __pyx_string_tab[385]
#define __pyx_n_u_PartialDecomposition_setPctConss __pyx_string_tab[386]
#define __pyx_n_u_PartialDecomposition_setPctConss_2 __pyx_string_tab[387]
#define __pyx_n_u_PartialDecomposition_setPctConss_3 __pyx_string_tab[388]
#define __pyx_n_u_PartialDecomposition_setPctVarsF __pyx_string_tab[389]
#define __pyx_n_u_PartialDecomposition_setPctVarsT __pyx_string_tab[390]
#define __pyx_n_u_PartialDecomposition_setPctVarsT_2 __pyx_string_tab[391]
#define __pyx_n_u_PartialDecomposition_setStemsFro __pyx_string_tab[392]
#define __pyx_n_u_PartialDecomposition_setTranslat __pyx_string_tab[393]
#define __pyx_n_u_PartialDecomposition_setUsergive __pyx_string_tab[394]
#define __pyx_n_u_PartialDecomposition_setVarParti __pyx_string_tab[395]
#define __pyx_n_u_PartialDecomposition_setVarToBlo __pyx_string_tab[396]
#define __pyx_n_u_PartialDecomposition_setVarToLin __pyx_string_tab[397]
#define __pyx_n_u_PartialDecomposition_setVarToMas __pyx_string_tab[398]
#define __pyx_n_u_PartialDecomposition_setVarToSta __pyx_string_tab[399]
#define __pyx_n_u_PartialDecomposition_shouldCompl __pyx_string_tab[400]
#define __pyx_n_u_PartialDecomposition_showVisuali __pyx_string_tab[401]
#define __pyx_n_u_PartialDecomposition_sort __pyx_string_tab[402]
#define __pyx_n_u_Path __pyx_string_tab[403]
#define __pyx_n_u_PricingSolver __pyx_string_tab[404]
#define __pyx_n_u_PricingSolver___reduce_cython __pyx_string_tab[405]
#define __pyx_n_u_PricingSolver___setstate_cython __pyx_string_tab[406]
#define __pyx_n_u_PricingSolver_exitSolution __pyx_string_tab[407]
#define __pyx_n_u_PricingSolver_exitSolver __pyx_string_tab[408]
#define __pyx_n_u_PricingSolver_freeSolver __pyx_string_tab[409]
#define __pyx_n_u_PricingSolver_initSolution __pyx_string_tab[410]
#define __pyx_n_u_PricingSolver_initSolver __pyx_string_tab[411]
#define __pyx_n_u_PricingSolver_solve __pyx_string_tab[412]
#define __pyx_n_u_PricingSolver_solveHeuristic __pyx_string_tab[413]
#define __pyx_n_u_PricingSolver_updateSolver __pyx_string_tab[414]
#define __pyx_n_u_Pyx_PyDict_NextRef __pyx_string_tab[415]
#define __pyx_n_u_SOLVERLIMIT __pyx_string_tab[416]
#define __pyx_n_u_Score __pyx_string_tab[417]
#define __pyx_n_u_Score___reduce_cython __pyx_string_tab[418]
#define __pyx_n_u_Score___setstate_cython __pyx_string_tab[419]
#define __pyx_n_u_Score_scorecalculate __pyx_string_tab[420]
#define __pyx_n_u_Score_scorefree __pyx_string_tab[421]
#define __pyx_n_u_TemporaryDirectory __pyx_string_tab[422]
#define __pyx_n_u_UNBOUNDED __pyx_string_tab[423]
#define __pyx_n_u_UNKNOWN __pyx_string_tab[424]
#define __pyx_n_u_VarClassifier __pyx_string_tab[425]
#define __pyx_n_u_VarClassifier___reduce_cython __pyx_string_tab[426]
#define __pyx_n_u_VarClassifier___setstate_cython __pyx_string_tab[427]
#define __pyx_n_u_VarClassifier_classify __pyx_string_tab[428]
#define __pyx_n_u_VarClassifier_freeVarClassifier __pyx_string_tab[429]
#define __pyx_n_u_VarPart __pyx_string_tab[430]
#define __pyx_n_u_VarPart___reduce_cython __pyx_string_tab[431]
#define __pyx_n_u_VarPart___setstate_cython __pyx_string_tab[432]
#define __pyx_n_u_VarPart_addClass __pyx_string_tab[433]
#define __pyx_n_u_VarPart_assignVarToClass __pyx_string_tab[434]
#define __pyx_n_u_VarPart_getAllSubsets __pyx_string_tab[435]
#define __pyx_n_u_VarPart_getClassDecompInfo __pyx_string_tab[436]
#define __pyx_n_u_VarPart_getClassDescription __pyx_string_tab[437]
#define __pyx_n_u_VarPart_getClassName __pyx_string_tab[438]
#define __pyx_n_u_VarPart_getClassNameOfVar __pyx_string_tab[439]
#define __pyx_n_u_VarPart_getClassOfVar __pyx_string_tab[440]
#define __pyx_n_u_VarPart_getNClasses __pyx_string_tab[441]
#define __pyx_n_u_VarPart_getNVars __pyx_string_tab[442]
#define __pyx_n_u_VarPart_getNVarsOfClasses __pyx_string_tab[443]
#define __pyx_n_u_VarPart_getName __pyx_string_tab[444]
#define __pyx_n_u_VarPart_isVarClassified __pyx_string_tab[445]
#define __pyx_n_u_VarPart_reduceClasses __pyx_string_tab[446]
#define __pyx_n_u_VarPart_removeEmptyClasses __pyx_string_tab[447]
#define __pyx_n_u_VarPart_setClassDecompInfo __pyx_string_tab[448]
#define __pyx_n_u_VarPart_setClassDescription __pyx_string_tab[449]
#define __pyx_n_u_VarPart_setClassName __pyx_string_tab[450]
#define __pyx_n_u_addAncestorID __pyx_string_tab[451]
#define __pyx_n_u_addBlock __pyx_string_tab[452]
#define __pyx_n_u_addCandidatesNBlocksNVotes __pyx_string_tab[453]
#define __pyx_n_u_addClass __pyx_string_tab[454]
#define __pyx_n_u_addClockTime __pyx_string_tab[455]
#define __pyx_n_u_addCol __pyx_string_tab[456]
#define __pyx_n_u_addConsPartition __pyx_string_tab[457]
#define __pyx_n_u_addDecChangesFromAncestor __pyx_string_tab[458]
#define __pyx_n_u_addDecomposition __pyx_string_tab[459]
#define __pyx_n_u_addDecompositionFromConss __pyx_string_tab[460]
#define __pyx_n_u_addDetectorChainInfo __pyx_string_tab[461]
#define __pyx_n_u_addNNewBlocks __pyx_string_tab[462]
#define __pyx_n_u_addPartialdecToAncestor __pyx_string_tab[463]
#define __pyx_n_u_addPartialdecToFinished __pyx_string_tab[464]
#define __pyx_n_u_addPartialdecToFinishedUnchecked __pyx_string_tab[465]
#define __pyx_n_u_addPartialdecToOpen __pyx_string_tab[466]
#define __pyx_n_u_addPctConssFromFree __pyx_string_tab[467]
#define __pyx_n_u_addPctConssToBlock __pyx_string_tab[468]
#define __pyx_n_u_addPctConssToBorder __pyx_string_tab[469]
#define __pyx_n_u_addPctVarsFromFree __pyx_string_tab[470]
#define __pyx_n_u_addPctVarsToBlock __pyx_string_tab[471]
#define __pyx_n_u_addPctVarsToBorder __pyx_string_tab[472]
#define __pyx_n_u_addPreexistingPartialDecompositi __pyx_string_tab[473]
#define __pyx_n_u_addVar __pyx_string_tab[474]
#define __pyx_n_u_addVarPartition __pyx_string_tab[475]
#define __pyx_n_u_aggInfoCalculated __pyx_string_tab[476]
#define __pyx_n_u_all __pyx_string_tab[477]
#define __pyx_n_u_alreadyAssignedConssToBlocks __pyx_string_tab[478]
#define __pyx_n_u_ancestor __pyx_string_tab[479]
#define __pyx_n_u_ancestor_id __pyx_string_tab[480]
#define __pyx_n_u_args __pyx_string_tab[481]
#define __pyx_n_u_assignConsToClass __pyx_string_tab[482]
#define __pyx_n_u_assignCurrentStairlinking __pyx_string_tab[483]
#define __pyx_n_u_assignOpenConssToMaster __pyx_string_tab[484]
#define __pyx_n_u_assignSmallestComponentsButOneCo __pyx_string_tab[485]
#define __pyx_n_u_assignVarToClass __pyx_string_tab[486]
#define __pyx_n_u_asyncio_coroutines __pyx_string_tab[487]
#define __pyx_n_u_block __pyx_string_tab[488]
#define __pyx_n_u_block1_id __pyx_string_tab[489]
#define __pyx_n_u_block2_id __pyx_string_tab[490]
#define __pyx_n_u_block_conss __pyx_string_tab[491]
#define __pyx_n_u_block_id __pyx_string_tab[492]
#define __pyx_n_u_blockrepid __pyx_string_tab[493]
#define __pyx_n_u_both __pyx_string_tab[494]
#define __pyx_n_u_buffer __pyx_string_tab[495]
#define __pyx_n_u_buildDecChainString __pyx_string_tab[496]
#define __pyx_n_u_c __pyx_string_tab[497]
#define __pyx_n_u_c_buffer __pyx_string_tab[498]
#define __pyx_n_u_c_consclassifiername __pyx_string_tab[499]
#define __pyx_n_u_c_decchar __pyx_string_tab[500]
#define __pyx_n_u_c_decinfo __pyx_string_tab[501]
#define __pyx_n_u_c_desc __pyx_string_tab[502]
#define __pyx_n_u_c_detectorname __pyx_string_tab[503]
#define __pyx_n_u_c_directory __pyx_string_tab[504]
#define __pyx_n_u_c_extension __pyx_string_tab[505]
#define __pyx_n_u_c_name __pyx_string_tab[506]
#define __pyx_n_u_c_scorename __pyx_string_tab[507]
#define __pyx_n_u_c_shortname __pyx_string_tab[508]
#define __pyx_n_u_c_solvername __pyx_string_tab[509]
#define __pyx_n_u_c_vals __pyx_string_tab[510]
#define __pyx_n_u_c_varclassifiername __pyx_string_tab[511]
#define __pyx_n_u_c_vars __pyx_string_tab[512]
#define __pyx_n_u_calcAggregationInformation __pyx_string_tab[513]
#define __pyx_n_u_candidate __pyx_string_tab[514]
#define __pyx_n_u_candidates __pyx_string_tab[515]
#define __pyx_n_u_candidatesNBlocks __pyx_string_tab[516]
#define __pyx_n_u_checkAllConssAssigned __pyx_string_tab[517]
#define __pyx_n_u_checkConsistency __pyx_string_tab[518]
#define __pyx_n_u_class __pyx_string_tab[519]
#define __pyx_n_u_class_getitem __pyx_string_tab[520]
#define __pyx_n_u_classic __pyx_string_tab[521]
#define __pyx_n_u_classificationtime __pyx_string_tab[522]
#define __pyx_n_u_classify __pyx_string_tab[523]
#define __pyx_n_u_classindex __pyx_string_tab[524]
#define __pyx_n_u_clearAncestorPartialdecs __pyx_string_tab[525]
#define __pyx_n_u_clearCurrentPartialdecs __pyx_string_tab[526]
#define __pyx_n_u_clearFinishedPartialdecs __pyx_string_tab[527]
#define __pyx_n_u_cline_in_traceback __pyx_string_tab[528]
#define __pyx_n_u_clocktime __pyx_string_tab[529]
#define __pyx_n_u_col __pyx_string_tab[530]
#define __pyx_n_u_collections_abc __pyx_string_tab[531]
#define __pyx_n_u_complete __pyx_string_tab[532]
#define __pyx_n_u_completeByConnected __pyx_string_tab[533]
#define __pyx_n_u_completeByConnectedConssAdjacenc __pyx_string_tab[534]
#define __pyx_n_u_completeGreedily __pyx_string_tab[535]
#define __pyx_n_u_comppartialdec __pyx_string_tab[536]
#define __pyx_n_u_cons __pyx_string_tab[537]
#define __pyx_n_u_consIndex __pyx_string_tab[538]
#define __pyx_n_u_consclassesmaster __pyx_string_tab[539]
#define __pyx_n_u_consclassifier __pyx_string_tab[540]
#define __pyx_n_u_consclassifiername __pyx_string_tab[541]
#define __pyx_n_u_consclassifiers __pyx_string_tab[542]
#define __pyx_n_u_considerImplicits __pyx_string_tab[543]
#define __pyx_n_u_conspartitioncollection __pyx_string_tab[544]
#define __pyx_n_u_conspartitioncollection_element __pyx_string_tab[545]
#define __pyx_n_u_conspartitioncollection_ptr __pyx_string_tab[546]
#define __pyx_n_u_conspatitionptr __pyx_string_tab[547]
#define __pyx_n_u_conss __pyx_string_tab[548]
#define __pyx_n_u_consschanged __pyx_string_tab[549]
#define __pyx_n_u_copy __pyx_string_tab[550]
#define __pyx_n_u_copyPartitionStatistics __pyx_string_tab[551]
#define __pyx_n_u_copy_2 __pyx_string_tab[552]
#define __pyx_n_u_cpp_ancestor __pyx_string_tab[553]
#define __pyx_n_u_cpp_ancestor_id __pyx_string_tab[554]
#define __pyx_n_u_cpp_block __pyx_string_tab[555]
#define __pyx_n_u_cpp_block1_id __pyx_string_tab[556]
#define __pyx_n_u_cpp_block2_id __pyx_string_tab[557]
#define __pyx_n_u_cpp_block_id __pyx_string_tab[558]
#define __pyx_n_u_cpp_blockrepid __pyx_string_tab[559]
#define __pyx_n_u_cpp_candidates __pyx_string_tab[560]
#define __pyx_n_u_cpp_candidatesNBlocks __pyx_string_tab[561]
#define __pyx_n_u_cpp_classificationtime __pyx_string_tab[562]
#define __pyx_n_u_cpp_clocktime __pyx_string_tab[563]
#define __pyx_n_u_cpp_comppartialdec __pyx_string_tab[564]
#define __pyx_n_u_cpp_consclassesmaster __pyx_string_tab[565]
#define __pyx_n_u_cpp_consindex __pyx_string_tab[566]
#define __pyx_n_u_cpp_conspartitioncollection __pyx_string_tab[567]
#define __pyx_n_u_cpp_dec_id __pyx_string_tab[568]
#define __pyx_n_u_cpp_detailLevel __pyx_string_tab[569]
#define __pyx_n_u_cpp_detectorchain_id __pyx_string_tab[570]
#define __pyx_n_u_cpp_detectorchainindex __pyx_string_tab[571]
#define __pyx_n_u_cpp_finished __pyx_string_tab[572]
#define __pyx_n_u_cpp_firstblock_id __pyx_string_tab[573]
#define __pyx_n_u_cpp_fromorig __pyx_string_tab[574]
#define __pyx_n_u_cpp_ignoreDetectionLimits __pyx_string_tab[575]
#define __pyx_n_u_cpp_nblocks __pyx_string_tab[576]
#define __pyx_n_u_cpp_nblockscandidatescalctime __pyx_string_tab[577]
#define __pyx_n_u_cpp_newlist __pyx_string_tab[578]
#define __pyx_n_u_cpp_newvector __pyx_string_tab[579]
#define __pyx_n_u_cpp_nnewblocks __pyx_string_tab[580]
#define __pyx_n_u_cpp_otherdata __pyx_string_tab[581]
#define __pyx_n_u_cpp_otherpartialdec __pyx_string_tab[582]
#define __pyx_n_u_cpp_otherpartialdecs __pyx_string_tab[583]
#define __pyx_n_u_cpp_partialdec __pyx_string_tab[584]
#define __pyx_n_u_cpp_partialdecs __pyx_string_tab[585]
#define __pyx_n_u_cpp_partition __pyx_string_tab[586]
#define __pyx_n_u_cpp_pct __pyx_string_tab[587]
#define __pyx_n_u_cpp_postprocessingtime __pyx_string_tab[588]
#define __pyx_n_u_cpp_rep_id __pyx_string_tab[589]
#define __pyx_n_u_cpp_repid __pyx_string_tab[590]
#define __pyx_n_u_cpp_translatingtime __pyx_string_tab[591]
#define __pyx_n_u_cpp_varclasseslinking __pyx_string_tab[592]
#define __pyx_n_u_cpp_varclassesmaster __pyx_string_tab[593]
#define __pyx_n_u_cpp_variables __pyx_string_tab[594]
#define __pyx_n_u_cpp_varid __pyx_string_tab[595]
#define __pyx_n_u_cpp_varindex __pyx_string_tab[596]
#define __pyx_n_u_cpp_varpartitioncollection __pyx_string_tab[597]
#define __pyx_n_u_createConsPart __pyx_string_tab[598]
#define __pyx_n_u_createConssAdjacency __pyx_string_tab[599]
#define __pyx_n_u_createDecomposition __pyx_string_tab[600]
#define __pyx_n_u_createDirectory __pyx_string_tab[601]
#define __pyx_n_u_createGcgCol __pyx_string_tab[602]
#define __pyx_n_u_createProbBasic __pyx_string_tab[603]
#define __pyx_n_u_createVarPart __pyx_string_tab[604]
#define __pyx_n_u_creategcg __pyx_string_tab[605]
#define __pyx_n_u_createscip __pyx_string_tab[606]
#define __pyx_n_u_dec __pyx_string_tab[607]
#define __pyx_n_u_dec_id __pyx_string_tab[608]
#define __pyx_n_u_decchar __pyx_string_tab[609]
#define __pyx_n_u_decids __pyx_string_tab[610]
#define __pyx_n_u_decinfo __pyx_string_tab[611]
#define __pyx_n_u_decomp __pyx_string_tab[612]
#define __pyx_n_u_decompInfo __pyx_string_tab[613]
#define __pyx_n_u_decomps __pyx_string_tab[614]
#define __pyx_n_u_defaultPlugins __pyx_string_tab[615]
#define __pyx_n_u_deleteEmptyBlocks __pyx_string_tab[616]
#define __pyx_n_u_deleteOpencons __pyx_string_tab[617]
#define __pyx_n_u_deleteOpenvar __pyx_string_tab[618]
#define __pyx_n_u_desc __pyx_string_tab[619]
#define __pyx_n_u_det_prob_data __pyx_string_tab[620]
#define __pyx_n_u_detailLevel __pyx_string_tab[621]
#define __pyx_n_u_detect __pyx_string_tab[622]
#define __pyx_n_u_detector __pyx_string_tab[623]
#define __pyx_n_u_detector_name __pyx_string_tab[624]
#define __pyx_n_u_detectorchain_id __pyx_string_tab[625]
#define __pyx_n_u_detectorchainindex __pyx_string_tab[626]
#define __pyx_n_u_detectorname __pyx_string_tab[627]
#define __pyx_n_u_detectors __pyx_string_tab[628]
#define __pyx_n_u_detprobdata __pyx_string_tab[629]
#define __pyx_n_u_dict __pyx_string_tab[630]
#define __pyx_n_u_dict_2 __pyx_string_tab[631]
#define __pyx_n_u_directory __pyx_string_tab[632]
#define __pyx_n_u_displayInfo __pyx_string_tab[633]
#define __pyx_n_u_dualsolconv __pyx_string_tab[634]
#define __pyx_n_u_enabled __pyx_string_tab[635]
#define __pyx_n_u_enabledfinishing __pyx_string_tab[636]
#define __pyx_n_u_enabledpostprocessing __pyx_string_tab[637]
#define __pyx_n_u_enter __pyx_string_tab[638]
#define __pyx_n_u_enumerate __pyx_string_tab[639]
#define __pyx_n_u_exactEnabled __pyx_string_tab[640]
#define __pyx_n_u_exist_ok __pyx_string_tab[641]
#define __pyx_n_u_exit __pyx_string_tab[642]
#define __pyx_n_u_exitDetector __pyx_string_tab[643]
#define __pyx_n_u_exitSolution __pyx_string_tab[644]
#define __pyx_n_u_exitSolver __pyx_string_tab[645]
#define __pyx_n_u_extension __pyx_string_tab[646]
#define __pyx_n_u_findVarsLinkingToMaster __pyx_string_tab[647]
#define __pyx_n_u_findVarsLinkingToStairlinking __pyx_string_tab[648]
#define __pyx_n_u_finishPartialdec __pyx_string_tab[649]
#define __pyx_n_u_finished __pyx_string_tab[650]
#define __pyx_n_u_firstblock_id __pyx_string_tab[651]
#define __pyx_n_u_fixConsToBlock __pyx_string_tab[652]
#define __pyx_n_u_fixConsToBlockId __pyx_string_tab[653]
#define __pyx_n_u_fixConsToMaster __pyx_string_tab[654]
#define __pyx_n_u_fixConssToBlock __pyx_string_tab[655]
#define __pyx_n_u_fixConssToBlockId __pyx_string_tab[656]
#define __pyx_n_u_fixConssToMaster __pyx_string_tab[657]
#define __pyx_n_u_fixVarToLinking __pyx_string_tab[658]
#define __pyx_n_u_fixVarToMaster __pyx_string_tab[659]
#define __pyx_n_u_fixVarToStairlinking __pyx_string_tab[660]
#define __pyx_n_u_format __pyx_string_tab[661]
#define __pyx_n_u_freeConsClassifier __pyx_string_tab[662]
#define __pyx_n_u_freeDetector __pyx_string_tab[663]
#define __pyx_n_u_freeSolver __pyx_string_tab[664]
#define __pyx_n_u_freeTemporaryData __pyx_string_tab[665]
#define __pyx_n_u_freeVarClassifier __pyx_string_tab[666]
#define __pyx_n_u_freegcg __pyx_string_tab[667]
#define __pyx_n_u_freqcallround __pyx_string_tab[668]
#define __pyx_n_u_freqcallroundoriginal __pyx_string_tab[669]
#define __pyx_n_u_fromorig __pyx_string_tab[670]
#define __pyx_n_u_func __pyx_string_tab[671]
#define __pyx_n_u_gcg __pyx_string_tab[672]
#define __pyx_n_u_gcg_col __pyx_string_tab[673]
#define __pyx_n_u_get __pyx_string_tab[674]
#define __pyx_n_u_getAllSubsets __pyx_string_tab[675]
#define __pyx_n_u_getAncestorID __pyx_string_tab[676]
#define __pyx_n_u_getAncestorList __pyx_string_tab[677]
#define __pyx_n_u_getAncestorPartialdec __pyx_string_tab[678]
#define __pyx_n_u_getBlocksForEqClass __pyx_string_tab[679]
#define __pyx_n_u_getClassDecompInfo __pyx_string_tab[680]
#define __pyx_n_u_getClassDescription __pyx_string_tab[681]
#define __pyx_n_u_getClassName __pyx_string_tab[682]
#define __pyx_n_u_getClassNameOfCons __pyx_string_tab[683]
#define __pyx_n_u_getClassNameOfVar __pyx_string_tab[684]
#define __pyx_n_u_getClassOfCons __pyx_string_tab[685]
#define __pyx_n_u_getClassOfVar __pyx_string_tab[686]
#define __pyx_n_u_getCons __pyx_string_tab[687]
#define __pyx_n_u_getConsPartition __pyx_string_tab[688]
#define __pyx_n_u_getConsPartitions __pyx_string_tab[689]
#define __pyx_n_u_getConssForBlock __pyx_string_tab[690]
#define __pyx_n_u_getConssForBlocks __pyx_string_tab[691]
#define __pyx_n_u_getConssForCons __pyx_string_tab[692]
#define __pyx_n_u_getConssForVar __pyx_string_tab[693]
#define __pyx_n_u_getDetectorClockTime __pyx_string_tab[694]
#define __pyx_n_u_getDetectorClockTimes __pyx_string_tab[695]
#define __pyx_n_u_getDetectorchainInfo __pyx_string_tab[696]
#define __pyx_n_u_getDetprobdata __pyx_string_tab[697]
#define __pyx_n_u_getDetprobdataOrig __pyx_string_tab[698]
#define __pyx_n_u_getDetprobdataPresolved __pyx_string_tab[699]
#define __pyx_n_u_getDualbound __pyx_string_tab[700]
#define __pyx_n_u_getEqClassForBlock __pyx_string_tab[701]
#define __pyx_n_u_getFinishedByFinisher __pyx_string_tab[702]
#define __pyx_n_u_getFinishedPartialdec __pyx_string_tab[703]
#define __pyx_n_u_getFinishedPartialdecs __pyx_string_tab[704]
#define __pyx_n_u_getHashValue __pyx_string_tab[705]
#define __pyx_n_u_getID __pyx_string_tab[706]
#define __pyx_n_u_getIndexForCons __pyx_string_tab[707]
#define __pyx_n_u_getIndexForVar __pyx_string_tab[708]
#define __pyx_n_u_getLinkingvars __pyx_string_tab[709]
#define __pyx_n_u_getMasterProb __pyx_string_tab[710]
#define __pyx_n_u_getMasterconss __pyx_string_tab[711]
#define __pyx_n_u_getMastervars __pyx_string_tab[712]
#define __pyx_n_u_getNAncestorPartialdecs __pyx_string_tab[713]
#define __pyx_n_u_getNAncestors __pyx_string_tab[714]
#define __pyx_n_u_getNBlocks __pyx_string_tab[715]
#define __pyx_n_u_getNClasses __pyx_string_tab[716]
#define __pyx_n_u_getNCoeffsForBlock __pyx_string_tab[717]
#define __pyx_n_u_getNCoeffsForMaster __pyx_string_tab[718]
#define __pyx_n_u_getNConsClassifiers __pyx_string_tab[719]
#define __pyx_n_u_getNConsPartitions __pyx_string_tab[720]
#define __pyx_n_u_getNConss __pyx_string_tab[721]
#define __pyx_n_u_getNConssForBlock __pyx_string_tab[722]
#define __pyx_n_u_getNConssForCons __pyx_string_tab[723]
#define __pyx_n_u_getNConssForVar __pyx_string_tab[724]
#define __pyx_n_u_getNConssOfClasses __pyx_string_tab[725]
#define __pyx_n_u_getNDetectors __pyx_string_tab[726]
#define __pyx_n_u_getNEquivalenceClasses __pyx_string_tab[727]
#define __pyx_n_u_getNFinishedPartialdecs __pyx_string_tab[728]
#define __pyx_n_u_getNLinkingvars __pyx_string_tab[729]
#define __pyx_n_u_getNMasterconss __pyx_string_tab[730]
#define __pyx_n_u_getNMastervars __pyx_string_tab[731]
#define __pyx_n_u_getNNewBlocks __pyx_string_tab[732]
#define __pyx_n_u_getNNewBlocksVector __pyx_string_tab[733]
#define __pyx_n_u_getNNonzeros __pyx_string_tab[734]
#define __pyx_n_u_getNOpenPartialdecs __pyx_string_tab[735]
#define __pyx_n_u_getNOpenconss __pyx_string_tab[736]
#define __pyx_n_u_getNOpenvars __pyx_string_tab[737]
#define __pyx_n_u_getNPartialdecs __pyx_string_tab[738]
#define __pyx_n_u_getNStairlinkingvars __pyx_string_tab[739]
#define __pyx_n_u_getNTotalStairlinkingvars __pyx_string_tab[740]
#define __pyx_n_u_getNVarClassifiers __pyx_string_tab[741]
#define __pyx_n_u_getNVarPartitions __pyx_string_tab[742]
#define __pyx_n_u_getNVars __pyx_string_tab[743]
#define __pyx_n_u_getNVarsForBlock __pyx_string_tab[744]
#define __pyx_n_u_getNVarsForBlocks __pyx_string_tab[745]
#define __pyx_n_u_getNVarsForCons __pyx_string_tab[746]
#define __pyx_n_u_getNVarsOfClasses __pyx_string_tab[747]
#define __pyx_n_u_getName __pyx_string_tab[748]
#define __pyx_n_u_getOpenPartialdecs __pyx_string_tab[749]
#define __pyx_n_u_getOpenconss __pyx_string_tab[750]
#define __pyx_n_u_getOpenvars __pyx_string_tab[751]
#define __pyx_n_u_getOrigVarsFixedZero __pyx_string_tab[752]
#define __pyx_n_u_getOrigvars __pyx_string_tab[753]
#define __pyx_n_u_getPartDecompFromID __pyx_string_tab[754]
#define __pyx_n_u_getPctConssFromFree __pyx_string_tab[755]
#define __pyx_n_u_getPctConssFromFreeVector __pyx_string_tab[756]
#define __pyx_n_u_getPctConssToBlock __pyx_string_tab[757]
#define __pyx_n_u_getPctConssToBlockVector __pyx_string_tab[758]
#define __pyx_n_u_getPctConssToBorder __pyx_string_tab[759]
#define __pyx_n_u_getPctConssToBorderVector __pyx_string_tab[760]
#define __pyx_n_u_getPctVarsFromFree __pyx_string_tab[761]
#define __pyx_n_u_getPctVarsFromFreeVector __pyx_string_tab[762]
#define __pyx_n_u_getPctVarsToBlock __pyx_string_tab[763]
#define __pyx_n_u_getPctVarsToBlockVector __pyx_string_tab[764]
#define __pyx_n_u_getPctVarsToBorder __pyx_string_tab[765]
#define __pyx_n_u_getPctVarsToBorderVector __pyx_string_tab[766]
#define __pyx_n_u_getRelevantConss __pyx_string_tab[767]
#define __pyx_n_u_getRelevantVars __pyx_string_tab[768]
#define __pyx_n_u_getRepVarmap __pyx_string_tab[769]
#define __pyx_n_u_getScore __pyx_string_tab[770]
#define __pyx_n_u_getSortedCandidatesNBlocks __pyx_string_tab[771]
#define __pyx_n_u_getStage __pyx_string_tab[772]
#define __pyx_n_u_getTranslatedpartialdecid __pyx_string_tab[773]
#define __pyx_n_u_getUsergiven __pyx_string_tab[774]
#define __pyx_n_u_getVal __pyx_string_tab[775]
#define __pyx_n_u_getValsForCons __pyx_string_tab[776]
#define __pyx_n_u_getVar __pyx_string_tab[777]
#define __pyx_n_u_getVarPartition __pyx_string_tab[778]
#define __pyx_n_u_getVarPartitions __pyx_string_tab[779]
#define __pyx_n_u_getVarProbindexForBlock __pyx_string_tab[780]
#define __pyx_n_u_getVarsForBlock __pyx_string_tab[781]
#define __pyx_n_u_getVarsForCons __pyx_string_tab[782]
#define __pyx_n_u_getstate __pyx_string_tab[783]
#define __pyx_n_u_hasSetppMaster __pyx_string_tab[784]
#define __pyx_n_u_hasSetppcMaster __pyx_string_tab[785]
#define __pyx_n_u_hasSetppccardMaster __pyx_string_tab[786]
#define __pyx_n_u_heuristicEnabled __pyx_string_tab[787]
#define __pyx_n_u_i __pyx_string_tab[788]
#define __pyx_n_u_id __pyx_string_tab[789]
#define __pyx_n_u_idx __pyx_string_tab[790]
#define __pyx_n_u_ignoreDetectionLimits __pyx_string_tab[791]
#define __pyx_n_u_includeConsClassifier __pyx_string_tab[792]
#define __pyx_n_u_includeDefaultPlugins __pyx_string_tab[793]
#define __pyx_n_u_includeDetector __pyx_string_tab[794]
#define __pyx_n_u_includePricingSolver __pyx_string_tab[795]
#define __pyx_n_u_includeScore __pyx_string_tab[796]
#define __pyx_n_u_includeVarClassifier __pyx_string_tab[797]
#define __pyx_n_u_index __pyx_string_tab[798]
#define __pyx_n_u_initDetector __pyx_string_tab[799]
#define __pyx_n_u_initSolution __pyx_string_tab[800]
#define __pyx_n_u_initSolver __pyx_string_tab[801]
#define __pyx_n_u_isAssignedToOrigProb __pyx_string_tab[802]
#define __pyx_n_u_isComplete __pyx_string_tab[803]
#define __pyx_n_u_isConsCardinalityCons __pyx_string_tab[804]
#define __pyx_n_u_isConsClassified __pyx_string_tab[805]
#define __pyx_n_u_isConsMastercons __pyx_string_tab[806]
#define __pyx_n_u_isConsOpencons __pyx_string_tab[807]
#define __pyx_n_u_isConsSetpp __pyx_string_tab[808]
#define __pyx_n_u_isConsSetppc __pyx_string_tab[809]
#define __pyx_n_u_isConssAdjInitialized __pyx_string_tab[810]
#define __pyx_n_u_isPartialdecDuplicateofFinished __pyx_string_tab[811]
#define __pyx_n_u_isTrivial __pyx_string_tab[812]
#define __pyx_n_u_isVarBlockvarOfBlock __pyx_string_tab[813]
#define __pyx_n_u_isVarClassified __pyx_string_tab[814]
#define __pyx_n_u_isVarLinkingvar __pyx_string_tab[815]
#define __pyx_n_u_isVarMastervar __pyx_string_tab[816]
#define __pyx_n_u_isVarOpenvar __pyx_string_tab[817]
#define __pyx_n_u_isVarStairlinkingvar __pyx_string_tab[818]
#define __pyx_n_u_isVarStairlinkingvarOfBlock __pyx_string_tab[819]
#define __pyx_n_u_is_coroutine __pyx_string_tab[820]
#define __pyx_n_u_is_enabled __pyx_string_tab[821]
#define __pyx_n_u_is_presolved __pyx_string_tab[822]
#define __pyx_n_u_isray __pyx_string_tab[823]
#define __pyx_n_u_items __pyx_string_tab[824]
#define __pyx_n_u_joinpath __pyx_string_tab[825]
#define __pyx_n_u_kwargs __pyx_string_tab[826]
#define __pyx_n_u_linking __pyx_string_tab[827]
#define __pyx_n_u_listConsClassifiers __pyx_string_tab[828]
#define __pyx_n_u_listDecompositions __pyx_string_tab[829]
#define __pyx_n_u_listDetectors __pyx_string_tab[830]
#define __pyx_n_u_listPricingSolvers __pyx_string_tab[831]
#define __pyx_n_u_listScores __pyx_string_tab[832]
#define __pyx_n_u_listVarClassifiers __pyx_string_tab[833]
#define __pyx_n_u_lower __pyx_string_tab[834]
#define __pyx_n_u_lowerbound __pyx_string_tab[835]
#define __pyx_n_u_main __pyx_string_tab[836]
#define __pyx_n_u_master __pyx_string_tab[837]
#define __pyx_n_u_master_conss __pyx_string_tab[838]
#define __pyx_n_u_master_prob __pyx_string_tab[839]
#define __pyx_n_u_mastervars __pyx_string_tab[840]
#define __pyx_n_u_maxForWhiteScore_2 __pyx_string_tab[841]
#define __pyx_n_u_maxNumberOfClasses __pyx_string_tab[842]
#define __pyx_n_u_maxcallround __pyx_string_tab[843]
#define __pyx_n_u_maxcallroundoriginal __pyx_string_tab[844]
#define __pyx_n_u_mincallround __pyx_string_tab[845]
#define __pyx_n_u_mincallroundoriginal __pyx_string_tab[846]
#define __pyx_n_u_mkdir __pyx_string_tab[847]
#define __pyx_n_u_model __pyx_string_tab[848]
#define __pyx_n_u_module __pyx_string_tab[849]
#define __pyx_n_u_n_consclassifiers __pyx_string_tab[850]
#define __pyx_n_u_n_detectors __pyx_string_tab[851]
#define __pyx_n_u_n_pricing_solvers __pyx_string_tab[852]
#define __pyx_n_u_n_scores __pyx_string_tab[853]
#define __pyx_n_u_n_varclassifiers __pyx_string_tab[854]
#define __pyx_n_u_n_vars __pyx_string_tab[855]
#define __pyx_n_u_name __pyx_string_tab[856]
#define __pyx_n_u_name_2 __pyx_string_tab[857]
#define __pyx_n_u_nblocks __pyx_string_tab[858]
#define __pyx_n_u_nblockscandidatescalctime __pyx_string_tab[859]
#define __pyx_n_u_nclasses __pyx_string_tab[860]
#define __pyx_n_u_ncons __pyx_string_tab[861]
#define __pyx_n_u_nconsparts __pyx_string_tab[862]
#define __pyx_n_u_new __pyx_string_tab[863]
#define __pyx_n_u_newlist __pyx_string_tab[864]
#define __pyx_n_u_newpartialdecs __pyx_string_tab[865]
#define __pyx_n_u_newvector __pyx_string_tab[866]
#define __pyx_n_u_nnewblocks __pyx_string_tab[867]
#define __pyx_n_u_npartialdecs __pyx_string_tab[868]
#define __pyx_n_u_nvars __pyx_string_tab[869]
#define __pyx_n_u_nvotes __pyx_string_tab[870]
#define __pyx_n_u_only_master __pyx_string_tab[871]
#define __pyx_n_u_only_pricing __pyx_string_tab[872]
#define __pyx_n_u_optimize __pyx_string_tab[873]
#define __pyx_n_u_original __pyx_string_tab[874]
#define __pyx_n_u_originalvars __pyx_string_tab[875]
#define __pyx_n_u_otherdata __pyx_string_tab[876]
#define __pyx_n_u_otherpartialdec __pyx_string_tab[877]
#define __pyx_n_u_otherpartialdecs __pyx_string_tab[878]
#define __pyx_n_u_otherpartialdecs_element __pyx_string_tab[879]
#define __pyx_n_u_otherpartialdecs_ptr __pyx_string_tab[880]
#define __pyx_n_u_parents __pyx_string_tab[881]
#define __pyx_n_u_partialdec __pyx_string_tab[882]
#define __pyx_n_u_partialdecIsNoDuplicateOfPartial __pyx_string_tab[883]
#define __pyx_n_u_partialdecindex __pyx_string_tab[884]
#define __pyx_n_u_partialdecs __pyx_string_tab[885]
#define __pyx_n_u_partialdecs_element __pyx_string_tab[886]
#define __pyx_n_u_partialdecs_ptr __pyx_string_tab[887]
#define __pyx_n_u_partition __pyx_string_tab[888]
#define __pyx_n_u_partitionIndex __pyx_string_tab[889]
#define __pyx_n_u_pathlib __pyx_string_tab[890]
#define __pyx_n_u_pct __pyx_string_tab[891]
#define __pyx_n_u_pd __pyx_string_tab[892]
#define __pyx_n_u_png __pyx_string_tab[893]
#define __pyx_n_u_pop __pyx_string_tab[894]
#define __pyx_n_u_postprocessPartialdec __pyx_string_tab[895]
#define __pyx_n_u_postprocessingtime __pyx_string_tab[896]
#define __pyx_n_u_prepare __pyx_string_tab[897]
#define __pyx_n_u_presolve __pyx_string_tab[898]
#define __pyx_n_u_presolved __pyx_string_tab[899]
#define __pyx_n_u_pricingSolver __pyx_string_tab[900]
#define __pyx_n_u_pricing_solver_name __pyx_string_tab[901]
#define __pyx_n_u_pricing_solvers __pyx_string_tab[902]
#define __pyx_n_u_pricingprob __pyx_string_tab[903]
#define __pyx_n_u_print __pyx_string_tab[904]
#define __pyx_n_u_printStatistics __pyx_string_tab[905]
#define __pyx_n_u_printVersion __pyx_string_tab[906]
#define __pyx_n_u_priority __pyx_string_tab[907]
#define __pyx_n_u_problemName __pyx_string_tab[908]
#define __pyx_n_u_probnr __pyx_string_tab[909]
#define __pyx_n_u_propagatePartialdec __pyx_string_tab[910]
#define __pyx_n_u_proxy __pyx_string_tab[911]
#define __pyx_n_u_pyGCGCol __pyx_string_tab[912]
#define __pyx_n_u_pyVar __pyx_string_tab[913]
#define __pyx_n_u_pygcgopt_gcg __pyx_string_tab[914]
#define __pyx_n_u_pygcgopt_util __pyx_string_tab[915]
#define __pyx_n_u_pyscipopt_scip __pyx_string_tab[916]
#define __pyx_n_u_pyx_checksum __pyx_string_tab[917]
#define __pyx_n_u_pyx_result __pyx_string_tab[918]
#define __pyx_n_u_pyx_state __pyx_string_tab[919]
#define __pyx_n_u_pyx_type __pyx_string_tab[920]
#define __pyx_n_u_pyx_unpickle_ConsClassifier __pyx_string_tab[921]
#define __pyx_n_u_pyx_unpickle_Detector __pyx_string_tab[922]
#define __pyx_n_u_pyx_unpickle_PY_CONS_DECOMPINF __pyx_string_tab[923]
#define __pyx_n_u_pyx_unpickle_PY_GCG_PRICINGSTA __pyx_string_tab[924]
#define __pyx_n_u_pyx_unpickle_PY_USERGIVEN __pyx_string_tab[925]
#define __pyx_n_u_pyx_unpickle_PY_VAR_DECOMPINFO __pyx_string_tab[926]
#define __pyx_n_u_pyx_unpickle_PricingSolver __pyx_string_tab[927]
#define __pyx_n_u_pyx_unpickle_Score __pyx_string_tab[928]
#define __pyx_n_u_pyx_unpickle_VarClassifier __pyx_string_tab[929]
#define __pyx_n_u_pyx_vtable __pyx_string_tab[930]
#define __pyx_n_u_qualname __pyx_string_tab[931]
#define __pyx_n_u_r __pyx_string_tab[932]
#define __pyx_n_u_read_bytes __pyx_string_tab[933]
#define __pyx_n_u_read_text __pyx_string_tab[934]
#define __pyx_n_u_redcost __pyx_string_tab[935]
#define __pyx_n_u_reduce __pyx_string_tab[936]
#define __pyx_n_u_reduceClasses __pyx_string_tab[937]
#define __pyx_n_u_reduce_cython __pyx_string_tab[938]
#define __pyx_n_u_reduce_ex __pyx_string_tab[939]
#define __pyx_n_u_refineToBlocks __pyx_string_tab[940]
#define __pyx_n_u_refineToMaster __pyx_string_tab[941]
#define __pyx_n_u_removeAncestorID __pyx_string_tab[942]
#define __pyx_n_u_removeEmptyClasses __pyx_string_tab[943]
#define __pyx_n_u_removeMastercons __pyx_string_tab[944]
#define __pyx_n_u_rep_id __pyx_string_tab[945]
#define __pyx_n_u_repid __pyx_string_tab[946]
#define __pyx_n_u_repr_png __pyx_string_tab[947]
#define __pyx_n_u_repr_svg __pyx_string_tab[948]
#define __pyx_n_u_result __pyx_string_tab[949]
#define __pyx_n_u_row __pyx_string_tab[950]
#define __pyx_n_u_score __pyx_string_tab[951]
#define __pyx_n_u_scorecalculate __pyx_string_tab[952]
#define __pyx_n_u_scorefree __pyx_string_tab[953]
#define __pyx_n_u_scorename __pyx_string_tab[954]
#define __pyx_n_u_scores __pyx_string_tab[955]
#define __pyx_n_u_scorevalue __pyx_string_tab[956]
#define __pyx_n_u_self __pyx_string_tab[957]
#define __pyx_n_u_setAncestorList __pyx_string_tab[958]
#define __pyx_n_u_setBoolParam __pyx_string_tab[959]
#define __pyx_n_u_setClassDecompInfo __pyx_string_tab[960]
#define __pyx_n_u_setClassDescription __pyx_string_tab[961]
#define __pyx_n_u_setClassName __pyx_string_tab[962]
#define __pyx_n_u_setConsPartitionStatistics __pyx_string_tab[963]
#define __pyx_n_u_setConsToMaster __pyx_string_tab[964]
#define __pyx_n_u_setDetectorClockTimes __pyx_string_tab[965]
#define __pyx_n_u_setDetectorEnabled __pyx_string_tab[966]
#define __pyx_n_u_setDetectorFinished __pyx_string_tab[967]
#define __pyx_n_u_setDetectorFinishedOrig __pyx_string_tab[968]
#define __pyx_n_u_setDetectorFinishingEnabled __pyx_string_tab[969]
#define __pyx_n_u_setDetectorPostprocessingEnabled __pyx_string_tab[970]
#define __pyx_n_u_setDetectorPropagated __pyx_string_tab[971]
#define __pyx_n_u_setFinishedByFinisher __pyx_string_tab[972]
#define __pyx_n_u_setFinishedByFinisherOrig __pyx_string_tab[973]
#define __pyx_n_u_setGCGSeparating __pyx_string_tab[974]
#define __pyx_n_u_setNBlocks __pyx_string_tab[975]
#define __pyx_n_u_setParamAggressive __pyx_string_tab[976]
#define __pyx_n_u_setParamDefault __pyx_string_tab[977]
#define __pyx_n_u_setParamFast __pyx_string_tab[978]
#define __pyx_n_u_setPctConssFromFreeVector __pyx_string_tab[979]
#define __pyx_n_u_setPctConssToBlockVector __pyx_string_tab[980]
#define __pyx_n_u_setPctConssToBorderVector __pyx_string_tab[981]
#define __pyx_n_u_setPctVarsFromFreeVector __pyx_string_tab[982]
#define __pyx_n_u_setPctVarsToBlockVector __pyx_string_tab[983]
#define __pyx_n_u_setPctVarsToBorderVector __pyx_string_tab[984]
#define __pyx_n_u_setPricingSolverEnabled __pyx_string_tab[985]
#define __pyx_n_u_setPricingSolverExactEnabled __pyx_string_tab[986]
#define __pyx_n_u_setPricingSolverHeuristicEnabled __pyx_string_tab[987]
#define __pyx_n_u_setStemsFromOrig __pyx_string_tab[988]
#define __pyx_n_u_setTranslatedpartialdecid __pyx_string_tab[989]
#define __pyx_n_u_setUsergiven __pyx_string_tab[990]
#define __pyx_n_u_setVarClassifierEnabled __pyx_string_tab[991]
#define __pyx_n_u_setVarPartitionStatistics __pyx_string_tab[992]
#define __pyx_n_u_setVarToBlockId __pyx_string_tab[993]
#define __pyx_n_u_setVarToLinking __pyx_string_tab[994]
#define __pyx_n_u_setVarToMaster __pyx_string_tab[995]
#define __pyx_n_u_setVarToStairlinking __pyx_string_tab[996]
#define __pyx_n_u_set_name __pyx_string_tab[997]
#define __pyx_n_u_setdefault __pyx_string_tab[998]
#define __pyx_n_u_setstate __pyx_string_tab[999]
#define __pyx_n_u_setstate_cython __pyx_string_tab[1000]
#define __pyx_n_u_setting __pyx_string_tab[1001]
#define __pyx_n_u_shortname __pyx_string_tab[1002]
#define __pyx_n_u_shouldCompletedByConsToMaster __pyx_string_tab[1003]
#define __pyx_n_u_showVisualization __pyx_string_tab[1004]
#define __pyx_n_u_skip __pyx_string_tab[1005]
#define __pyx_n_u_solve __pyx_string_tab[1006]
#define __pyx_n_u_solveHeuristic __pyx_string_tab[1007]
#define __pyx_n_u_solvername __pyx_string_tab[1008]
#define __pyx_n_u_sort __pyx_string_tab[1009]
#define __pyx_n_u_sortFinishedForScore __pyx_string_tab[1010]
#define __pyx_n_u_sourceModel __pyx_string_tab[1011]
#define __pyx_n_u_state __pyx_string_tab[1012]
#define __pyx_n_u_status __pyx_string_tab[1013]
#define __pyx_n_u_str_conversion __pyx_string_tab[1014]
#define __pyx_n_u_super __pyx_string_tab[1015]
#define __pyx_n_u_svg __pyx_string_tab[1016]
#define __pyx_n_u_tempfile __pyx_string_tab[1017]
#define __pyx_n_u_test __pyx_string_tab[1018]
#define __pyx_n_u_translatePartialdecs __pyx_string_tab[1019]
#define __pyx_n_u_translateSymmetry __pyx_string_tab[1020]
#define __pyx_n_u_translatingtime __pyx_string_tab[1021]
#define __pyx_n_u_typing __pyx_string_tab[1022]
#define __pyx_n_u_update __pyx_string_tab[1023]
#define __pyx_n_u_updateSolver __pyx_string_tab[1024]
#define __pyx_n_u_use_setstate __pyx_string_tab[1025]
#define __pyx_n_u_usefulrecall __pyx_string_tab[1026]
#define __pyx_n_u_v __pyx_string_tab[1027]
#define __pyx_n_u_vals __pyx_string_tab[1028]
#define __pyx_n_u_value __pyx_string_tab[1029]
#define __pyx_n_u_values __pyx_string_tab[1030]
#define __pyx_n_u_var __pyx_string_tab[1031]
#define __pyx_n_u_varIndex __pyx_string_tab[1032]
#define __pyx_n_u_varbndschanged __pyx_string_tab[1033]
#define __pyx_n_u_varclasseslinking __pyx_string_tab[1034]
#define __pyx_n_u_varclassesmaster __pyx_string_tab[1035]
#define __pyx_n_u_varclassifier __pyx_string_tab[1036]
#define __pyx_n_u_varclassifier_name __pyx_string_tab[1037]
#define __pyx_n_u_varclassifiername __pyx_string_tab[1038]
#define __pyx_n_u_varclassifiers __pyx_string_tab[1039]
#define __pyx_n_u_variables __pyx_string_tab[1040]
#define __pyx_n_u_varid __pyx_string_tab[1041]
#define __pyx_n_u_varobjschanged __pyx_string_tab[1042]
#define __pyx_n_u_varpartitioncollection __pyx_string_tab[1043]
#define __pyx_n_u_varpartitioncollection_element __pyx_string_tab[1044]
#define __pyx_n_u_varpartitioncollection_ptr __pyx_string_tab[1045]
#define __pyx_n_u_varpatitionptr __pyx_string_tab[1046]
#define __pyx_n_u_vars __pyx_string_tab[1047]
#define __pyx_n_u_vis __pyx_string_tab[1048]
#define __pyx_n_u_weakref __pyx_string_tab[1049]
#define __pyx_n_u_with_suffix __pyx_string_tab[1050]
#define __pyx_n_u_workonpartialdec __pyx_string_tab[1051]
#define __pyx_n_u_writeAllDecomps __pyx_string_tab[1052]
#define __pyx_kp_b_iso88591_0_q __pyx_string_tab[1053]
#define __pyx_kp_b_iso88591_1F __pyx_string_tab[1054]
#define __pyx_kp_b_iso88591_1F_2 __pyx_string_tab[1055]
#define __pyx_kp_b_iso88591_1_HM __pyx_string_tab[1056]
#define __pyx_kp_b_iso88591_1_M_BRRS __pyx_string_tab[1057]
#define __pyx_kp_b_iso88591_2_6 __pyx_string_tab[1058]
#define __pyx_kp_b_iso88591_6 __pyx_string_tab[1059]
#define __pyx_kp_b_iso88591_A __pyx_string_tab[1060]
#define __pyx_kp_b_iso88591_AV1 __pyx_string_tab[1061]
#define __pyx_kp_b_iso88591_A_1A_N_A_A __pyx_string_tab[1062]
#define __pyx_kp_b_iso88591_A_1A_t __pyx_string_tab[1063]
#define __pyx_kp_b_iso88591_A_1A_t_2_1 __pyx_string_tab[1064]
#define __pyx_kp_b_iso88591_A_1A_t_4A_7_1 __pyx_string_tab[1065]
#define __pyx_kp_b_iso88591_A_1_HL __pyx_string_tab[1066]
#define __pyx_kp_b_iso88591_A_1_HN_1 __pyx_string_tab[1067]
#define __pyx_kp_b_iso88591_A_1_H_Qa __pyx_string_tab[1068]
#define __pyx_kp_b_iso88591_A_1_hnAQ_q __pyx_string_tab[1069]
#define __pyx_kp_b_iso88591_A_1_q_ZZ_z_H_q __pyx_string_tab[1070]
#define __pyx_kp_b_iso88591_A_2_4q_WAQ __pyx_string_tab[1071]
#define __pyx_kp_b_iso88591_A_2_Jd_b_a_y_q_AT_U_q __pyx_string_tab[1072]
#define __pyx_kp_b_iso88591_A_2_q_a_1_B_Qa_t8_AUUffg __pyx_string_tab[1073]
#define __pyx_kp_b_iso88591_A_3_H_AQ __pyx_string_tab[1074]
#define __pyx_kp_b_iso88591_A_4A_H_1 __pyx_string_tab[1075]
#define __pyx_kp_b_iso88591_A_4x_1_q __pyx_string_tab[1076]
#define __pyx_kp_b_iso88591_A_4x_7q_q __pyx_string_tab[1077]
#define __pyx_kp_b_iso88591_A_4x_8_q __pyx_string_tab[1078]
#define __pyx_kp_b_iso88591_A_4x_9_q __pyx_string_tab[1079]
#define __pyx_kp_b_iso88591_A_4x_A_q __pyx_string_tab[1080]
#define __pyx_kp_b_iso88591_A_4x_A_q_2 __pyx_string_tab[1081]
#define __pyx_kp_b_iso88591_A_4x_DA_q __pyx_string_tab[1082]
#define __pyx_kp_b_iso88591_A_4x_MQ_q __pyx_string_tab[1083]
#define __pyx_kp_b_iso88591_A_4x_Q_q __pyx_string_tab[1084]
#define __pyx_kp_b_iso88591_A_4x_a __pyx_string_tab[1085]
#define __pyx_kp_b_iso88591_A_4x_a_q __pyx_string_tab[1086]
#define __pyx_kp_b_iso88591_A_4x_q __pyx_string_tab[1087]
#define __pyx_kp_b_iso88591_A_4xuA_q __pyx_string_tab[1088]
#define __pyx_kp_b_iso88591_A_4xz_q __pyx_string_tab[1089]
#define __pyx_kp_b_iso88591_A_4z_1_TT_aab_HA_a __pyx_string_tab[1090]
#define __pyx_kp_b_iso88591_A_4z_1_TT_aab_HA_vQ __pyx_string_tab[1091]
#define __pyx_kp_b_iso88591_A_4z_1_TT_aab_Q_HA_t_a_q __pyx_string_tab[1092]
#define __pyx_kp_b_iso88591_A_6_A_q_3at_Rt_a_U_3at_5Rt_a_IQ __pyx_string_tab[1093]
#define __pyx_kp_b_iso88591_A_6b_a_DPQ_y_q_4t5_Qa __pyx_string_tab[1094]
#define __pyx_kp_b_iso88591_A_7_AT __pyx_string_tab[1095]
#define __pyx_kp_b_iso88591_A_7_Cgghhllsst_q __pyx_string_tab[1096]
#define __pyx_kp_b_iso88591_A_81_H_aq __pyx_string_tab[1097]
#define __pyx_kp_b_iso88591_A_9A_H_AQ __pyx_string_tab[1098]
#define __pyx_kp_b_iso88591_A_9_a_q_A_q_G1IT_eSTTU __pyx_string_tab[1099]
#define __pyx_kp_b_iso88591_A_AXQd_q_HN_4q __pyx_string_tab[1100]
#define __pyx_kp_b_iso88591_A_AYat1 __pyx_string_tab[1101]
#define __pyx_kp_b_iso88591_A_A_H __pyx_string_tab[1102]
#define __pyx_kp_b_iso88591_A_A_HM __pyx_string_tab[1103]
#define __pyx_kp_b_iso88591_A_A_H_1 __pyx_string_tab[1104]
#define __pyx_kp_b_iso88591_A_A_H_AQ __pyx_string_tab[1105]
#define __pyx_kp_b_iso88591_A_A_H_Qa __pyx_string_tab[1106]
#define __pyx_kp_b_iso88591_A_A_H_aq __pyx_string_tab[1107]
#define __pyx_kp_b_iso88591_A_A_Q __pyx_string_tab[1108]
#define __pyx_kp_b_iso88591_A_A_Qd __pyx_string_tab[1109]
#define __pyx_kp_b_iso88591_A_A_a __pyx_string_tab[1110]
#define __pyx_kp_b_iso88591_A_A_q_G1 __pyx_string_tab[1111]
#define __pyx_kp_b_iso88591_A_D_0_gQha __pyx_string_tab[1112]
#define __pyx_kp_b_iso88591_A_D_1A_gQhd __pyx_string_tab[1113]
#define __pyx_kp_b_iso88591_A_D_8I_xwas_E __pyx_string_tab[1114]
#define __pyx_kp_b_iso88591_A_D_Q_q __pyx_string_tab[1115]
#define __pyx_kp_b_iso88591_A_G1F_a_vWE_Q_q_q_2_awk_PQ_2_aw __pyx_string_tab[1116]
#define __pyx_kp_b_iso88591_A_G1F_a_vWE_Q_q_q_34q_QR_34q __pyx_string_tab[1117]
#define __pyx_kp_b_iso88591_A_G1F_a_vWE_Q_q_q_5T_GST_5T_A __pyx_string_tab[1118]
#define __pyx_kp_b_iso88591_A_G1F_a_vWE_Q_q_q_T_G1_T_A __pyx_string_tab[1119]
#define __pyx_kp_b_iso88591_A_Gq_A_22TTUUYYZ_q_q_as_4uTYYZZ __pyx_string_tab[1120]
#define __pyx_kp_b_iso88591_A_Gq_A_q __pyx_string_tab[1121]
#define __pyx_kp_b_iso88591_A_H __pyx_string_tab[1122]
#define __pyx_kp_b_iso88591_A_H4I_y_q_4uA __pyx_string_tab[1123]
#define __pyx_kp_b_iso88591_A_HG1_q_AU_TU_gQ_a __pyx_string_tab[1124]
#define __pyx_kp_b_iso88591_A_HG1_q_q_XZWX_wa_0 __pyx_string_tab[1125]
#define __pyx_kp_b_iso88591_A_HHA __pyx_string_tab[1126]
#define __pyx_kp_b_iso88591_A_HIQ __pyx_string_tab[1127]
#define __pyx_kp_b_iso88591_A_HN_1 __pyx_string_tab[1128]
#define __pyx_kp_b_iso88591_A_HO1 __pyx_string_tab[1129]
#define __pyx_kp_b_iso88591_A_HO1D_A __pyx_string_tab[1130]
#define __pyx_kp_b_iso88591_A_HO1_2 __pyx_string_tab[1131]
#define __pyx_kp_b_iso88591_A_H_1 __pyx_string_tab[1132]
#define __pyx_kp_b_iso88591_A_H_1_2 __pyx_string_tab[1133]
#define __pyx_kp_b_iso88591_A_H_2 __pyx_string_tab[1134]
#define __pyx_kp_b_iso88591_A_H_3 __pyx_string_tab[1135]
#define __pyx_kp_b_iso88591_A_H_4 __pyx_string_tab[1136]
#define __pyx_kp_b_iso88591_A_H_5 __pyx_string_tab[1137]
#define __pyx_kp_b_iso88591_A_H_6a __pyx_string_tab[1138]
#define __pyx_kp_b_iso88591_A_H_A __pyx_string_tab[1139]
#define __pyx_kp_b_iso88591_A_H_AT __pyx_string_tab[1140]
#define __pyx_kp_b_iso88591_A_H_A_2 __pyx_string_tab[1141]
#define __pyx_kp_b_iso88591_A_H_A_3 __pyx_string_tab[1142]
#define __pyx_kp_b_iso88591_A_H_A_4 __pyx_string_tab[1143]
#define __pyx_kp_b_iso88591_A_H_Q __pyx_string_tab[1144]
#define __pyx_kp_b_iso88591_A_H_Q_2 __pyx_string_tab[1145]
#define __pyx_kp_b_iso88591_A_H_Qa __pyx_string_tab[1146]
#define __pyx_kp_b_iso88591_A_H_a __pyx_string_tab[1147]
#define __pyx_kp_b_iso88591_A_H_a_2 __pyx_string_tab[1148]
#define __pyx_kp_b_iso88591_A_H_a_3 __pyx_string_tab[1149]
#define __pyx_kp_b_iso88591_A_H_aq __pyx_string_tab[1150]
#define __pyx_kp_b_iso88591_A_H_aq_2 __pyx_string_tab[1151]
#define __pyx_kp_b_iso88591_A_H_q __pyx_string_tab[1152]
#define __pyx_kp_b_iso88591_A_H_q_1 __pyx_string_tab[1153]
#define __pyx_kp_b_iso88591_A_H_q_2 __pyx_string_tab[1154]
#define __pyx_kp_b_iso88591_A_IQ_1_0_H_a_G_Vmmn __pyx_string_tab[1155]
#define __pyx_kp_b_iso88591_A_IQ_1_H_q0H_WX __pyx_string_tab[1156]
#define __pyx_kp_b_iso88591_A_IQ_H_Qa __pyx_string_tab[1157]
#define __pyx_kp_b_iso88591_A_I_a_44WWXX_q_G1ITQVV __pyx_string_tab[1158]
#define __pyx_kp_b_iso88591_A_I_a_q __pyx_string_tab[1159]
#define __pyx_kp_b_iso88591_A_K1DPQ __pyx_string_tab[1160]
#define __pyx_kp_b_iso88591_A_L_q_M __pyx_string_tab[1161]
#define __pyx_kp_b_iso88591_A_L_q_t_0 __pyx_string_tab[1162]
#define __pyx_kp_b_iso88591_A_L_q_t_2_q __pyx_string_tab[1163]
#define __pyx_kp_b_iso88591_A_L_q_t_aq __pyx_string_tab[1164]
#define __pyx_kp_b_iso88591_A_M_A __pyx_string_tab[1165]
#define __pyx_kp_b_iso88591_A_M_a_at1_q_q_as_4uE __pyx_string_tab[1166]
#define __pyx_kp_b_iso88591_A_N_1_H __pyx_string_tab[1167]
#define __pyx_kp_b_iso88591_A_N_Ql __pyx_string_tab[1168]
#define __pyx_kp_b_iso88591_A_PPQQUUV __pyx_string_tab[1169]
#define __pyx_kp_b_iso88591_A_Q_6_q_Rq_31D_q_wa_SSTTXX__eeff __pyx_string_tab[1170]
#define __pyx_kp_b_iso88591_A_Q_H __pyx_string_tab[1171]
#define __pyx_kp_b_iso88591_A_Q_Q_h_a_q __pyx_string_tab[1172]
#define __pyx_kp_b_iso88591_A_Q_hm1Kq_q __pyx_string_tab[1173]
#define __pyx_kp_b_iso88591_A_Q_hoQ_H_as_VW __pyx_string_tab[1174]
#define __pyx_kp_b_iso88591_A_Qa __pyx_string_tab[1175]
#define __pyx_kp_b_iso88591_A_Qd_EQd_q_9AS_q_U_qPQ __pyx_string_tab[1176]
#define __pyx_kp_b_iso88591_A_T_1A_q __pyx_string_tab[1177]
#define __pyx_kp_b_iso88591_A_T_1B_1_wax_G6 __pyx_string_tab[1178]
#define __pyx_kp_b_iso88591_A_T_1Fa_q __pyx_string_tab[1179]
#define __pyx_kp_b_iso88591_A_T_1Gq_7_1 __pyx_string_tab[1180]
#define __pyx_kp_b_iso88591_A_T_1Gq_q __pyx_string_tab[1181]
#define __pyx_kp_b_iso88591_A_T_1I_q __pyx_string_tab[1182]
#define __pyx_kp_b_iso88591_A_T_1J_q __pyx_string_tab[1183]
#define __pyx_kp_b_iso88591_A_T_1K1_q __pyx_string_tab[1184]
#define __pyx_kp_b_iso88591_A_T_9LA_G1Ct5 __pyx_string_tab[1185]
#define __pyx_kp_b_iso88591_A_T_9PPQ_G1Ct5 __pyx_string_tab[1186]
#define __pyx_kp_b_iso88591_A_T_AQ_q __pyx_string_tab[1187]
#define __pyx_kp_b_iso88591_A_T_Qa_q __pyx_string_tab[1188]
#define __pyx_kp_b_iso88591_A_T_Qa_waxt1 __pyx_string_tab[1189]
#define __pyx_kp_b_iso88591_A_T_aq_q __pyx_string_tab[1190]
#define __pyx_kp_b_iso88591_A_T_q __pyx_string_tab[1191]
#define __pyx_kp_b_iso88591_A_T_q_2 __pyx_string_tab[1192]
#define __pyx_kp_b_iso88591_A_T_xwas_E __pyx_string_tab[1193]
#define __pyx_kp_b_iso88591_A_X5EQ_y_q_4uA __pyx_string_tab[1194]
#define __pyx_kp_b_iso88591_A_X5Fa_T_a __pyx_string_tab[1195]
#define __pyx_kp_b_iso88591_A_XXQa __pyx_string_tab[1196]
#define __pyx_kp_b_iso88591_A_Yc_A_6at7_a_7_1 __pyx_string_tab[1197]
#define __pyx_kp_b_iso88591_A_Zq_H_5Qa __pyx_string_tab[1198]
#define __pyx_kp_b_iso88591_A_Zq_H_AQ __pyx_string_tab[1199]
#define __pyx_kp_b_iso88591_A_Zq_t8_1A __pyx_string_tab[1200]
#define __pyx_kp_b_iso88591_A_Zq_t8_31A __pyx_string_tab[1201]
#define __pyx_kp_b_iso88591_A_Zq_t8_q __pyx_string_tab[1202]
#define __pyx_kp_b_iso88591_A_a_99WWX_j_H_a __pyx_string_tab[1203]
#define __pyx_kp_b_iso88591_A_a_H __pyx_string_tab[1204]
#define __pyx_kp_b_iso88591_A_a_H_aq __pyx_string_tab[1205]
#define __pyx_kp_b_iso88591_A_a_H_aq_2 __pyx_string_tab[1206]
#define __pyx_kp_b_iso88591_A_a_H_q __pyx_string_tab[1207]
#define __pyx_kp_b_iso88591_A_a_H_q_2 __pyx_string_tab[1208]
#define __pyx_kp_b_iso88591_A_a_h_B_1_q __pyx_string_tab[1209]
#define __pyx_kp_b_iso88591_A_at1 __pyx_string_tab[1210]
#define __pyx_kp_b_iso88591_A_d_y_q_vQgT_a __pyx_string_tab[1211]
#define __pyx_kp_b_iso88591_A_h6H_hoQ_q_7_T_V_aajjk __pyx_string_tab[1212]
#define __pyx_kp_b_iso88591_A_h_1A_q __pyx_string_tab[1213]
#define __pyx_kp_b_iso88591_A_h_6a_q __pyx_string_tab[1214]
#define __pyx_kp_b_iso88591_A_h_7q_q __pyx_string_tab[1215]
#define __pyx_kp_b_iso88591_A_h_8_q __pyx_string_tab[1216]
#define __pyx_kp_b_iso88591_A_h_8_q_2 __pyx_string_tab[1217]
#define __pyx_kp_b_iso88591_A_h_9_q __pyx_string_tab[1218]
#define __pyx_kp_b_iso88591_A_h_9_y_q_H_Qd_EQVVWWX __pyx_string_tab[1219]
#define __pyx_kp_b_iso88591_A_h_B_q __pyx_string_tab[1220]
#define __pyx_kp_b_iso88591_A_h_Q_q __pyx_string_tab[1221]
#define __pyx_kp_b_iso88591_A_h_a_q __pyx_string_tab[1222]
#define __pyx_kp_b_iso88591_A_h_aq_hoQ_y_q_WA_LPQ __pyx_string_tab[1223]
#define __pyx_kp_b_iso88591_A_h_q __pyx_string_tab[1224]
#define __pyx_kp_b_iso88591_A_h_q_2 __pyx_string_tab[1225]
#define __pyx_kp_b_iso88591_A_h_q_3 __pyx_string_tab[1226]
#define __pyx_kp_b_iso88591_A_h_q_hoQ_xq_D_UV __pyx_string_tab[1227]
#define __pyx_kp_b_iso88591_A_hfA_q __pyx_string_tab[1228]
#define __pyx_kp_b_iso88591_A_hiq_q __pyx_string_tab[1229]
#define __pyx_kp_b_iso88591_A_hj_q __pyx_string_tab[1230]
#define __pyx_kp_b_iso88591_A_hk_q __pyx_string_tab[1231]
#define __pyx_kp_b_iso88591_A_hl_hoQ_y_q_WA_LPQ __pyx_string_tab[1232]
#define __pyx_kp_b_iso88591_A_hm1_hoQ_xq_D_UV __pyx_string_tab[1233]
#define __pyx_kp_b_iso88591_A_hm1_q __pyx_string_tab[1234]
#define __pyx_kp_b_iso88591_A_hnAQ_q __pyx_string_tab[1235]
#define __pyx_kp_b_iso88591_A_hnA_hoQ_y_q_WA_LPQ __pyx_string_tab[1236]
#define __pyx_kp_b_iso88591_A_hnA_q __pyx_string_tab[1237]
#define __pyx_kp_b_iso88591_A_hoQ_4x_7q__TUUXXY_q __pyx_string_tab[1238]
#define __pyx_kp_b_iso88591_A_hoQ_4x_8_FVVWW_q __pyx_string_tab[1239]
#define __pyx_kp_b_iso88591_A_hoQ_4x_A_QRRUUV_q __pyx_string_tab[1240]
#define __pyx_kp_b_iso88591_A_hoQ_4x_A_YZZ_iij_q __pyx_string_tab[1241]
#define __pyx_kp_b_iso88591_A_hoQ_4x_A_YZZ_q __pyx_string_tab[1242]
#define __pyx_kp_b_iso88591_A_hoQ_4x_C1MQ_aaddppq_q __pyx_string_tab[1243]
#define __pyx_kp_b_iso88591_A_hoQ_4x_a_DTTUUYYZ_q __pyx_string_tab[1244]
#define __pyx_kp_b_iso88591_A_hoQ_4x_a_OSTTWWX_q __pyx_string_tab[1245]
#define __pyx_kp_b_iso88591_A_hoQ_HN_q_1 __pyx_string_tab[1246]
#define __pyx_kp_b_iso88591_A_hoQ_HN_q_q __pyx_string_tab[1247]
#define __pyx_kp_b_iso88591_A_hoQ_HO1M1A_a __pyx_string_tab[1248]
#define __pyx_kp_b_iso88591_A_hoQ_HO1M_A __pyx_string_tab[1249]
#define __pyx_kp_b_iso88591_A_hoQ_H_A_2B_4q __pyx_string_tab[1250]
#define __pyx_kp_b_iso88591_A_hoQ_H_A_Q __pyx_string_tab[1251]
#define __pyx_kp_b_iso88591_A_hoQ_H_Qm3C1D __pyx_string_tab[1252]
#define __pyx_kp_b_iso88591_A_hoQ_H_as_Veef __pyx_string_tab[1253]
#define __pyx_kp_b_iso88591_A_hoQ_hoQ_xq_D_UV __pyx_string_tab[1254]
#define __pyx_kp_b_iso88591_A_hoQ_hoQ_y_q_WA_LPQ __pyx_string_tab[1255]
#define __pyx_kp_b_iso88591_A_hoQ_q __pyx_string_tab[1256]
#define __pyx_kp_b_iso88591_A_nAQ_nAQ_q_A_A_M_G_YgWF_1 __pyx_string_tab[1257]
#define __pyx_kp_b_iso88591_A_q __pyx_string_tab[1258]
#define __pyx_kp_b_iso88591_A_q_2 __pyx_string_tab[1259]
#define __pyx_kp_b_iso88591_A_q_2_4wj __pyx_string_tab[1260]
#define __pyx_kp_b_iso88591_A_q_A_1A_fAV2Q_fAV2Q_E_aq_6_9AS __pyx_string_tab[1261]
#define __pyx_kp_b_iso88591_A_q_A_A_AU_Q __pyx_string_tab[1262]
#define __pyx_kp_b_iso88591_A_q_G1_R_A __pyx_string_tab[1263]
#define __pyx_kp_b_iso88591_A_q_HKq __pyx_string_tab[1264]
#define __pyx_kp_b_iso88591_A_q_H_AQ __pyx_string_tab[1265]
#define __pyx_kp_b_iso88591_A_q_M_Ql __pyx_string_tab[1266]
#define __pyx_kp_b_iso88591_A_q_M_a_1 __pyx_string_tab[1267]
#define __pyx_kp_b_iso88591_A_q_N_a_1 __pyx_string_tab[1268]
#define __pyx_kp_b_iso88591_A_q_N_q_A __pyx_string_tab[1269]
#define __pyx_kp_b_iso88591_A_q_q_t __pyx_string_tab[1270]
#define __pyx_kp_b_iso88591_A_q_q_t_881 __pyx_string_tab[1271]
#define __pyx_kp_b_iso88591_A_r_auKq_q __pyx_string_tab[1272]
#define __pyx_kp_b_iso88591_A_t __pyx_string_tab[1273]
#define __pyx_kp_b_iso88591_A_t1A __pyx_string_tab[1274]
#define __pyx_kp_b_iso88591_A_t8 __pyx_string_tab[1275]
#define __pyx_kp_b_iso88591_A_t87_5 __pyx_string_tab[1276]
#define __pyx_kp_b_iso88591_A_t89A __pyx_string_tab[1277]
#define __pyx_kp_b_iso88591_A_t89A_hoRwVZZhhiinno __pyx_string_tab[1278]
#define __pyx_kp_b_iso88591_A_t8_0 __pyx_string_tab[1279]
#define __pyx_kp_b_iso88591_A_t8_1 __pyx_string_tab[1280]
#define __pyx_kp_b_iso88591_A_t8_1A __pyx_string_tab[1281]
#define __pyx_kp_b_iso88591_A_t8_1A_2 __pyx_string_tab[1282]
#define __pyx_kp_b_iso88591_A_t8_1D __pyx_string_tab[1283]
#define __pyx_kp_b_iso88591_A_t8_1_2 __pyx_string_tab[1284]
#define __pyx_kp_b_iso88591_A_t8_1_3 __pyx_string_tab[1285]
#define __pyx_kp_b_iso88591_A_t8_1_4 __pyx_string_tab[1286]
#define __pyx_kp_b_iso88591_A_t8_1_5 __pyx_string_tab[1287]
#define __pyx_kp_b_iso88591_A_t8_2 __pyx_string_tab[1288]
#define __pyx_kp_b_iso88591_A_t8_3 __pyx_string_tab[1289]
#define __pyx_kp_b_iso88591_A_t8_31 __pyx_string_tab[1290]
#define __pyx_kp_b_iso88591_A_t8_3a __pyx_string_tab[1291]
#define __pyx_kp_b_iso88591_A_t8_AQ __pyx_string_tab[1292]
#define __pyx_kp_b_iso88591_A_t8_Q __pyx_string_tab[1293]
#define __pyx_kp_b_iso88591_A_t8_Q_2 __pyx_string_tab[1294]
#define __pyx_kp_b_iso88591_A_t8_a __pyx_string_tab[1295]
#define __pyx_kp_b_iso88591_A_t8_q __pyx_string_tab[1296]
#define __pyx_kp_b_iso88591_A_t8_q_2 __pyx_string_tab[1297]
#define __pyx_kp_b_iso88591_A_t_1 __pyx_string_tab[1298]
#define __pyx_kp_b_iso88591_A_t_2 __pyx_string_tab[1299]
#define __pyx_kp_b_iso88591_A_t_2_2 __pyx_string_tab[1300]
#define __pyx_kp_b_iso88591_A_t_31 __pyx_string_tab[1301]
#define __pyx_kp_b_iso88591_A_t_31A __pyx_string_tab[1302]
#define __pyx_kp_b_iso88591_A_t_4A __pyx_string_tab[1303]
#define __pyx_kp_b_iso88591_A_t_4AQ __pyx_string_tab[1304]
#define __pyx_kp_b_iso88591_A_t_4A_q __pyx_string_tab[1305]
#define __pyx_kp_b_iso88591_A_t_5Qk __pyx_string_tab[1306]
#define __pyx_kp_b_iso88591_A_t_7_1 __pyx_string_tab[1307]
#define __pyx_kp_b_iso88591_A_t_A __pyx_string_tab[1308]
#define __pyx_kp_b_iso88591_A_t_AQ __pyx_string_tab[1309]
#define __pyx_kp_b_iso88591_A_t_Q __pyx_string_tab[1310]
#define __pyx_kp_b_iso88591_A_t_Qk __pyx_string_tab[1311]
#define __pyx_kp_b_iso88591_A_t_a __pyx_string_tab[1312]
#define __pyx_kp_b_iso88591_A_t_auIXQ __pyx_string_tab[1313]
#define __pyx_kp_b_iso88591_A_t_q_1A_E_1A_t_QgQ_7_Qa_q __pyx_string_tab[1314]
#define __pyx_kp_b_iso88591_A_t_q_m1 __pyx_string_tab[1315]
#define __pyx_kp_b_iso88591_A_wat87_1 __pyx_string_tab[1316]
#define __pyx_kp_b_iso88591_DA_M_C7_K __pyx_string_tab[1317]
#define __pyx_kp_b_iso88591_EQ_M_MWTUUjjk __pyx_string_tab[1318]
#define __pyx_kp_b_iso88591_Fa_q_Q_C1 __pyx_string_tab[1319]
#define __pyx_kp_b_iso88591_HH_r_s_I_I_J_1_6_6_nAQ_nAQ_A_q __pyx_string_tab[1320]
#define __pyx_kp_b_iso88591_I_M_H_qP_a __pyx_string_tab[1321]
#define __pyx_kp_b_iso88591_K1_M_9_AWWX __pyx_string_tab[1322]
#define __pyx_kp_b_iso88591_Oq_M_8_q_VVW __pyx_string_tab[1323]
#define __pyx_kp_b_iso88591_Q __pyx_string_tab[1324]
#define __pyx_kp_b_iso88591_T_A_G1F_a_vWE_Q_q_q_Qg_q_Qg __pyx_string_tab[1325]
#define __pyx_kp_b_iso88591_T_Q_G1F_a_vWE_Q_q_q_d_7_WA_d_7 __pyx_string_tab[1326]
#define __pyx_kp_b_iso88591_T_Q_G1F_a_vWE_Q_q_q_d_7_WA_d_7_2 __pyx_string_tab[1327]
#define __pyx_kp_b_iso88591_T_Q_G1F_a_vWE_Q_q_q_t1G_gQ_t1G __pyx_string_tab[1328]
#define __pyx_kp_b_iso88591_avQ __pyx_string_tab[1329]
#define __pyx_kp_b_iso88591_bbmmn_nAQ_q_A_A_HJa_0EQ_YgWF_1 __pyx_string_tab[1330]
#define __pyx_kp_b_iso88591_eef_1_31_44LA_1_T_9Na_ttu_G1Ct5 __pyx_string_tab[1331]
#define __pyx_kp_b_iso88591_ffqqr_Qa_q_A_Q_XZq_11Gq_iwgV1A __pyx_string_tab[1332]
#define __pyx_kp_b_iso88591_l_m_C_C_t_t_R_R_i_i_i_i_3ay_1_A __pyx_string_tab[1333]
#define __pyx_kp_b_iso88591_o_p_D_D_E_Qa_q_A_1_XZ7I_WX_QQff __pyx_string_tab[1334]
#define __pyx_kp_b_iso88591_q_0_kQR_5_7_q_a_1 __pyx_string_tab[1335]
#define __pyx_kp_b_iso88591_q_0_kQR_7_0_1B_PQ_1 __pyx_string_tab[1336]
#define __pyx_kp_b_iso88591_q_0_kQR_7_q0_a_1 __pyx_string_tab[1337]
#define __pyx_kp_b_iso88591_q_0_kQR_881A_7_nA_1 __pyx_string_tab[1338]
#define __pyx_kp_b_iso88591_q_0_kQR_HAQ_7_314H_VW_1 __pyx_string_tab[1339]
#define __pyx_kp_b_iso88591_q_0_kQR_XQa_7_4A5J_XY_1 __pyx_string_tab[1340]
#define __pyx_kp_b_iso88591_q_0_kQR_xq_7_6a7Nn_1 __pyx_string_tab[1341]
#define __pyx_kp_b_iso88591_q_0_kQR_xq_7_a_nA_1 __pyx_string_tab[1342]
#define __pyx_kp_b_iso88591_q_a __pyx_string_tab[1343]
#define __pyx_int_0 __pyx_number_tab[0]
#define __pyx_int_1 __pyx_number_tab[1]
#define __pyx_int_76513566 __pyx_number_tab[2]
#define __pyx_int_104261058 __pyx_number_tab[3]
#define __pyx_int_160002037 __pyx_number_tab[4]
#define __pyx_int_229442799 __pyx_number_tab[5]
#define __pyx_int_238750788 __pyx_number_tab[6]
/* #### Code section: module_state_clear ### */
#if CYTHON_USE_MODULE_STATE
static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) {
  __pyx_mstatetype *clear_module_state = __Pyx_PyModule_GetState(m);
  if (!clear_module_state) return 0;
  Py_CLEAR(clear_module_state->__pyx_d);
  Py_CLEAR(clear_module_state->__pyx_b);
  Py_CLEAR(clear_module_state->__pyx_cython_runtime);
  Py_CLEAR(clear_module_state->__pyx_empty_tuple);
  Py_CLEAR(clear_module_state->__pyx_empty_bytes);
  Py_CLEAR(clear_module_state->__pyx_empty_unicode);
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  __Pyx_State_RemoveModule(NULL);
  #endif
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Expr);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Event);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Column);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_ColumnExact);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Row);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_RowExact);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_NLRow);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Solution);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_DomainChanges);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_BoundChange);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Node);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Variable);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Constraint);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_IIS);
  Py_CLEAR(clear_module_state->__pyx_ptype_9pyscipopt_4scip_Model);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4bool_bool);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_7complex_complex);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_DetProbData);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_DetProbData);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_ConsPart);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_ConsPart);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_VarPart);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_VarPart);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_GCGColumn);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_GCGColumn);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_Detector);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_Detector);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_PricingSolver);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_PricingSolver);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_Score);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_Score);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_PartialDecomposition);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_ConsClassifier);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_VarClassifier);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_VarClassifier);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_PY_USERGIVEN);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_Model);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_Model);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_GCGPricingModel);
  Py_CLEAR(clear_module_state->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel);
  Py_CLEAR(clear_module_state->__pyx_type_8pygcgopt_3gcg_GCGMasterModel);
  Py_CLEAR(clear_module_state->__pyx_k__4);
  Py_CLEAR(clear_module_state->__pyx_k__5);
  for (int i=0; i<11; ++i) { Py_CLEAR(clear_module_state->__pyx_tuple[i]); }
  for (int i=0; i<362; ++i) { Py_CLEAR(clear_module_state->__pyx_codeobj_tab[i]); }
  for (int i=0; i<1344; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
  for (int i=0; i<7; ++i) { Py_CLEAR(clear_module_state->__pyx_number_tab[i]); }
/* #### Code section: module_state_clear_contents ### */
/* CommonTypesMetaclass.module_state_clear */
Py_CLEAR(clear_module_state->__pyx_CommonTypesMetaclassType);

/* CythonFunctionShared.module_state_clear */
Py_CLEAR(clear_module_state->__pyx_CyFunctionType);

/* #### Code section: module_state_clear_end ### */
return 0;
}
#endif
/* #### Code section: module_state_traverse ### */
#if CYTHON_USE_MODULE_STATE
static CYTHON_SMALL_CODE int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
  __pyx_mstatetype *traverse_module_state = __Pyx_PyModule_GetState(m);
  if (!traverse_module_state) return 0;
  Py_VISIT(traverse_module_state->__pyx_d);
  Py_VISIT(traverse_module_state->__pyx_b);
  Py_VISIT(traverse_module_state->__pyx_cython_runtime);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_tuple);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_bytes);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_unicode);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Expr);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Event);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Column);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_ColumnExact);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Row);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_RowExact);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_NLRow);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Solution);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_DomainChanges);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_BoundChange);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Node);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Variable);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Constraint);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_IIS);
  Py_VISIT(traverse_module_state->__pyx_ptype_9pyscipopt_4scip_Model);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4bool_bool);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_7complex_complex);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_DetProbData);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_DetProbData);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_ConsPart);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_ConsPart);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_VarPart);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_VarPart);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_GCGColumn);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_GCGColumn);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_Detector);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_Detector);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_PricingSolver);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_PricingSolver);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_Score);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_Score);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_PartialDecomposition);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_ConsClassifier);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_VarClassifier);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_VarClassifier);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_PY_USERGIVEN);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_Model);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_Model);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_GCGPricingModel);
  Py_VISIT(traverse_module_state->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel);
  Py_VISIT(traverse_module_state->__pyx_type_8pygcgopt_3gcg_GCGMasterModel);
  Py_VISIT(traverse_module_state->__pyx_k__4);
  Py_VISIT(traverse_module_state->__pyx_k__5);
  for (int i=0; i<11; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_tuple[i]); }
  for (int i=0; i<362; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_codeobj_tab[i]); }
  for (int i=0; i<1344; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
  for (int i=0; i<7; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_number_tab[i]); }
/* #### Code section: module_state_traverse_contents ### */
/* CommonTypesMetaclass.module_state_traverse */
Py_VISIT(traverse_module_state->__pyx_CommonTypesMetaclassType);

/* CythonFunctionShared.module_state_traverse */
Py_VISIT(traverse_module_state->__pyx_CyFunctionType);

/* #### Code section: module_state_traverse_end ### */
return 0;
}
#endif
/* #### Code section: module_code ### */

/* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_int")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_int(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

static PyObject *__pyx_convert_vector_to_py_int(std::vector<int>  const &__pyx_v_v) {
  Py_ssize_t __pyx_v_v_size_signed;
  PyObject *__pyx_v_o = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_to_py_int", 0);

  /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_int")
 * cdef object __pyx_convert_vector_to_py_int(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  __pyx_t_1 = (__pyx_v_v.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "vector.to_py":82
 * cdef object __pyx_convert_vector_to_py_int(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(2, 82, __pyx_L1_error)

    /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_int")
 * cdef object __pyx_convert_vector_to_py_int(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  }

  /* "vector.to_py":83
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()             # <<<<<<<<<<<<<<
 * 
 *     o = PyList_New(v_size_signed)
*/
  __pyx_v_v_size_signed = ((Py_ssize_t)__pyx_v_v.size());

  /* "vector.to_py":85
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
 *     o = PyList_New(v_size_signed)             # <<<<<<<<<<<<<<
 * 
 *     cdef Py_ssize_t i
*/
  __pyx_t_2 = PyList_New(__pyx_v_v_size_signed); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_o = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "vector.to_py":90
 *     cdef object item
 * 
 *     for i in range(v_size_signed):             # <<<<<<<<<<<<<<
 *         item = v[i]
 *         Py_INCREF(item)
*/
  __pyx_t_3 = __pyx_v_v_size_signed;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "vector.to_py":91
 * 
 *     for i in range(v_size_signed):
 *         item = v[i]             # <<<<<<<<<<<<<<
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)
*/
    __pyx_t_2 = __Pyx_PyLong_From_int((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "vector.to_py":92
 *     for i in range(v_size_signed):
 *         item = v[i]
 *         Py_INCREF(item)             # <<<<<<<<<<<<<<
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
*/
    Py_INCREF(__pyx_v_item);

    /* "vector.to_py":93
 *         item = v[i]
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)             # <<<<<<<<<<<<<<
 * 
 *     return o
*/
    __pyx_t_6 = __Pyx_PyList_SET_ITEM(__pyx_v_o, __pyx_v_i, __pyx_v_item); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 93, __pyx_L1_error)
  }

  /* "vector.to_py":95
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
 *     return o             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_o);
  __pyx_r = __pyx_v_o;
  goto __pyx_L0;

  /* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_int")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_int(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("vector.to_py.__pyx_convert_vector_to_py_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___(std::vector<std::vector<int> >  const &__pyx_v_v) {
  Py_ssize_t __pyx_v_v_size_signed;
  PyObject *__pyx_v_o = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___", 0);

  /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___")
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  __pyx_t_1 = (__pyx_v_v.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "vector.to_py":82
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(2, 82, __pyx_L1_error)

    /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___")
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  }

  /* "vector.to_py":83
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()             # <<<<<<<<<<<<<<
 * 
 *     o = PyList_New(v_size_signed)
*/
  __pyx_v_v_size_signed = ((Py_ssize_t)__pyx_v_v.size());

  /* "vector.to_py":85
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
 *     o = PyList_New(v_size_signed)             # <<<<<<<<<<<<<<
 * 
 *     cdef Py_ssize_t i
*/
  __pyx_t_2 = PyList_New(__pyx_v_v_size_signed); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_o = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "vector.to_py":90
 *     cdef object item
 * 
 *     for i in range(v_size_signed):             # <<<<<<<<<<<<<<
 *         item = v[i]
 *         Py_INCREF(item)
*/
  __pyx_t_3 = __pyx_v_v_size_signed;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "vector.to_py":91
 * 
 *     for i in range(v_size_signed):
 *         item = v[i]             # <<<<<<<<<<<<<<
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)
*/
    __pyx_t_2 = __pyx_convert_vector_to_py_int((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "vector.to_py":92
 *     for i in range(v_size_signed):
 *         item = v[i]
 *         Py_INCREF(item)             # <<<<<<<<<<<<<<
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
*/
    Py_INCREF(__pyx_v_item);

    /* "vector.to_py":93
 *         item = v[i]
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)             # <<<<<<<<<<<<<<
 * 
 *     return o
*/
    __pyx_t_6 = __Pyx_PyList_SET_ITEM(__pyx_v_o, __pyx_v_i, __pyx_v_item); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 93, __pyx_L1_error)
  }

  /* "vector.to_py":95
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
 *     return o             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_o);
  __pyx_r = __pyx_v_o;
  goto __pyx_L0;

  /* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("vector.to_py.__pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_convert_vector_to_py_double(std::vector<double>  const &__pyx_v_v) {
  Py_ssize_t __pyx_v_v_size_signed;
  PyObject *__pyx_v_o = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_to_py_double", 0);

  /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_double")
 * cdef object __pyx_convert_vector_to_py_double(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  __pyx_t_1 = (__pyx_v_v.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "vector.to_py":82
 * cdef object __pyx_convert_vector_to_py_double(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(2, 82, __pyx_L1_error)

    /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_double")
 * cdef object __pyx_convert_vector_to_py_double(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  }

  /* "vector.to_py":83
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()             # <<<<<<<<<<<<<<
 * 
 *     o = PyList_New(v_size_signed)
*/
  __pyx_v_v_size_signed = ((Py_ssize_t)__pyx_v_v.size());

  /* "vector.to_py":85
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
 *     o = PyList_New(v_size_signed)             # <<<<<<<<<<<<<<
 * 
 *     cdef Py_ssize_t i
*/
  __pyx_t_2 = PyList_New(__pyx_v_v_size_signed); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_o = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "vector.to_py":90
 *     cdef object item
 * 
 *     for i in range(v_size_signed):             # <<<<<<<<<<<<<<
 *         item = v[i]
 *         Py_INCREF(item)
*/
  __pyx_t_3 = __pyx_v_v_size_signed;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "vector.to_py":91
 * 
 *     for i in range(v_size_signed):
 *         item = v[i]             # <<<<<<<<<<<<<<
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)
*/
    __pyx_t_2 = PyFloat_FromDouble((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "vector.to_py":92
 *     for i in range(v_size_signed):
 *         item = v[i]
 *         Py_INCREF(item)             # <<<<<<<<<<<<<<
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
*/
    Py_INCREF(__pyx_v_item);

    /* "vector.to_py":93
 *         item = v[i]
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)             # <<<<<<<<<<<<<<
 * 
 *     return o
*/
    __pyx_t_6 = __Pyx_PyList_SET_ITEM(__pyx_v_o, __pyx_v_i, __pyx_v_item); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 93, __pyx_L1_error)
  }

  /* "vector.to_py":95
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
 *     return o             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_o);
  __pyx_r = __pyx_v_o;
  goto __pyx_L0;

  /* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_double")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_double(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("vector.to_py.__pyx_convert_vector_to_py_double", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "string.to_py":31
 *     cdef object __Pyx_PyObject_FromStringAndSize(const char*, size_t)
 * 
 * @cname("__pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string")             # <<<<<<<<<<<<<<
 * cdef inline object __pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
*/

static CYTHON_INLINE PyObject *__pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string", 0);

  /* "string.to_py":33
 * @cname("__pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string")
 * cdef inline object __pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     return __Pyx_PyObject_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
  __pyx_t_1 = (__pyx_v_s.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "string.to_py":34
 * cdef inline object __pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     return __Pyx_PyObject_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
 * cdef extern from *:
*/
    PyErr_NoMemory(); __PYX_ERR(2, 34, __pyx_L1_error)

    /* "string.to_py":33
 * @cname("__pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string")
 * cdef inline object __pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     return __Pyx_PyObject_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
  }

  /* "string.to_py":35
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     return __Pyx_PyObject_FromStringAndSize(s.data(), <Py_ssize_t> s.size())             # <<<<<<<<<<<<<<
 * cdef extern from *:
 *     cdef object __Pyx_PyUnicode_FromStringAndSize(const char*, size_t)
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_FromStringAndSize(__pyx_v_s.data(), ((Py_ssize_t)__pyx_v_s.size())); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "string.to_py":31
 *     cdef object __Pyx_PyObject_FromStringAndSize(const char*, size_t)
 * 
 * @cname("__pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string")             # <<<<<<<<<<<<<<
 * cdef inline object __pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("string.to_py.__pyx_convert_PyObject_string_to_py_6libcpp_6string_std__in_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "string.to_py":39
 *     cdef object __Pyx_PyUnicode_FromStringAndSize(const char*, size_t)
 * 
 * @cname("__pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string")             # <<<<<<<<<<<<<<
 * cdef inline object __pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
*/

static CYTHON_INLINE PyObject *__pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string", 0);

  /* "string.to_py":41
 * @cname("__pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string")
 * cdef inline object __pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     return __Pyx_PyUnicode_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
  __pyx_t_1 = (__pyx_v_s.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "string.to_py":42
 * cdef inline object __pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     return __Pyx_PyUnicode_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
 * cdef extern from *:
*/
    PyErr_NoMemory(); __PYX_ERR(2, 42, __pyx_L1_error)

    /* "string.to_py":41
 * @cname("__pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string")
 * cdef inline object __pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     return __Pyx_PyUnicode_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
  }

  /* "string.to_py":43
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     return __Pyx_PyUnicode_FromStringAndSize(s.data(), <Py_ssize_t> s.size())             # <<<<<<<<<<<<<<
 * cdef extern from *:
 *     cdef object __Pyx_PyBytes_FromStringAndSize(const char*, size_t)
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyUnicode_FromStringAndSize(__pyx_v_s.data(), ((Py_ssize_t)__pyx_v_s.size())); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "string.to_py":39
 *     cdef object __Pyx_PyUnicode_FromStringAndSize(const char*, size_t)
 * 
 * @cname("__pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string")             # <<<<<<<<<<<<<<
 * cdef inline object __pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("string.to_py.__pyx_convert_PyUnicode_string_to_py_6libcpp_6string_std__in_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "string.to_py":47
 *     cdef object __Pyx_PyBytes_FromStringAndSize(const char*, size_t)
 * 
 * @cname("__pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string")             # <<<<<<<<<<<<<<
 * cdef inline object __pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
*/

static CYTHON_INLINE PyObject *__pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string", 0);

  /* "string.to_py":49
 * @cname("__pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string")
 * cdef inline object __pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     return __Pyx_PyBytes_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
  __pyx_t_1 = (__pyx_v_s.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "string.to_py":50
 * cdef inline object __pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     return __Pyx_PyBytes_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
 * cdef extern from *:
*/
    PyErr_NoMemory(); __PYX_ERR(2, 50, __pyx_L1_error)

    /* "string.to_py":49
 * @cname("__pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string")
 * cdef inline object __pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     return __Pyx_PyBytes_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
  }

  /* "string.to_py":51
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     return __Pyx_PyBytes_FromStringAndSize(s.data(), <Py_ssize_t> s.size())             # <<<<<<<<<<<<<<
 * cdef extern from *:
 *     cdef object __Pyx_PyByteArray_FromStringAndSize(const char*, size_t)
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_s.data(), ((Py_ssize_t)__pyx_v_s.size())); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "string.to_py":47
 *     cdef object __Pyx_PyBytes_FromStringAndSize(const char*, size_t)
 * 
 * @cname("__pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string")             # <<<<<<<<<<<<<<
 * cdef inline object __pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("string.to_py.__pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "string.to_py":55
 *     cdef object __Pyx_PyByteArray_FromStringAndSize(const char*, size_t)
 * 
 * @cname("__pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string")             # <<<<<<<<<<<<<<
 * cdef inline object __pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
*/

static CYTHON_INLINE PyObject *__pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string", 0);

  /* "string.to_py":57
 * @cname("__pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string")
 * cdef inline object __pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     return __Pyx_PyByteArray_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
  __pyx_t_1 = (__pyx_v_s.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "string.to_py":58
 * cdef inline object __pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     return __Pyx_PyByteArray_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
    PyErr_NoMemory(); __PYX_ERR(2, 58, __pyx_L1_error)

    /* "string.to_py":57
 * @cname("__pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string")
 * cdef inline object __pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     return __Pyx_PyByteArray_FromStringAndSize(s.data(), <Py_ssize_t> s.size())
*/
  }

  /* "string.to_py":59
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     return __Pyx_PyByteArray_FromStringAndSize(s.data(), <Py_ssize_t> s.size())             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyByteArray_FromStringAndSize(__pyx_v_s.data(), ((Py_ssize_t)__pyx_v_s.size())); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "string.to_py":55
 *     cdef object __Pyx_PyByteArray_FromStringAndSize(const char*, size_t)
 * 
 * @cname("__pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string")             # <<<<<<<<<<<<<<
 * cdef inline object __pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string(const string& s):
 *     if s.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("string.to_py.__pyx_convert_PyByteArray_string_to_py_6libcpp_6string_std__in_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_string")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_string(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

static PyObject *__pyx_convert_vector_to_py_std_3a__3a_string(std::vector<std::string>  const &__pyx_v_v) {
  Py_ssize_t __pyx_v_v_size_signed;
  PyObject *__pyx_v_o = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_to_py_std_3a__3a_string", 0);

  /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_string")
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_string(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  __pyx_t_1 = (__pyx_v_v.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "vector.to_py":82
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_string(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(2, 82, __pyx_L1_error)

    /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_string")
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_string(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  }

  /* "vector.to_py":83
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()             # <<<<<<<<<<<<<<
 * 
 *     o = PyList_New(v_size_signed)
*/
  __pyx_v_v_size_signed = ((Py_ssize_t)__pyx_v_v.size());

  /* "vector.to_py":85
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
 *     o = PyList_New(v_size_signed)             # <<<<<<<<<<<<<<
 * 
 *     cdef Py_ssize_t i
*/
  __pyx_t_2 = PyList_New(__pyx_v_v_size_signed); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_o = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "vector.to_py":90
 *     cdef object item
 * 
 *     for i in range(v_size_signed):             # <<<<<<<<<<<<<<
 *         item = v[i]
 *         Py_INCREF(item)
*/
  __pyx_t_3 = __pyx_v_v_size_signed;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "vector.to_py":91
 * 
 *     for i in range(v_size_signed):
 *         item = v[i]             # <<<<<<<<<<<<<<
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)
*/
    __pyx_t_2 = __pyx_convert_PyBytes_string_to_py_6libcpp_6string_std__in_string((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "vector.to_py":92
 *     for i in range(v_size_signed):
 *         item = v[i]
 *         Py_INCREF(item)             # <<<<<<<<<<<<<<
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
*/
    Py_INCREF(__pyx_v_item);

    /* "vector.to_py":93
 *         item = v[i]
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)             # <<<<<<<<<<<<<<
 * 
 *     return o
*/
    __pyx_t_6 = __Pyx_PyList_SET_ITEM(__pyx_v_o, __pyx_v_i, __pyx_v_item); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 93, __pyx_L1_error)
  }

  /* "vector.to_py":95
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
 *     return o             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_o);
  __pyx_r = __pyx_v_o;
  goto __pyx_L0;

  /* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_string")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_string(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("vector.to_py.__pyx_convert_vector_to_py_std_3a__3a_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pair.to_py":203
 *         U second
 * 
 * @cname("__pyx_convert_pair_to_py_int____int")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_pair_to_py_int____int(const pair[X,Y]& p):
 *     return p.first, p.second
*/

static PyObject *__pyx_convert_pair_to_py_int____int(std::pair<int,int>  const &__pyx_v_p) {
  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("__pyx_convert_pair_to_py_int____int", 0);

  /* "pair.to_py":205
 * @cname("__pyx_convert_pair_to_py_int____int")
 * cdef object __pyx_convert_pair_to_py_int____int(const pair[X,Y]& p):
 *     return p.first, p.second             # <<<<<<<<<<<<<<
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_p.first); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_p.second); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(2, 205, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(2, 205, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pair.to_py":203
 *         U second
 * 
 * @cname("__pyx_convert_pair_to_py_int____int")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_pair_to_py_int____int(const pair[X,Y]& p):
 *     return p.first, p.second
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pair.to_py.__pyx_convert_pair_to_py_int____int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

static PyObject *__pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___(std::vector<std::pair<int,int> >  const &__pyx_v_v) {
  Py_ssize_t __pyx_v_v_size_signed;
  PyObject *__pyx_v_o = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___", 0);

  /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___")
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  __pyx_t_1 = (__pyx_v_v.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "vector.to_py":82
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(2, 82, __pyx_L1_error)

    /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___")
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  }

  /* "vector.to_py":83
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()             # <<<<<<<<<<<<<<
 * 
 *     o = PyList_New(v_size_signed)
*/
  __pyx_v_v_size_signed = ((Py_ssize_t)__pyx_v_v.size());

  /* "vector.to_py":85
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
 *     o = PyList_New(v_size_signed)             # <<<<<<<<<<<<<<
 * 
 *     cdef Py_ssize_t i
*/
  __pyx_t_2 = PyList_New(__pyx_v_v_size_signed); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_o = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "vector.to_py":90
 *     cdef object item
 * 
 *     for i in range(v_size_signed):             # <<<<<<<<<<<<<<
 *         item = v[i]
 *         Py_INCREF(item)
*/
  __pyx_t_3 = __pyx_v_v_size_signed;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "vector.to_py":91
 * 
 *     for i in range(v_size_signed):
 *         item = v[i]             # <<<<<<<<<<<<<<
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)
*/
    __pyx_t_2 = __pyx_convert_pair_to_py_int____int((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "vector.to_py":92
 *     for i in range(v_size_signed):
 *         item = v[i]
 *         Py_INCREF(item)             # <<<<<<<<<<<<<<
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
*/
    Py_INCREF(__pyx_v_item);

    /* "vector.to_py":93
 *         item = v[i]
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)             # <<<<<<<<<<<<<<
 * 
 *     return o
*/
    __pyx_t_6 = __Pyx_PyList_SET_ITEM(__pyx_v_o, __pyx_v_i, __pyx_v_item); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 93, __pyx_L1_error)
  }

  /* "vector.to_py":95
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
 *     return o             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_o);
  __pyx_r = __pyx_v_o;
  goto __pyx_L0;

  /* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("vector.to_py.__pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pair.from_py":190
 *         pair(T&, U&) except +
 * 
 * @cname("__pyx_convert_pair_from_py_int__and_int")             # <<<<<<<<<<<<<<
 * cdef pair[X,Y] __pyx_convert_pair_from_py_int__and_int(object o) except *:
 *     x, y = o
*/

static std::pair<int,int>  __pyx_convert_pair_from_py_int__and_int(PyObject *__pyx_v_o) {
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_y = NULL;
  std::pair<int,int>  __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *(*__pyx_t_4)(PyObject *);
  int __pyx_t_5;
  int __pyx_t_6;
  std::pair<int,int>  __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_pair_from_py_int__and_int", 0);

  /* "pair.from_py":192
 * @cname("__pyx_convert_pair_from_py_int__and_int")
 * cdef pair[X,Y] __pyx_convert_pair_from_py_int__and_int(object o) except *:
 *     x, y = o             # <<<<<<<<<<<<<<
 *     return pair[X,Y](<X>x, <Y>y)
 * 
*/
  if ((likely(PyTuple_CheckExact(__pyx_v_o))) || (PyList_CheckExact(__pyx_v_o))) {
    PyObject* sequence = __pyx_v_o;
    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(2, 192, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
      __Pyx_INCREF(__pyx_t_2);
    } else {
      __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 192, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 192, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_2);
    }
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_v_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
    index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < (0)) __PYX_ERR(2, 192, __pyx_L1_error)
    __pyx_t_4 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(2, 192, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_x = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_y = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pair.from_py":193
 * cdef pair[X,Y] __pyx_convert_pair_from_py_int__and_int(object o) except *:
 *     x, y = o
 *     return pair[X,Y](<X>x, <Y>y)             # <<<<<<<<<<<<<<
 * 
*/
  __pyx_t_5 = __Pyx_PyLong_As_int(__pyx_v_x); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 193, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_y); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 193, __pyx_L1_error)
  try {
    __pyx_t_7 = std::pair<int,int> (((int)__pyx_t_5), ((int)__pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(2, 193, __pyx_L1_error)
  }
  __pyx_r = __pyx_t_7;
  goto __pyx_L0;

  /* "pair.from_py":190
 *         pair(T&, U&) except +
 * 
 * @cname("__pyx_convert_pair_from_py_int__and_int")             # <<<<<<<<<<<<<<
 * cdef pair[X,Y] __pyx_convert_pair_from_py_int__and_int(object o) except *:
 *     x, y = o
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pair.from_py.__pyx_convert_pair_from_py_int__and_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_SCIP_Real")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_SCIP_Real(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

static PyObject *__pyx_convert_vector_to_py_SCIP_Real(std::vector<SCIP_Real>  const &__pyx_v_v) {
  Py_ssize_t __pyx_v_v_size_signed;
  PyObject *__pyx_v_o = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_to_py_SCIP_Real", 0);

  /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_SCIP_Real")
 * cdef object __pyx_convert_vector_to_py_SCIP_Real(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  __pyx_t_1 = (__pyx_v_v.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "vector.to_py":82
 * cdef object __pyx_convert_vector_to_py_SCIP_Real(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(2, 82, __pyx_L1_error)

    /* "vector.to_py":81
 * @cname("__pyx_convert_vector_to_py_SCIP_Real")
 * cdef object __pyx_convert_vector_to_py_SCIP_Real(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()
*/
  }

  /* "vector.to_py":83
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 *     v_size_signed = <Py_ssize_t> v.size()             # <<<<<<<<<<<<<<
 * 
 *     o = PyList_New(v_size_signed)
*/
  __pyx_v_v_size_signed = ((Py_ssize_t)__pyx_v_v.size());

  /* "vector.to_py":85
 *     v_size_signed = <Py_ssize_t> v.size()
 * 
 *     o = PyList_New(v_size_signed)             # <<<<<<<<<<<<<<
 * 
 *     cdef Py_ssize_t i
*/
  __pyx_t_2 = PyList_New(__pyx_v_v_size_signed); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_o = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "vector.to_py":90
 *     cdef object item
 * 
 *     for i in range(v_size_signed):             # <<<<<<<<<<<<<<
 *         item = v[i]
 *         Py_INCREF(item)
*/
  __pyx_t_3 = __pyx_v_v_size_signed;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "vector.to_py":91
 * 
 *     for i in range(v_size_signed):
 *         item = v[i]             # <<<<<<<<<<<<<<
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)
*/
    __pyx_t_2 = PyFloat_FromDouble((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "vector.to_py":92
 *     for i in range(v_size_signed):
 *         item = v[i]
 *         Py_INCREF(item)             # <<<<<<<<<<<<<<
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
*/
    Py_INCREF(__pyx_v_item);

    /* "vector.to_py":93
 *         item = v[i]
 *         Py_INCREF(item)
 *         __Pyx_PyList_SET_ITEM(o, i, item)             # <<<<<<<<<<<<<<
 * 
 *     return o
*/
    __pyx_t_6 = __Pyx_PyList_SET_ITEM(__pyx_v_o, __pyx_v_i, __pyx_v_item); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 93, __pyx_L1_error)
  }

  /* "vector.to_py":95
 *         __Pyx_PyList_SET_ITEM(o, i, item)
 * 
 *     return o             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_o);
  __pyx_r = __pyx_v_o;
  goto __pyx_L0;

  /* "vector.to_py":79
 *     const Py_ssize_t PY_SSIZE_T_MAX
 * 
 * @cname("__pyx_convert_vector_to_py_SCIP_Real")             # <<<<<<<<<<<<<<
 * cdef object __pyx_convert_vector_to_py_SCIP_Real(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("vector.to_py.__pyx_convert_vector_to_py_SCIP_Real", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "vector.from_py":51
 *     cdef Py_ssize_t __Pyx_PyObject_LengthHint(object o, Py_ssize_t defaultval) except -1
 * 
 * @cname("__pyx_convert_vector_from_py_double")             # <<<<<<<<<<<<<<
 * cdef vector[X] __pyx_convert_vector_from_py_double(object o) except *:
 * 
*/

static std::vector<double>  __pyx_convert_vector_from_py_double(PyObject *__pyx_v_o) {
  std::vector<double>  __pyx_v_v;
  Py_ssize_t __pyx_v_s;
  PyObject *__pyx_v_item = NULL;
  std::vector<double>  __pyx_r;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  double __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_from_py_double", 0);

  /* "vector.from_py":55
 * 
 *     cdef vector[X] v
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)             # <<<<<<<<<<<<<<
 * 
 *     if s > 0:
*/
  __pyx_t_1 = __Pyx_PyObject_LengthHint(__pyx_v_o, 0); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1L))) __PYX_ERR(2, 55, __pyx_L1_error)
  __pyx_v_s = __pyx_t_1;

  /* "vector.from_py":57
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)
 * 
 *     if s > 0:             # <<<<<<<<<<<<<<
 *         v.reserve(<size_t> s)
 * 
*/
  __pyx_t_2 = (__pyx_v_s > 0);
  if (__pyx_t_2) {

    /* "vector.from_py":58
 * 
 *     if s > 0:
 *         v.reserve(<size_t> s)             # <<<<<<<<<<<<<<
 * 
 *     for item in o:
*/
    try {
      __pyx_v_v.reserve(((size_t)__pyx_v_s));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(2, 58, __pyx_L1_error)
    }

    /* "vector.from_py":57
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)
 * 
 *     if s > 0:             # <<<<<<<<<<<<<<
 *         v.reserve(<size_t> s)
 * 
*/
  }

  /* "vector.from_py":60
 *         v.reserve(<size_t> s)
 * 
 *     for item in o:             # <<<<<<<<<<<<<<
 *         v.push_back(<X>item)
 * 
*/
  if (likely(PyList_CheckExact(__pyx_v_o)) || PyTuple_CheckExact(__pyx_v_o)) {
    __pyx_t_3 = __pyx_v_o; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_1 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 60, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 60, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 60, __pyx_L1_error)
          #endif
          if (__pyx_t_1 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_1, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_1;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 60, __pyx_L1_error)
          #endif
          if (__pyx_t_1 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_1);
        #endif
        ++__pyx_t_1;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 60, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_3);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 60, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "vector.from_py":61
 * 
 *     for item in o:
 *         v.push_back(<X>item)             # <<<<<<<<<<<<<<
 * 
 *     return v
*/
    __pyx_t_6 = __Pyx_PyFloat_AsDouble(__pyx_v_item); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 61, __pyx_L1_error)
    try {
      __pyx_v_v.push_back(((double)__pyx_t_6));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(2, 61, __pyx_L1_error)
    }

    /* "vector.from_py":60
 *         v.reserve(<size_t> s)
 * 
 *     for item in o:             # <<<<<<<<<<<<<<
 *         v.push_back(<X>item)
 * 
*/
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "vector.from_py":63
 *         v.push_back(<X>item)
 * 
 *     return v             # <<<<<<<<<<<<<<
 * 
*/
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;

  /* "vector.from_py":51
 *     cdef Py_ssize_t __Pyx_PyObject_LengthHint(object o, Py_ssize_t defaultval) except -1
 * 
 * @cname("__pyx_convert_vector_from_py_double")             # <<<<<<<<<<<<<<
 * cdef vector[X] __pyx_convert_vector_from_py_double(object o) except *:
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("vector.from_py.__pyx_convert_vector_from_py_double", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static std::vector<int>  __pyx_convert_vector_from_py_int(PyObject *__pyx_v_o) {
  std::vector<int>  __pyx_v_v;
  Py_ssize_t __pyx_v_s;
  PyObject *__pyx_v_item = NULL;
  std::vector<int>  __pyx_r;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *(*__pyx_t_4)(PyObject *);
  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_convert_vector_from_py_int", 0);

  /* "vector.from_py":55
 * 
 *     cdef vector[X] v
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)             # <<<<<<<<<<<<<<
 * 
 *     if s > 0:
*/
  __pyx_t_1 = __Pyx_PyObject_LengthHint(__pyx_v_o, 0); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1L))) __PYX_ERR(2, 55, __pyx_L1_error)
  __pyx_v_s = __pyx_t_1;

  /* "vector.from_py":57
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)
 * 
 *     if s > 0:             # <<<<<<<<<<<<<<
 *         v.reserve(<size_t> s)
 * 
*/
  __pyx_t_2 = (__pyx_v_s > 0);
  if (__pyx_t_2) {

    /* "vector.from_py":58
 * 
 *     if s > 0:
 *         v.reserve(<size_t> s)             # <<<<<<<<<<<<<<
 * 
 *     for item in o:
*/
    try {
      __pyx_v_v.reserve(((size_t)__pyx_v_s));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(2, 58, __pyx_L1_error)
    }

    /* "vector.from_py":57
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)
 * 
 *     if s > 0:             # <<<<<<<<<<<<<<
 *         v.reserve(<size_t> s)
 * 
*/
  }

  /* "vector.from_py":60
 *         v.reserve(<size_t> s)
 * 
 *     for item in o:             # <<<<<<<<<<<<<<
 *         v.push_back(<X>item)
 * 
*/
  if (likely(PyList_CheckExact(__pyx_v_o)) || PyTuple_CheckExact(__pyx_v_o)) {
    __pyx_t_3 = __pyx_v_o; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_1 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 60, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 60, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 60, __pyx_L1_error)
          #endif
          if (__pyx_t_1 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_1, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_1;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 60, __pyx_L1_error)
          #endif
          if (__pyx_t_1 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_1);
        #endif
        ++__pyx_t_1;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 60, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_3);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 60, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "vector.from_py":61
 * 
 *     for item in o:
 *         v.push_back(<X>item)             # <<<<<<<<<<<<<<
 * 
 *     return v
*/
    __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_item); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 61, __pyx_L1_error)
    try {
      __pyx_v_v.push_back(((int)__pyx_t_6));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(2, 61, __pyx_L1_error)
    }

    /* "vector.from_py":60
 *         v.reserve(<size_t> s)
 * 
 *     for item in o:             # <<<<<<<<<<<<<<
 *         v.push_back(<X>item)
 * 
*/
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "vector.from_py":63
 *         v.push_back(<X>item)
 * 
 *     return v             # <<<<<<<<<<<<<<
 * 
*/
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;

  /* "vector.from_py":51
 *     cdef Py_ssize_t __Pyx_PyObject_LengthHint(object o, Py_ssize_t defaultval) except -1
 * 
 * @cname("__pyx_convert_vector_from_py_int")             # <<<<<<<<<<<<<<
 * cdef vector[X] __pyx_convert_vector_from_py_int(object o) except *:
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("vector.from_py.__pyx_convert_vector_from_py_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static std::vector<std::pair<int,int> >  __pyx_convert_vector_from_py_std_3a__3a_pair_3c_int_2c_int_3e___(PyObject *__pyx_v_o) {
  std::vector<std::pair<int,int> >  __pyx_v_v;
  Py_ssize_t __pyx_v_s;
  PyObject *__pyx_v_item = NULL;
  std::vector<std::pair<int,int> >  __pyx_r;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  std::pair<int,int>  __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_from_py_std_3a__3a_pair_3c_int_2c_int_3e___", 0);

  /* "vector.from_py":55
 * 
 *     cdef vector[X] v
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)             # <<<<<<<<<<<<<<
 * 
 *     if s > 0:
*/
  __pyx_t_1 = __Pyx_PyObject_LengthHint(__pyx_v_o, 0); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1L))) __PYX_ERR(2, 55, __pyx_L1_error)
  __pyx_v_s = __pyx_t_1;

  /* "vector.from_py":57
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)
 * 
 *     if s > 0:             # <<<<<<<<<<<<<<
 *         v.reserve(<size_t> s)
 * 
*/
  __pyx_t_2 = (__pyx_v_s > 0);
  if (__pyx_t_2) {

    /* "vector.from_py":58
 * 
 *     if s > 0:
 *         v.reserve(<size_t> s)             # <<<<<<<<<<<<<<
 * 
 *     for item in o:
*/
    try {
      __pyx_v_v.reserve(((size_t)__pyx_v_s));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(2, 58, __pyx_L1_error)
    }

    /* "vector.from_py":57
 *     cdef Py_ssize_t s = __Pyx_PyObject_LengthHint(o, 0)
 * 
 *     if s > 0:             # <<<<<<<<<<<<<<
 *         v.reserve(<size_t> s)
 * 
*/
  }

  /* "vector.from_py":60
 *         v.reserve(<size_t> s)
 * 
 *     for item in o:             # <<<<<<<<<<<<<<
 *         v.push_back(<X>item)
 * 
*/
  if (likely(PyList_CheckExact(__pyx_v_o)) || PyTuple_CheckExact(__pyx_v_o)) {
    __pyx_t_3 = __pyx_v_o; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_1 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 60, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 60, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 60, __pyx_L1_error)
          #endif
          if (__pyx_t_1 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_1, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_1;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 60, __pyx_L1_error)
          #endif
          if (__pyx_t_1 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_1);
        #endif
        ++__pyx_t_1;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 60, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_3);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 60, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "vector.from_py":61
 * 
 *     for item in o:
 *         v.push_back(<X>item)             # <<<<<<<<<<<<<<
 * 
 *     return v
*/
    __pyx_t_6 = __pyx_convert_pair_from_py_int__and_int(__pyx_v_item); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 61, __pyx_L1_error)
    try {
      __pyx_v_v.push_back(((std::pair<int,int> )__pyx_t_6));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(2, 61, __pyx_L1_error)
    }

    /* "vector.from_py":60
 *         v.reserve(<size_t> s)
 * 
 *     for item in o:             # <<<<<<<<<<<<<<
 *         v.push_back(<X>item)
 * 
*/
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "vector.from_py":63
 *         v.push_back(<X>item)
 * 
 *     return v             # <<<<<<<<<<<<<<
 * 
*/
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;

  /* "vector.from_py":51
 *     cdef Py_ssize_t __Pyx_PyObject_LengthHint(object o, Py_ssize_t defaultval) except -1
 * 
 * @cname("__pyx_convert_vector_from_py_std_3a__3a_pair_3c_int_2c_int_3e___")             # <<<<<<<<<<<<<<
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_pair_3c_int_2c_int_3e___(object o) except *:
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("vector.from_py.__pyx_convert_vector_from_py_std_3a__3a_pair_3c_int_2c_int_3e___", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cpython/complex.pxd":20
 * 
 *         # unavailable in limited API
 *         @property             # <<<<<<<<<<<<<<
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double real(self) noexcept:
*/

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self) {
  double __pyx_r;

  /* "cpython/complex.pxd":23
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double real(self) noexcept:
 *             return self.cval.real             # <<<<<<<<<<<<<<
 * 
 *         # unavailable in limited API
*/
  __pyx_r = __pyx_v_self->cval.real;
  goto __pyx_L0;

  /* "cpython/complex.pxd":20
 * 
 *         # unavailable in limited API
 *         @property             # <<<<<<<<<<<<<<
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double real(self) noexcept:
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
#endif /*!(#if !CYTHON_COMPILING_IN_LIMITED_API)*/

/* "cpython/complex.pxd":26
 * 
 *         # unavailable in limited API
 *         @property             # <<<<<<<<<<<<<<
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double imag(self) noexcept:
*/

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self) {
  double __pyx_r;

  /* "cpython/complex.pxd":29
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double imag(self) noexcept:
 *             return self.cval.imag             # <<<<<<<<<<<<<<
 * 
 *     # PyTypeObject PyComplex_Type
*/
  __pyx_r = __pyx_v_self->cval.imag;
  goto __pyx_L0;

  /* "cpython/complex.pxd":26
 * 
 *         # unavailable in limited API
 *         @property             # <<<<<<<<<<<<<<
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double imag(self) noexcept:
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
#endif /*!(#if !CYTHON_COMPILING_IN_LIMITED_API)*/

/* "cpython/contextvars.pxd":115
 * 
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")             # <<<<<<<<<<<<<<
 * cdef inline object get_value(var, default_value=None):
 *     """Return a new reference to the value of the context variable,
*/

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value *__pyx_optional_args) {

  /* "cpython/contextvars.pxd":116
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 * cdef inline object get_value(var, default_value=None):             # <<<<<<<<<<<<<<
 *     """Return a new reference to the value of the context variable,
 *     or the default value of the context variable,
*/
  PyObject *__pyx_v_default_value = ((PyObject *)Py_None);
  PyObject *__pyx_v_value;
  PyObject *__pyx_v_pyvalue = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_value", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_default_value = __pyx_optional_args->default_value;
    }
  }

  /* "cpython/contextvars.pxd":121
 *     or None if no such value or default was found.
 *     """
 *     cdef PyObject *value = NULL             # <<<<<<<<<<<<<<
 *     PyContextVar_Get(var, NULL, &value)
 *     if value is NULL:
*/
  __pyx_v_value = NULL;

  /* "cpython/contextvars.pxd":122
 *     """
 *     cdef PyObject *value = NULL
 *     PyContextVar_Get(var, NULL, &value)             # <<<<<<<<<<<<<<
 *     if value is NULL:
 *         # context variable does not have a default
*/
  __pyx_t_1 = PyContextVar_Get(__pyx_v_var, NULL, (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 122, __pyx_L1_error)

  /* "cpython/contextvars.pxd":123
 *     cdef PyObject *value = NULL
 *     PyContextVar_Get(var, NULL, &value)
 *     if value is NULL:             # <<<<<<<<<<<<<<
 *         # context variable does not have a default
 *         pyvalue = default_value
*/
  __pyx_t_2 = (__pyx_v_value == NULL);
  if (__pyx_t_2) {

    /* "cpython/contextvars.pxd":125
 *     if value is NULL:
 *         # context variable does not have a default
 *         pyvalue = default_value             # <<<<<<<<<<<<<<
 *     else:
 *         # value or default value of context variable
*/
    __Pyx_INCREF(__pyx_v_default_value);
    __pyx_v_pyvalue = __pyx_v_default_value;

    /* "cpython/contextvars.pxd":123
 *     cdef PyObject *value = NULL
 *     PyContextVar_Get(var, NULL, &value)
 *     if value is NULL:             # <<<<<<<<<<<<<<
 *         # context variable does not have a default
 *         pyvalue = default_value
*/
    goto __pyx_L3;
  }

  /* "cpython/contextvars.pxd":128
 *     else:
 *         # value or default value of context variable
 *         pyvalue = <object>value             # <<<<<<<<<<<<<<
 *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
 *     return pyvalue
*/
  /*else*/ {
    __pyx_t_3 = ((PyObject *)__pyx_v_value);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_pyvalue = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "cpython/contextvars.pxd":129
 *         # value or default value of context variable
 *         pyvalue = <object>value
 *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'             # <<<<<<<<<<<<<<
 *     return pyvalue
 * 
*/
    Py_XDECREF(__pyx_v_value);
  }
  __pyx_L3:;

  /* "cpython/contextvars.pxd":130
 *         pyvalue = <object>value
 *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
 *     return pyvalue             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_pyvalue);
  __pyx_r = __pyx_v_pyvalue;
  goto __pyx_L0;

  /* "cpython/contextvars.pxd":115
 * 
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")             # <<<<<<<<<<<<<<
 * cdef inline object get_value(var, default_value=None):
 *     """Return a new reference to the value of the context variable,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cpython.contextvars.get_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pyvalue);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if !CYTHON_COMPILING_IN_LIMITED_API)*/

/* "cpython/contextvars.pxd":133
 * 
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")             # <<<<<<<<<<<<<<
 * cdef inline object get_value_no_default(var, default_value=None):
 *     """Return a new reference to the value of the context variable,
*/

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value_no_default(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default *__pyx_optional_args) {

  /* "cpython/contextvars.pxd":134
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 * cdef inline object get_value_no_default(var, default_value=None):             # <<<<<<<<<<<<<<
 *     """Return a new reference to the value of the context variable,
 *     or the provided default value if no such value was found.
*/
  PyObject *__pyx_v_default_value = ((PyObject *)Py_None);
  PyObject *__pyx_v_value;
  PyObject *__pyx_v_pyvalue = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_value_no_default", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_default_value = __pyx_optional_args->default_value;
    }
  }

  /* "cpython/contextvars.pxd":140
 *     Ignores the default value of the context variable, if any.
 *     """
 *     cdef PyObject *value = NULL             # <<<<<<<<<<<<<<
 *     PyContextVar_Get(var, <PyObject*>default_value, &value)
 *     # value of context variable or 'default_value'
*/
  __pyx_v_value = NULL;

  /* "cpython/contextvars.pxd":141
 *     """
 *     cdef PyObject *value = NULL
 *     PyContextVar_Get(var, <PyObject*>default_value, &value)             # <<<<<<<<<<<<<<
 *     # value of context variable or 'default_value'
 *     pyvalue = <object>value
*/
  __pyx_t_1 = PyContextVar_Get(__pyx_v_var, ((PyObject *)__pyx_v_default_value), (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 141, __pyx_L1_error)

  /* "cpython/contextvars.pxd":143
 *     PyContextVar_Get(var, <PyObject*>default_value, &value)
 *     # value of context variable or 'default_value'
 *     pyvalue = <object>value             # <<<<<<<<<<<<<<
 *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
 *     return pyvalue
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_value);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_pyvalue = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "cpython/contextvars.pxd":144
 *     # value of context variable or 'default_value'
 *     pyvalue = <object>value
 *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'             # <<<<<<<<<<<<<<
 *     return pyvalue
*/
  Py_XDECREF(__pyx_v_value);

  /* "cpython/contextvars.pxd":145
 *     pyvalue = <object>value
 *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
 *     return pyvalue             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_pyvalue);
  __pyx_r = __pyx_v_pyvalue;
  goto __pyx_L0;

  /* "cpython/contextvars.pxd":133
 * 
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")             # <<<<<<<<<<<<<<
 * cdef inline object get_value_no_default(var, default_value=None):
 *     """Return a new reference to the value of the context variable,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cpython.contextvars.get_value_no_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pyvalue);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if !CYTHON_COMPILING_IN_LIMITED_API)*/

/* "src/pygcgopt/detector.pxi":6
 *     cdef public str detectorname
 * 
 *     def freeDetector(self):             # <<<<<<<<<<<<<<
 *         '''calls destructor and frees memory of detector'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_1freeDetector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_freeDetector, "Detector.freeDetector(self)\n\ncalls destructor and frees memory of detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_1freeDetector = {"freeDetector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_1freeDetector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_freeDetector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_1freeDetector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeDetector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("freeDetector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("freeDetector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_freeDetector(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_freeDetector(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeDetector", 0);

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

/* "src/pygcgopt/detector.pxi":10
 *         pass
 * 
 *     def initDetector(self):             # <<<<<<<<<<<<<<
 *         '''initializes detector'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_3initDetector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_2initDetector, "Detector.initDetector(self)\n\ninitializes detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_3initDetector = {"initDetector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_3initDetector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_2initDetector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_3initDetector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("initDetector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("initDetector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("initDetector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_2initDetector(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_2initDetector(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("initDetector", 0);

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

/* "src/pygcgopt/detector.pxi":14
 *         pass
 * 
 *     def exitDetector(self):             # <<<<<<<<<<<<<<
 *         '''calls exit method of detector'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_5exitDetector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_4exitDetector, "Detector.exitDetector(self)\n\ncalls exit method of detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_5exitDetector = {"exitDetector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_5exitDetector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_4exitDetector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_5exitDetector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exitDetector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("exitDetector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("exitDetector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_4exitDetector(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_4exitDetector(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exitDetector", 0);

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

/* "src/pygcgopt/detector.pxi":18
 *         pass
 * 
 *     def propagatePartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''refines a partial decomposition inside detection loop'''
 *         return {}
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_7propagatePartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_6propagatePartialdec, "Detector.propagatePartialdec(self, detprobdata, workonpartialdec)\n\nrefines a partial decomposition inside detection loop");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_7propagatePartialdec = {"propagatePartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_7propagatePartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_6propagatePartialdec};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_7propagatePartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_detprobdata = 0;
  CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("propagatePartialdec (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detprobdata,&__pyx_mstate_global->__pyx_n_u_workonpartialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 18, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(4, 18, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 18, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "propagatePartialdec", 0) < (0)) __PYX_ERR(4, 18, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("propagatePartialdec", 1, 2, 2, i); __PYX_ERR(4, 18, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 18, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(4, 18, __pyx_L3_error)
    }
    __pyx_v_detprobdata = values[0];
    __pyx_v_workonpartialdec = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("propagatePartialdec", 1, 2, 2, __pyx_nargs); __PYX_ERR(4, 18, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Detector.propagatePartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_6propagatePartialdec(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self), __pyx_v_detprobdata, __pyx_v_workonpartialdec);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_6propagatePartialdec(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_detprobdata, CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec) {
  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("propagatePartialdec", 0);

  /* "src/pygcgopt/detector.pxi":20
 *     def propagatePartialdec(self, detprobdata, workonpartialdec):
 *         '''refines a partial decomposition inside detection loop'''
 *         return {}             # <<<<<<<<<<<<<<
 * 
 *     def finishPartialdec(self, detprobdata, workonpartialdec):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":18
 *         pass
 * 
 *     def propagatePartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''refines a partial decomposition inside detection loop'''
 *         return {}
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Detector.propagatePartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":22
 *         return {}
 * 
 *     def finishPartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''completes a partial decomposition when called in detection loop'''
 *         return {}
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_9finishPartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_8finishPartialdec, "Detector.finishPartialdec(self, detprobdata, workonpartialdec)\n\ncompletes a partial decomposition when called in detection loop");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_9finishPartialdec = {"finishPartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_9finishPartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_8finishPartialdec};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_9finishPartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_detprobdata = 0;
  CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("finishPartialdec (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detprobdata,&__pyx_mstate_global->__pyx_n_u_workonpartialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 22, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(4, 22, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 22, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "finishPartialdec", 0) < (0)) __PYX_ERR(4, 22, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("finishPartialdec", 1, 2, 2, i); __PYX_ERR(4, 22, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 22, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(4, 22, __pyx_L3_error)
    }
    __pyx_v_detprobdata = values[0];
    __pyx_v_workonpartialdec = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("finishPartialdec", 1, 2, 2, __pyx_nargs); __PYX_ERR(4, 22, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Detector.finishPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_8finishPartialdec(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self), __pyx_v_detprobdata, __pyx_v_workonpartialdec);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_8finishPartialdec(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_detprobdata, CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec) {
  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("finishPartialdec", 0);

  /* "src/pygcgopt/detector.pxi":24
 *     def finishPartialdec(self, detprobdata, workonpartialdec):
 *         '''completes a partial decomposition when called in detection loop'''
 *         return {}             # <<<<<<<<<<<<<<
 * 
 *     def postprocessPartialdec(self, detprobdata, workonpartialdec):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":22
 *         return {}
 * 
 *     def finishPartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''completes a partial decomposition when called in detection loop'''
 *         return {}
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Detector.finishPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":26
 *         return {}
 * 
 *     def postprocessPartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''postprocess a complete decomposition, called after detection loop'''
 *         return {}
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_11postprocessPartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_10postprocessPartialdec, "Detector.postprocessPartialdec(self, detprobdata, workonpartialdec)\n\npostprocess a complete decomposition, called after detection loop");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_11postprocessPartialdec = {"postprocessPartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_11postprocessPartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_10postprocessPartialdec};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_11postprocessPartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_detprobdata = 0;
  CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("postprocessPartialdec (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detprobdata,&__pyx_mstate_global->__pyx_n_u_workonpartialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 26, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(4, 26, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 26, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "postprocessPartialdec", 0) < (0)) __PYX_ERR(4, 26, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("postprocessPartialdec", 1, 2, 2, i); __PYX_ERR(4, 26, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 26, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(4, 26, __pyx_L3_error)
    }
    __pyx_v_detprobdata = values[0];
    __pyx_v_workonpartialdec = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("postprocessPartialdec", 1, 2, 2, __pyx_nargs); __PYX_ERR(4, 26, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Detector.postprocessPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_10postprocessPartialdec(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self), __pyx_v_detprobdata, __pyx_v_workonpartialdec);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_10postprocessPartialdec(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_detprobdata, CYTHON_UNUSED PyObject *__pyx_v_workonpartialdec) {
  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("postprocessPartialdec", 0);

  /* "src/pygcgopt/detector.pxi":28
 *     def postprocessPartialdec(self, detprobdata, workonpartialdec):
 *         '''postprocess a complete decomposition, called after detection loop'''
 *         return {}             # <<<<<<<<<<<<<<
 * 
 *     def setParamAggressive(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":26
 *         return {}
 * 
 *     def postprocessPartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''postprocess a complete decomposition, called after detection loop'''
 *         return {}
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Detector.postprocessPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":30
 *         return {}
 * 
 *     def setParamAggressive(self):             # <<<<<<<<<<<<<<
 *         '''called if the detection emphasis setting aggressive is chosen'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_13setParamAggressive(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_12setParamAggressive, "Detector.setParamAggressive(self)\n\ncalled if the detection emphasis setting aggressive is chosen");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_13setParamAggressive = {"setParamAggressive", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_13setParamAggressive, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_12setParamAggressive};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_13setParamAggressive(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setParamAggressive (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("setParamAggressive", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("setParamAggressive", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_12setParamAggressive(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_12setParamAggressive(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setParamAggressive", 0);

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

/* "src/pygcgopt/detector.pxi":34
 *         pass
 * 
 *     def setParamDefault(self):             # <<<<<<<<<<<<<<
 *         '''called if the detection emphasis setting default is chosen'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_15setParamDefault(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_14setParamDefault, "Detector.setParamDefault(self)\n\ncalled if the detection emphasis setting default is chosen");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_15setParamDefault = {"setParamDefault", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_15setParamDefault, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_14setParamDefault};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_15setParamDefault(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setParamDefault (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("setParamDefault", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("setParamDefault", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_14setParamDefault(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_14setParamDefault(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setParamDefault", 0);

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

/* "src/pygcgopt/detector.pxi":38
 *         pass
 * 
 *     def setParamFast(self):             # <<<<<<<<<<<<<<
 *         '''called if the detection emphasis setting fast is chosen'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_17setParamFast(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_16setParamFast, "Detector.setParamFast(self)\n\ncalled if the detection emphasis setting fast is chosen");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_17setParamFast = {"setParamFast", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_17setParamFast, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_16setParamFast};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_17setParamFast(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setParamFast (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("setParamFast", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("setParamFast", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_16setParamFast(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_16setParamFast(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setParamFast", 0);

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

/* "src/pygcgopt/detector.pxi":3
 * cdef class Detector:
 *     """Base class of the Detector Plugin"""
 *     cdef public Model model             # <<<<<<<<<<<<<<
 *     cdef public str detectorname
 * 
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_8Detector_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_8Detector_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_5model_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_8Detector_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__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("pygcgopt.gcg.Detector.model.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_8Detector_5model_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_8Detector_5model_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_5model_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_8Detector_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None);

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

/* "src/pygcgopt/detector.pxi":4
 *     """Base class of the Detector Plugin"""
 *     cdef public Model model
 *     cdef public str detectorname             # <<<<<<<<<<<<<<
 * 
 *     def freeDetector(self):
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_8Detector_12detectorname_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_8Detector_12detectorname_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_12detectorname_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_8Detector_12detectorname_2__set__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(4, 4, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->detectorname);
  __Pyx_DECREF(__pyx_v_self->detectorname);
  __pyx_v_self->detectorname = ((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("pygcgopt.gcg.Detector.detectorname.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_8Detector_12detectorname_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_8Detector_12detectorname_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_12detectorname_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_8Detector_12detectorname_4__del__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__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->detectorname);
  __Pyx_DECREF(__pyx_v_self->detectorname);
  __pyx_v_self->detectorname = ((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_8pygcgopt_3gcg_8Detector_19__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_18__reduce_cython__, "Detector.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_19__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_19__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_18__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_19__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_18__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8Detector_18__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_Detector *__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 = (self.detectorname, self.model)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
*/
  __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->detectorname);
  __Pyx_GIVEREF(__pyx_v_self->detectorname);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->detectorname) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __Pyx_INCREF((PyObject *)__pyx_v_self->model);
  __Pyx_GIVEREF((PyObject *)__pyx_v_self->model);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self->model)) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __pyx_v_state = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.detectorname, self.model)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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.detectorname, self.model)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = ('self.detectorname is not None or self.model is not None',)
*/
    __pyx_v_use_setstate = 1;

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

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self.detectorname is not None or self.model is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[0]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self.detectorname is not None or self.model is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('self.detectorname is not None or self.model is not None',)
 *     if use_setstate:
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Detector); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_229442799);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_229442799);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_229442799) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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 = ('self.detectorname is not None or self.model is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, None), state
 *     else:
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_Detector__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Detector); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_229442799);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_229442799);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_229442799) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.Detector.__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_Detector, (type(self), 0xdad04ef, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Detector__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_21__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8Detector_20__setstate_cython__, "Detector.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8Detector_21__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_21__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_20__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8Detector_21__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Detector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8Detector_20__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_Detector__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_Detector__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Detector__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.Detector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":43
 * 
 * 
 * cdef Detector get_py_detector(GCG_DETECTOR* detector):             # <<<<<<<<<<<<<<
 *     cdef GCG_DETECTORDATA* detectordata
 *     detectordata = GCGdetectorGetData(detector)
*/

static struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_f_8pygcgopt_3gcg_get_py_detector(GCG_DETECTOR *__pyx_v_detector) {
  GCG_DETECTORDATA *__pyx_v_detectordata;
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("get_py_detector", 0);

  /* "src/pygcgopt/detector.pxi":45
 * cdef Detector get_py_detector(GCG_DETECTOR* detector):
 *     cdef GCG_DETECTORDATA* detectordata
 *     detectordata = GCGdetectorGetData(detector)             # <<<<<<<<<<<<<<
 *     py_detector = <Detector>detectordata
 *     return py_detector
*/
  __pyx_v_detectordata = GCGdetectorGetData(__pyx_v_detector);

  /* "src/pygcgopt/detector.pxi":46
 *     cdef GCG_DETECTORDATA* detectordata
 *     detectordata = GCGdetectorGetData(detector)
 *     py_detector = <Detector>detectordata             # <<<<<<<<<<<<<<
 *     return py_detector
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_detectordata);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":47
 *     detectordata = GCGdetectorGetData(detector)
 *     py_detector = <Detector>detectordata
 *     return py_detector             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_py_detector);
  __pyx_r = __pyx_v_py_detector;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":43
 * 
 * 
 * cdef Detector get_py_detector(GCG_DETECTOR* detector):             # <<<<<<<<<<<<<<
 *     cdef GCG_DETECTORDATA* detectordata
 *     detectordata = GCGdetectorGetData(detector)
*/

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

/* "src/pygcgopt/detector.pxi":50
 * 
 * 
 * cdef tuple get_py_partialdec_detection_data(PARTIALDEC_DETECTION_DATA* partialdecdetectiondata):             # <<<<<<<<<<<<<<
 *     detprobdata = DetProbData.create(partialdecdetectiondata.detprobdata)
 *     workonpartialdec = PartialDecomposition.create(partialdecdetectiondata.workonpartialdec)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_get_py_partialdec_detection_data(PARTIALDEC_DETECTION_DATA *__pyx_v_partialdecdetectiondata) {
  PyObject *__pyx_v_detprobdata = NULL;
  PyObject *__pyx_v_workonpartialdec = NULL;
  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_py_partialdec_detection_data", 0);

  /* "src/pygcgopt/detector.pxi":51
 * 
 * cdef tuple get_py_partialdec_detection_data(PARTIALDEC_DETECTION_DATA* partialdecdetectiondata):
 *     detprobdata = DetProbData.create(partialdecdetectiondata.detprobdata)             # <<<<<<<<<<<<<<
 *     workonpartialdec = PartialDecomposition.create(partialdecdetectiondata.workonpartialdec)
 *     return detprobdata, workonpartialdec
*/
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_11DetProbData_create(__pyx_v_partialdecdetectiondata->detprobdata); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_detprobdata = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":52
 * cdef tuple get_py_partialdec_detection_data(PARTIALDEC_DETECTION_DATA* partialdecdetectiondata):
 *     detprobdata = DetProbData.create(partialdecdetectiondata.detprobdata)
 *     workonpartialdec = PartialDecomposition.create(partialdecdetectiondata.workonpartialdec)             # <<<<<<<<<<<<<<
 *     return detprobdata, workonpartialdec
 * 
*/
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(__pyx_v_partialdecdetectiondata->workonpartialdec); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_workonpartialdec = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":53
 *     detprobdata = DetProbData.create(partialdecdetectiondata.detprobdata)
 *     workonpartialdec = PartialDecomposition.create(partialdecdetectiondata.workonpartialdec)
 *     return detprobdata, workonpartialdec             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_detprobdata);
  __Pyx_GIVEREF(__pyx_v_detprobdata);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_detprobdata) != (0)) __PYX_ERR(4, 53, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_workonpartialdec);
  __Pyx_GIVEREF(__pyx_v_workonpartialdec);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_workonpartialdec) != (0)) __PYX_ERR(4, 53, __pyx_L1_error);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":50
 * 
 * 
 * cdef tuple get_py_partialdec_detection_data(PARTIALDEC_DETECTION_DATA* partialdecdetectiondata):             # <<<<<<<<<<<<<<
 *     detprobdata = DetProbData.create(partialdecdetectiondata.detprobdata)
 *     workonpartialdec = PartialDecomposition.create(partialdecdetectiondata.workonpartialdec)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.get_py_partialdec_detection_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_detprobdata);
  __Pyx_XDECREF(__pyx_v_workonpartialdec);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":56
 * 
 * 
 * cdef wrap_detector_callback_result(Detector detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result, object result_dict, double detection_time):             # <<<<<<<<<<<<<<
 *     if result_dict is None or type(result_dict) is not dict:
 *         raise TypeError("Detector callback returned '{}' of type '{}'. Expected a dictionary with optional keys 'newpartialdecs' and 'result'.".format(result_dict, type(result_dict)))
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_wrap_detector_callback_result(struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector, PARTIALDEC_DETECTION_DATA *__pyx_v_partialdecdetectiondata, SCIP_RESULT *__pyx_v_result, PyObject *__pyx_v_result_dict, double __pyx_v_detection_time) {
  PyObject *__pyx_v_py_newpartialdecs = NULL;
  PyObject *__pyx_v_nnewpartialdecs = NULL;
  gcg::PARTIALDECOMP **__pyx_v_newpartialdecs;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  PyObject *(*__pyx_t_9)(PyObject *);
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  gcg::PARTIALDECOMP *__pyx_t_12;
  int __pyx_t_13;
  SCIP_RESULT __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wrap_detector_callback_result", 0);

  /* "src/pygcgopt/detector.pxi":57
 * 
 * cdef wrap_detector_callback_result(Detector detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result, object result_dict, double detection_time):
 *     if result_dict is None or type(result_dict) is not dict:             # <<<<<<<<<<<<<<
 *         raise TypeError("Detector callback returned '{}' of type '{}'. Expected a dictionary with optional keys 'newpartialdecs' and 'result'.".format(result_dict, type(result_dict)))
 * 
*/
  __pyx_t_2 = (__pyx_v_result_dict == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_result_dict)) != ((PyObject *)(&PyDict_Type)));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "src/pygcgopt/detector.pxi":58
 * cdef wrap_detector_callback_result(Detector detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result, object result_dict, double detection_time):
 *     if result_dict is None or type(result_dict) is not dict:
 *         raise TypeError("Detector callback returned '{}' of type '{}'. Expected a dictionary with optional keys 'newpartialdecs' and 'result'.".format(result_dict, type(result_dict)))             # <<<<<<<<<<<<<<
 * 
 *     py_newpartialdecs = result_dict.get("newpartialdecs", [])
*/
    __pyx_t_4 = NULL;
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_Detector_callback_returned_of_ty;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_result_dict, ((PyObject *)Py_TYPE(__pyx_v_result_dict))};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 58, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 58, __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(4, 58, __pyx_L1_error)

    /* "src/pygcgopt/detector.pxi":57
 * 
 * cdef wrap_detector_callback_result(Detector detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result, object result_dict, double detection_time):
 *     if result_dict is None or type(result_dict) is not dict:             # <<<<<<<<<<<<<<
 *         raise TypeError("Detector callback returned '{}' of type '{}'. Expected a dictionary with optional keys 'newpartialdecs' and 'result'.".format(result_dict, type(result_dict)))
 * 
*/
  }

  /* "src/pygcgopt/detector.pxi":60
 *         raise TypeError("Detector callback returned '{}' of type '{}'. Expected a dictionary with optional keys 'newpartialdecs' and 'result'.".format(result_dict, type(result_dict)))
 * 
 *     py_newpartialdecs = result_dict.get("newpartialdecs", [])             # <<<<<<<<<<<<<<
 *     if py_newpartialdecs is None or type(py_newpartialdecs) is not list:
 *         raise TypeError("The value of the key 'newpartialdecs' is '{}' of type '{}'. Expected a list of 'PartialDecomposition' objects.".format(py_newpartialdecs, type(py_newpartialdecs)))
*/
  __pyx_t_5 = __pyx_v_result_dict;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_mstate_global->__pyx_n_u_newpartialdecs, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __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(4, 60, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_py_newpartialdecs = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "src/pygcgopt/detector.pxi":61
 * 
 *     py_newpartialdecs = result_dict.get("newpartialdecs", [])
 *     if py_newpartialdecs is None or type(py_newpartialdecs) is not list:             # <<<<<<<<<<<<<<
 *         raise TypeError("The value of the key 'newpartialdecs' is '{}' of type '{}'. Expected a list of 'PartialDecomposition' objects.".format(py_newpartialdecs, type(py_newpartialdecs)))
 * 
*/
  __pyx_t_2 = (__pyx_v_py_newpartialdecs == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_py_newpartialdecs)) != ((PyObject *)(&PyList_Type)));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L7_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "src/pygcgopt/detector.pxi":62
 *     py_newpartialdecs = result_dict.get("newpartialdecs", [])
 *     if py_newpartialdecs is None or type(py_newpartialdecs) is not list:
 *         raise TypeError("The value of the key 'newpartialdecs' is '{}' of type '{}'. Expected a list of 'PartialDecomposition' objects.".format(py_newpartialdecs, type(py_newpartialdecs)))             # <<<<<<<<<<<<<<
 * 
 *     nnewpartialdecs = len(py_newpartialdecs)
*/
    __pyx_t_4 = NULL;
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_The_value_of_the_key_newpartiald;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_py_newpartialdecs, ((PyObject *)Py_TYPE(__pyx_v_py_newpartialdecs))};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 62, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 62, __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(4, 62, __pyx_L1_error)

    /* "src/pygcgopt/detector.pxi":61
 * 
 *     py_newpartialdecs = result_dict.get("newpartialdecs", [])
 *     if py_newpartialdecs is None or type(py_newpartialdecs) is not list:             # <<<<<<<<<<<<<<
 *         raise TypeError("The value of the key 'newpartialdecs' is '{}' of type '{}'. Expected a list of 'PartialDecomposition' objects.".format(py_newpartialdecs, type(py_newpartialdecs)))
 * 
*/
  }

  /* "src/pygcgopt/detector.pxi":64
 *         raise TypeError("The value of the key 'newpartialdecs' is '{}' of type '{}'. Expected a list of 'PartialDecomposition' objects.".format(py_newpartialdecs, type(py_newpartialdecs)))
 * 
 *     nnewpartialdecs = len(py_newpartialdecs)             # <<<<<<<<<<<<<<
 *     cdef PARTIALDECOMP** newpartialdecs = <PARTIALDECOMP**>malloc(nnewpartialdecs * sizeof(PARTIALDECOMP*))
 *     for i in range(nnewpartialdecs):
*/
  __pyx_t_8 = PyObject_Length(__pyx_v_py_newpartialdecs); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(4, 64, __pyx_L1_error)
  __pyx_t_3 = PyLong_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_nnewpartialdecs = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "src/pygcgopt/detector.pxi":65
 * 
 *     nnewpartialdecs = len(py_newpartialdecs)
 *     cdef PARTIALDECOMP** newpartialdecs = <PARTIALDECOMP**>malloc(nnewpartialdecs * sizeof(PARTIALDECOMP*))             # <<<<<<<<<<<<<<
 *     for i in range(nnewpartialdecs):
 *         py_newpartialdecs[i].sort()
*/
  __pyx_t_3 = __Pyx_PyLong_FromSize_t((sizeof(gcg::PARTIALDECOMP *))); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyNumber_Multiply(__pyx_v_nnewpartialdecs, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __Pyx_PyLong_As_size_t(__pyx_t_5); if (unlikely((__pyx_t_7 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(4, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_newpartialdecs = ((gcg::PARTIALDECOMP **)malloc(__pyx_t_7));

  /* "src/pygcgopt/detector.pxi":66
 *     nnewpartialdecs = len(py_newpartialdecs)
 *     cdef PARTIALDECOMP** newpartialdecs = <PARTIALDECOMP**>malloc(nnewpartialdecs * sizeof(PARTIALDECOMP*))
 *     for i in range(nnewpartialdecs):             # <<<<<<<<<<<<<<
 *         py_newpartialdecs[i].sort()
 *         # TODO: It would be nice if the user could set a custom chain info
*/
  __pyx_t_3 = NULL;
  __pyx_t_7 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_nnewpartialdecs};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_3 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  for (;;) {
    {
      __pyx_t_5 = __pyx_t_9(__pyx_t_3);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(4, 66, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "src/pygcgopt/detector.pxi":67
 *     cdef PARTIALDECOMP** newpartialdecs = <PARTIALDECOMP**>malloc(nnewpartialdecs * sizeof(PARTIALDECOMP*))
 *     for i in range(nnewpartialdecs):
 *         py_newpartialdecs[i].sort()             # <<<<<<<<<<<<<<
 *         # TODO: It would be nice if the user could set a custom chain info
 *         py_newpartialdecs[i].addDetectorChainInfo(detector.detectorname)
*/
    __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_py_newpartialdecs, __pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 67, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = __pyx_t_6;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sort, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 67, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "src/pygcgopt/detector.pxi":69
 *         py_newpartialdecs[i].sort()
 *         # TODO: It would be nice if the user could set a custom chain info
 *         py_newpartialdecs[i].addDetectorChainInfo(detector.detectorname)             # <<<<<<<<<<<<<<
 *         py_newpartialdecs[i].addClockTime(detection_time / nnewpartialdecs)
 *         newpartialdecs[i] = (<PartialDecomposition>py_newpartialdecs[i]).thisptr
*/
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_py_newpartialdecs, __pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __pyx_t_4;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_detector->detectorname};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_addDetectorChainInfo, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 69, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "src/pygcgopt/detector.pxi":70
 *         # TODO: It would be nice if the user could set a custom chain info
 *         py_newpartialdecs[i].addDetectorChainInfo(detector.detectorname)
 *         py_newpartialdecs[i].addClockTime(detection_time / nnewpartialdecs)             # <<<<<<<<<<<<<<
 *         newpartialdecs[i] = (<PartialDecomposition>py_newpartialdecs[i]).thisptr
 *     partialdecdetectiondata.newpartialdecs = newpartialdecs
*/
    __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_py_newpartialdecs, __pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = __pyx_t_6;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_10 = PyFloat_FromDouble(__pyx_v_detection_time); if (unlikely(!__pyx_t_10)) __PYX_ERR(4, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyNumber_Divide(__pyx_t_10, __pyx_v_nnewpartialdecs); if (unlikely(!__pyx_t_11)) __PYX_ERR(4, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_11};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_addClockTime, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 70, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "src/pygcgopt/detector.pxi":71
 *         py_newpartialdecs[i].addDetectorChainInfo(detector.detectorname)
 *         py_newpartialdecs[i].addClockTime(detection_time / nnewpartialdecs)
 *         newpartialdecs[i] = (<PartialDecomposition>py_newpartialdecs[i]).thisptr             # <<<<<<<<<<<<<<
 *     partialdecdetectiondata.newpartialdecs = newpartialdecs
 *     partialdecdetectiondata.nnewpartialdecs = nnewpartialdecs
*/
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_py_newpartialdecs, __pyx_v_i); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_12 = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_t_5)->thisptr;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(4, 71, __pyx_L1_error)
    (__pyx_v_newpartialdecs[__pyx_t_8]) = __pyx_t_12;

    /* "src/pygcgopt/detector.pxi":66
 *     nnewpartialdecs = len(py_newpartialdecs)
 *     cdef PARTIALDECOMP** newpartialdecs = <PARTIALDECOMP**>malloc(nnewpartialdecs * sizeof(PARTIALDECOMP*))
 *     for i in range(nnewpartialdecs):             # <<<<<<<<<<<<<<
 *         py_newpartialdecs[i].sort()
 *         # TODO: It would be nice if the user could set a custom chain info
*/
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/pygcgopt/detector.pxi":72
 *         py_newpartialdecs[i].addClockTime(detection_time / nnewpartialdecs)
 *         newpartialdecs[i] = (<PartialDecomposition>py_newpartialdecs[i]).thisptr
 *     partialdecdetectiondata.newpartialdecs = newpartialdecs             # <<<<<<<<<<<<<<
 *     partialdecdetectiondata.nnewpartialdecs = nnewpartialdecs
 *     partialdecdetectiondata.detectiontime = detection_time
*/
  __pyx_v_partialdecdetectiondata->newpartialdecs = __pyx_v_newpartialdecs;

  /* "src/pygcgopt/detector.pxi":73
 *         newpartialdecs[i] = (<PartialDecomposition>py_newpartialdecs[i]).thisptr
 *     partialdecdetectiondata.newpartialdecs = newpartialdecs
 *     partialdecdetectiondata.nnewpartialdecs = nnewpartialdecs             # <<<<<<<<<<<<<<
 *     partialdecdetectiondata.detectiontime = detection_time
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
*/
  __pyx_t_13 = __Pyx_PyLong_As_int(__pyx_v_nnewpartialdecs); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 73, __pyx_L1_error)
  __pyx_v_partialdecdetectiondata->nnewpartialdecs = __pyx_t_13;

  /* "src/pygcgopt/detector.pxi":74
 *     partialdecdetectiondata.newpartialdecs = newpartialdecs
 *     partialdecdetectiondata.nnewpartialdecs = nnewpartialdecs
 *     partialdecdetectiondata.detectiontime = detection_time             # <<<<<<<<<<<<<<
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
 * 
*/
  __pyx_v_partialdecdetectiondata->detectiontime = __pyx_v_detection_time;

  /* "src/pygcgopt/detector.pxi":75
 *     partialdecdetectiondata.nnewpartialdecs = nnewpartialdecs
 *     partialdecdetectiondata.detectiontime = detection_time
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __pyx_v_result_dict;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyLong_From_SCIP_RESULT(((SCIP_RESULT)(__pyx_v_result[0]))); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_mstate_global->__pyx_n_u_result, __pyx_t_6};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 75, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_14 = __Pyx_PyLong_As_SCIP_RESULT(__pyx_t_3); if (unlikely((__pyx_t_14 == ((SCIP_RESULT)-1)) && PyErr_Occurred())) __PYX_ERR(4, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  (__pyx_v_result[0]) = __pyx_t_14;

  /* "src/pygcgopt/detector.pxi":56
 * 
 * 
 * cdef wrap_detector_callback_result(Detector detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result, object result_dict, double detection_time):             # <<<<<<<<<<<<<<
 *     if result_dict is None or type(result_dict) is not dict:
 *         raise TypeError("Detector callback returned '{}' of type '{}'. Expected a dictionary with optional keys 'newpartialdecs' and 'result'.".format(result_dict, type(result_dict)))
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pygcgopt.gcg.wrap_detector_callback_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_py_newpartialdecs);
  __Pyx_XDECREF(__pyx_v_nnewpartialdecs);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":78
 * 
 * 
 * cdef SCIP_RETCODE PyDetectorFree (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     py_detector.freeDetector()
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorFree(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorFree", 0);

  /* "src/pygcgopt/detector.pxi":79
 * 
 * cdef SCIP_RETCODE PyDetectorFree (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     py_detector.freeDetector()
 *     Py_DECREF(py_detector)
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":80
 * cdef SCIP_RETCODE PyDetectorFree (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:
 *     py_detector = get_py_detector(detector)
 *     py_detector.freeDetector()             # <<<<<<<<<<<<<<
 *     Py_DECREF(py_detector)
 *     return SCIP_OKAY
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_freeDetector, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 80, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":81
 *     py_detector = get_py_detector(detector)
 *     py_detector.freeDetector()
 *     Py_DECREF(py_detector)             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  Py_DECREF(((PyObject *)__pyx_v_py_detector));

  /* "src/pygcgopt/detector.pxi":82
 *     py_detector.freeDetector()
 *     Py_DECREF(py_detector)
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyDetectorInit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":78
 * 
 * 
 * cdef SCIP_RETCODE PyDetectorFree (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     py_detector.freeDetector()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorFree", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":84
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorInit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     py_detector.initDetector()
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorInit(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorInit", 0);

  /* "src/pygcgopt/detector.pxi":85
 * 
 * cdef SCIP_RETCODE PyDetectorInit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     py_detector.initDetector()
 *     return SCIP_OKAY
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":86
 * cdef SCIP_RETCODE PyDetectorInit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:
 *     py_detector = get_py_detector(detector)
 *     py_detector.initDetector()             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_initDetector, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 86, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":87
 *     py_detector = get_py_detector(detector)
 *     py_detector.initDetector()
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyDetectorExit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":84
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorInit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     py_detector.initDetector()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorInit", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":89
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorExit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     py_detector.exitDetector()
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorExit(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorExit", 0);

  /* "src/pygcgopt/detector.pxi":90
 * 
 * cdef SCIP_RETCODE PyDetectorExit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     py_detector.exitDetector()
 *     return SCIP_OKAY
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":91
 * cdef SCIP_RETCODE PyDetectorExit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:
 *     py_detector = get_py_detector(detector)
 *     py_detector.exitDetector()             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exitDetector, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":92
 *     py_detector = get_py_detector(detector)
 *     py_detector.exitDetector()
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyDetectorPropagatePartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":89
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorExit (GCG* gcg, GCG_DETECTOR* detector) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     py_detector.exitDetector()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorExit", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":94
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorPropagatePartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorPropagatePartialdec(GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector, PARTIALDEC_DETECTION_DATA *__pyx_v_partialdecdetectiondata, SCIP_RESULT *__pyx_v_result) {
  SCIP_CLOCK *__pyx_v_clock;
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  PyObject *__pyx_v_detprobdata = NULL;
  PyObject *__pyx_v_workonpartialdec = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  double __pyx_v_detection_time;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  SCIP_CLOCK *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  double __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorPropagatePartialdec", 0);

  /* "src/pygcgopt/detector.pxi":95
 * 
 * cdef SCIP_RETCODE PyDetectorPropagatePartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)             # <<<<<<<<<<<<<<
 * 
 *     py_detector = get_py_detector(detector)
*/
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_start_new_clock(__pyx_v_gcg); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(4, 95, __pyx_L1_error)
  __pyx_v_clock = __pyx_t_1;

  /* "src/pygcgopt/detector.pxi":97
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":98
 * 
 *     py_detector = get_py_detector(detector)
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)             # <<<<<<<<<<<<<<
 * 
 *     result_dict = py_detector.propagatePartialdec(detprobdata, workonpartialdec)
*/
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_get_py_partialdec_detection_data(__pyx_v_partialdecdetectiondata); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (likely(__pyx_t_2 != Py_None)) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(4, 98, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(4, 98, __pyx_L1_error)
  }
  __pyx_v_detprobdata = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_workonpartialdec = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "src/pygcgopt/detector.pxi":100
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)
 * 
 *     result_dict = py_detector.propagatePartialdec(detprobdata, workonpartialdec)             # <<<<<<<<<<<<<<
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)
*/
  __pyx_t_4 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_detprobdata, __pyx_v_workonpartialdec};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_propagatePartialdec, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_result_dict = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":102
 *     result_dict = py_detector.propagatePartialdec(detprobdata, workonpartialdec)
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)             # <<<<<<<<<<<<<<
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)
 * 
*/
  __pyx_t_6 = __pyx_f_8pygcgopt_3gcg_stop_and_free_clock(__pyx_v_gcg, __pyx_v_clock); if (unlikely(__pyx_t_6 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(4, 102, __pyx_L1_error)
  __pyx_v_detection_time = __pyx_t_6;

  /* "src/pygcgopt/detector.pxi":103
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)             # <<<<<<<<<<<<<<
 * 
 *     return SCIP_OKAY
*/
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_wrap_detector_callback_result(__pyx_v_py_detector, __pyx_v_partialdecdetectiondata, __pyx_v_result, __pyx_v_result_dict, __pyx_v_detection_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":105
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)
 * 
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyDetectorFinishPartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":94
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorPropagatePartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorPropagatePartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_XDECREF(__pyx_v_detprobdata);
  __Pyx_XDECREF(__pyx_v_workonpartialdec);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":107
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorFinishPartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorFinishPartialdec(GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector, PARTIALDEC_DETECTION_DATA *__pyx_v_partialdecdetectiondata, SCIP_RESULT *__pyx_v_result) {
  SCIP_CLOCK *__pyx_v_clock;
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  PyObject *__pyx_v_detprobdata = NULL;
  PyObject *__pyx_v_workonpartialdec = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  double __pyx_v_detection_time;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  SCIP_CLOCK *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  double __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorFinishPartialdec", 0);

  /* "src/pygcgopt/detector.pxi":108
 * 
 * cdef SCIP_RETCODE PyDetectorFinishPartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)             # <<<<<<<<<<<<<<
 * 
 *     py_detector = get_py_detector(detector)
*/
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_start_new_clock(__pyx_v_gcg); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(4, 108, __pyx_L1_error)
  __pyx_v_clock = __pyx_t_1;

  /* "src/pygcgopt/detector.pxi":110
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":111
 * 
 *     py_detector = get_py_detector(detector)
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)             # <<<<<<<<<<<<<<
 * 
 *     result_dict = py_detector.finishPartialdec(detprobdata, workonpartialdec)
*/
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_get_py_partialdec_detection_data(__pyx_v_partialdecdetectiondata); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (likely(__pyx_t_2 != Py_None)) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(4, 111, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(4, 111, __pyx_L1_error)
  }
  __pyx_v_detprobdata = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_workonpartialdec = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "src/pygcgopt/detector.pxi":113
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)
 * 
 *     result_dict = py_detector.finishPartialdec(detprobdata, workonpartialdec)             # <<<<<<<<<<<<<<
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)
*/
  __pyx_t_4 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_detprobdata, __pyx_v_workonpartialdec};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_finishPartialdec, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_result_dict = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":115
 *     result_dict = py_detector.finishPartialdec(detprobdata, workonpartialdec)
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)             # <<<<<<<<<<<<<<
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)
 * 
*/
  __pyx_t_6 = __pyx_f_8pygcgopt_3gcg_stop_and_free_clock(__pyx_v_gcg, __pyx_v_clock); if (unlikely(__pyx_t_6 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(4, 115, __pyx_L1_error)
  __pyx_v_detection_time = __pyx_t_6;

  /* "src/pygcgopt/detector.pxi":116
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)             # <<<<<<<<<<<<<<
 * 
 *     return SCIP_OKAY
*/
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_wrap_detector_callback_result(__pyx_v_py_detector, __pyx_v_partialdecdetectiondata, __pyx_v_result, __pyx_v_result_dict, __pyx_v_detection_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":118
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)
 * 
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyDetectorPostprocessPartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":107
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorFinishPartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorFinishPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_XDECREF(__pyx_v_detprobdata);
  __Pyx_XDECREF(__pyx_v_workonpartialdec);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":120
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorPostprocessPartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorPostprocessPartialdec(GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector, PARTIALDEC_DETECTION_DATA *__pyx_v_partialdecdetectiondata, SCIP_RESULT *__pyx_v_result) {
  SCIP_CLOCK *__pyx_v_clock;
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  PyObject *__pyx_v_detprobdata = NULL;
  PyObject *__pyx_v_workonpartialdec = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  double __pyx_v_detection_time;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  SCIP_CLOCK *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  double __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorPostprocessPartialdec", 0);

  /* "src/pygcgopt/detector.pxi":121
 * 
 * cdef SCIP_RETCODE PyDetectorPostprocessPartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)             # <<<<<<<<<<<<<<
 * 
 *     py_detector = get_py_detector(detector)
*/
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_start_new_clock(__pyx_v_gcg); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(4, 121, __pyx_L1_error)
  __pyx_v_clock = __pyx_t_1;

  /* "src/pygcgopt/detector.pxi":123
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":124
 * 
 *     py_detector = get_py_detector(detector)
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)             # <<<<<<<<<<<<<<
 * 
 *     result_dict = py_detector.postprocessPartialdec(detprobdata, workonpartialdec)
*/
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_get_py_partialdec_detection_data(__pyx_v_partialdecdetectiondata); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (likely(__pyx_t_2 != Py_None)) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(4, 124, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 124, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 124, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(4, 124, __pyx_L1_error)
  }
  __pyx_v_detprobdata = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_workonpartialdec = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "src/pygcgopt/detector.pxi":126
 *     detprobdata, workonpartialdec = get_py_partialdec_detection_data(partialdecdetectiondata)
 * 
 *     result_dict = py_detector.postprocessPartialdec(detprobdata, workonpartialdec)             # <<<<<<<<<<<<<<
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)
*/
  __pyx_t_4 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_detprobdata, __pyx_v_workonpartialdec};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_postprocessPartialdec, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 126, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_result_dict = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":128
 *     result_dict = py_detector.postprocessPartialdec(detprobdata, workonpartialdec)
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)             # <<<<<<<<<<<<<<
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)
 * 
*/
  __pyx_t_6 = __pyx_f_8pygcgopt_3gcg_stop_and_free_clock(__pyx_v_gcg, __pyx_v_clock); if (unlikely(__pyx_t_6 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(4, 128, __pyx_L1_error)
  __pyx_v_detection_time = __pyx_t_6;

  /* "src/pygcgopt/detector.pxi":129
 * 
 *     cdef double detection_time = stop_and_free_clock(gcg, clock)
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)             # <<<<<<<<<<<<<<
 * 
 *     return SCIP_OKAY
*/
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_wrap_detector_callback_result(__pyx_v_py_detector, __pyx_v_partialdecdetectiondata, __pyx_v_result, __pyx_v_result_dict, __pyx_v_detection_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":131
 *     wrap_detector_callback_result(py_detector, partialdecdetectiondata, result, result_dict, detection_time)
 * 
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamAggressive (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":120
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorPostprocessPartialdec (GCG* gcg, GCG_DETECTOR* detector, PARTIALDEC_DETECTION_DATA* partialdecdetectiondata, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef SCIP_CLOCK* clock = start_new_clock(gcg)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorPostprocessPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_XDECREF(__pyx_v_detprobdata);
  __Pyx_XDECREF(__pyx_v_workonpartialdec);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":133
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamAggressive (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamAggressive() or {}
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamAggressive(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector, SCIP_RESULT *__pyx_v_result) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_t_5;
  SCIP_RESULT __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorSetParamAggressive", 0);

  /* "src/pygcgopt/detector.pxi":134
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamAggressive (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     result_dict = py_detector.setParamAggressive() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":135
 * cdef SCIP_RETCODE PyDetectorSetParamAggressive (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamAggressive() or {}             # <<<<<<<<<<<<<<
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
 *     return SCIP_OKAY
*/
  __pyx_t_3 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setParamAggressive, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(4, 135, __pyx_L1_error)
  if (!__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_v_result_dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":136
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamAggressive() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = __pyx_v_result_dict;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_SCIP_RESULT(((SCIP_RESULT)(__pyx_v_result[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_result, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_6 = __Pyx_PyLong_As_SCIP_RESULT(__pyx_t_1); if (unlikely((__pyx_t_6 == ((SCIP_RESULT)-1)) && PyErr_Occurred())) __PYX_ERR(4, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  (__pyx_v_result[0]) = __pyx_t_6;

  /* "src/pygcgopt/detector.pxi":137
 *     result_dict = py_detector.setParamAggressive() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamDefault (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":133
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamAggressive (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamAggressive() or {}
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorSetParamAggressive", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":139
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamDefault (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamDefault() or {}
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamDefault(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector, SCIP_RESULT *__pyx_v_result) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_t_5;
  SCIP_RESULT __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorSetParamDefault", 0);

  /* "src/pygcgopt/detector.pxi":140
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamDefault (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     result_dict = py_detector.setParamDefault() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":141
 * cdef SCIP_RETCODE PyDetectorSetParamDefault (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamDefault() or {}             # <<<<<<<<<<<<<<
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
 *     return SCIP_OKAY
*/
  __pyx_t_3 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setParamDefault, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(4, 141, __pyx_L1_error)
  if (!__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_v_result_dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":142
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamDefault() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = __pyx_v_result_dict;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_SCIP_RESULT(((SCIP_RESULT)(__pyx_v_result[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_result, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_6 = __Pyx_PyLong_As_SCIP_RESULT(__pyx_t_1); if (unlikely((__pyx_t_6 == ((SCIP_RESULT)-1)) && PyErr_Occurred())) __PYX_ERR(4, 142, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  (__pyx_v_result[0]) = __pyx_t_6;

  /* "src/pygcgopt/detector.pxi":143
 *     result_dict = py_detector.setParamDefault() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamFast (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":139
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamDefault (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamDefault() or {}
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorSetParamDefault", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/detector.pxi":145
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamFast (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamFast() or {}
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamFast(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_DETECTOR *__pyx_v_detector, SCIP_RESULT *__pyx_v_result) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_py_detector = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_t_5;
  SCIP_RESULT __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyDetectorSetParamFast", 0);

  /* "src/pygcgopt/detector.pxi":146
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamFast (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
 *     py_detector = get_py_detector(detector)             # <<<<<<<<<<<<<<
 *     result_dict = py_detector.setParamFast() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_detector(__pyx_v_detector)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":147
 * cdef SCIP_RETCODE PyDetectorSetParamFast (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamFast() or {}             # <<<<<<<<<<<<<<
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
 *     return SCIP_OKAY
*/
  __pyx_t_3 = ((PyObject *)__pyx_v_py_detector);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setParamFast, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 147, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(4, 147, __pyx_L1_error)
  if (!__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_v_result_dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detector.pxi":148
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamFast() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
*/
  __pyx_t_2 = __pyx_v_result_dict;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_SCIP_RESULT(((SCIP_RESULT)(__pyx_v_result[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_result, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_6 = __Pyx_PyLong_As_SCIP_RESULT(__pyx_t_1); if (unlikely((__pyx_t_6 == ((SCIP_RESULT)-1)) && PyErr_Occurred())) __PYX_ERR(4, 148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  (__pyx_v_result[0]) = __pyx_t_6;

  /* "src/pygcgopt/detector.pxi":149
 *     result_dict = py_detector.setParamFast() or {}
 *     result[0] = result_dict.get("result", <SCIP_RESULT>result[0])
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/detector.pxi":145
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyDetectorSetParamFast (GCG* gcg, GCG_DETECTOR* detector, SCIP_RESULT* result) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_detector = get_py_detector(detector)
 *     result_dict = py_detector.setParamFast() or {}
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyDetectorSetParamFast", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_detector);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":7
 *     cdef public str solvername
 * 
 *     def freeSolver(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_1freeSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_freeSolver, "PricingSolver.freeSolver(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_1freeSolver = {"freeSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_1freeSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_freeSolver};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_1freeSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeSolver (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("freeSolver", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("freeSolver", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_freeSolver(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_freeSolver(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeSolver", 0);

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

/* "src/pygcgopt/pricing_solver.pxi":10
 *         pass
 * 
 *     def initSolver(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_3initSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_2initSolver, "PricingSolver.initSolver(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_3initSolver = {"initSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_3initSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_2initSolver};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_3initSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("initSolver (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("initSolver", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("initSolver", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_2initSolver(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_2initSolver(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("initSolver", 0);

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

/* "src/pygcgopt/pricing_solver.pxi":13
 *         pass
 * 
 *     def exitSolver(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_5exitSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_4exitSolver, "PricingSolver.exitSolver(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_5exitSolver = {"exitSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_5exitSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_4exitSolver};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_5exitSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exitSolver (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("exitSolver", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("exitSolver", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_4exitSolver(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_4exitSolver(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exitSolver", 0);

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

/* "src/pygcgopt/pricing_solver.pxi":16
 *         pass
 * 
 *     def initSolution(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_7initSolution(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_6initSolution, "PricingSolver.initSolution(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_7initSolution = {"initSolution", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_7initSolution, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_6initSolution};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_7initSolution(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("initSolution (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("initSolution", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("initSolution", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_6initSolution(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_6initSolution(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("initSolution", 0);

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

/* "src/pygcgopt/pricing_solver.pxi":19
 *         pass
 * 
 *     def exitSolution(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_9exitSolution(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_8exitSolution, "PricingSolver.exitSolution(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_9exitSolution = {"exitSolution", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_9exitSolution, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_8exitSolution};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_9exitSolution(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exitSolution (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("exitSolution", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("exitSolution", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_8exitSolution(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_8exitSolution(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exitSolution", 0);

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

/* "src/pygcgopt/pricing_solver.pxi":22
 *         pass
 * 
 *     def updateSolver(self, pricingprob, probnr, varobjschanged, varbndschanged, consschanged):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_11updateSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_10updateSolver, "PricingSolver.updateSolver(self, pricingprob, probnr, varobjschanged, varbndschanged, consschanged)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_11updateSolver = {"updateSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_11updateSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_10updateSolver};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_11updateSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_pricingprob = 0;
  CYTHON_UNUSED PyObject *__pyx_v_probnr = 0;
  CYTHON_UNUSED PyObject *__pyx_v_varobjschanged = 0;
  CYTHON_UNUSED PyObject *__pyx_v_varbndschanged = 0;
  CYTHON_UNUSED PyObject *__pyx_v_consschanged = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[5] = {0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("updateSolver (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pricingprob,&__pyx_mstate_global->__pyx_n_u_probnr,&__pyx_mstate_global->__pyx_n_u_varobjschanged,&__pyx_mstate_global->__pyx_n_u_varbndschanged,&__pyx_mstate_global->__pyx_n_u_consschanged,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 22, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(5, 22, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(5, 22, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(5, 22, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(5, 22, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 22, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "updateSolver", 0) < (0)) __PYX_ERR(5, 22, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("updateSolver", 1, 5, 5, i); __PYX_ERR(5, 22, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 5)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 22, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(5, 22, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(5, 22, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(5, 22, __pyx_L3_error)
      values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(5, 22, __pyx_L3_error)
    }
    __pyx_v_pricingprob = values[0];
    __pyx_v_probnr = values[1];
    __pyx_v_varobjschanged = values[2];
    __pyx_v_varbndschanged = values[3];
    __pyx_v_consschanged = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("updateSolver", 1, 5, 5, __pyx_nargs); __PYX_ERR(5, 22, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PricingSolver.updateSolver", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_10updateSolver(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self), __pyx_v_pricingprob, __pyx_v_probnr, __pyx_v_varobjschanged, __pyx_v_varbndschanged, __pyx_v_consschanged);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_10updateSolver(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_pricingprob, CYTHON_UNUSED PyObject *__pyx_v_probnr, CYTHON_UNUSED PyObject *__pyx_v_varobjschanged, CYTHON_UNUSED PyObject *__pyx_v_varbndschanged, CYTHON_UNUSED PyObject *__pyx_v_consschanged) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("updateSolver", 0);

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

/* "src/pygcgopt/pricing_solver.pxi":25
 *         pass
 * 
 *     def solve(self, pricingprob, probnr, dualsolconv):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_13solve(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_12solve, "PricingSolver.solve(self, pricingprob, probnr, dualsolconv)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_13solve = {"solve", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_13solve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_12solve};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_13solve(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_pricingprob = 0;
  CYTHON_UNUSED PyObject *__pyx_v_probnr = 0;
  CYTHON_UNUSED PyObject *__pyx_v_dualsolconv = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pricingprob,&__pyx_mstate_global->__pyx_n_u_probnr,&__pyx_mstate_global->__pyx_n_u_dualsolconv,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 25, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(5, 25, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(5, 25, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 25, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "solve", 0) < (0)) __PYX_ERR(5, 25, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("solve", 1, 3, 3, i); __PYX_ERR(5, 25, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 25, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(5, 25, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(5, 25, __pyx_L3_error)
    }
    __pyx_v_pricingprob = values[0];
    __pyx_v_probnr = values[1];
    __pyx_v_dualsolconv = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("solve", 1, 3, 3, __pyx_nargs); __PYX_ERR(5, 25, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PricingSolver.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_12solve(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self), __pyx_v_pricingprob, __pyx_v_probnr, __pyx_v_dualsolconv);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_12solve(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_pricingprob, CYTHON_UNUSED PyObject *__pyx_v_probnr, CYTHON_UNUSED PyObject *__pyx_v_dualsolconv) {
  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("solve", 0);

  /* "src/pygcgopt/pricing_solver.pxi":26
 * 
 *     def solve(self, pricingprob, probnr, dualsolconv):
 *         return {}             # <<<<<<<<<<<<<<
 * 
 *     def solveHeuristic(self, pricingprob, probnr, dualsolconv):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":25
 *         pass
 * 
 *     def solve(self, pricingprob, probnr, dualsolconv):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.PricingSolver.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":28
 *         return {}
 * 
 *     def solveHeuristic(self, pricingprob, probnr, dualsolconv):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_15solveHeuristic(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_14solveHeuristic, "PricingSolver.solveHeuristic(self, pricingprob, probnr, dualsolconv)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_15solveHeuristic = {"solveHeuristic", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_15solveHeuristic, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_14solveHeuristic};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_15solveHeuristic(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_pricingprob = 0;
  CYTHON_UNUSED PyObject *__pyx_v_probnr = 0;
  CYTHON_UNUSED PyObject *__pyx_v_dualsolconv = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("solveHeuristic (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pricingprob,&__pyx_mstate_global->__pyx_n_u_probnr,&__pyx_mstate_global->__pyx_n_u_dualsolconv,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 28, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(5, 28, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(5, 28, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 28, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "solveHeuristic", 0) < (0)) __PYX_ERR(5, 28, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("solveHeuristic", 1, 3, 3, i); __PYX_ERR(5, 28, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 28, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(5, 28, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(5, 28, __pyx_L3_error)
    }
    __pyx_v_pricingprob = values[0];
    __pyx_v_probnr = values[1];
    __pyx_v_dualsolconv = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("solveHeuristic", 1, 3, 3, __pyx_nargs); __PYX_ERR(5, 28, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PricingSolver.solveHeuristic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_14solveHeuristic(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self), __pyx_v_pricingprob, __pyx_v_probnr, __pyx_v_dualsolconv);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_14solveHeuristic(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_pricingprob, CYTHON_UNUSED PyObject *__pyx_v_probnr, CYTHON_UNUSED PyObject *__pyx_v_dualsolconv) {
  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("solveHeuristic", 0);

  /* "src/pygcgopt/pricing_solver.pxi":29
 * 
 *     def solveHeuristic(self, pricingprob, probnr, dualsolconv):
 *         return {}             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":28
 *         return {}
 * 
 *     def solveHeuristic(self, pricingprob, probnr, dualsolconv):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.PricingSolver.solveHeuristic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":4
 *     """Base class of the Pricing Solver Plugin"""
 * 
 *     cdef public Model model             # <<<<<<<<<<<<<<
 *     cdef public str solvername
 * 
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_13PricingSolver_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_13PricingSolver_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_5model_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_13PricingSolver_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(5, 4, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__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("pygcgopt.gcg.PricingSolver.model.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_13PricingSolver_5model_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_13PricingSolver_5model_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_5model_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_13PricingSolver_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None);

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

/* "src/pygcgopt/pricing_solver.pxi":5
 * 
 *     cdef public Model model
 *     cdef public str solvername             # <<<<<<<<<<<<<<
 * 
 *     def freeSolver(self):
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_13PricingSolver_10solvername_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_13PricingSolver_10solvername_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_10solvername_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_13PricingSolver_10solvername_2__set__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(5, 5, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->solvername);
  __Pyx_DECREF(__pyx_v_self->solvername);
  __pyx_v_self->solvername = ((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("pygcgopt.gcg.PricingSolver.solvername.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_13PricingSolver_10solvername_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_13PricingSolver_10solvername_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_10solvername_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_13PricingSolver_10solvername_4__del__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__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->solvername);
  __Pyx_DECREF(__pyx_v_self->solvername);
  __pyx_v_self->solvername = ((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_8pygcgopt_3gcg_13PricingSolver_17__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_16__reduce_cython__, "PricingSolver.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_17__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_17__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_16__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_17__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_16__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13PricingSolver_16__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__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 = (self.model, self.solvername)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
*/
  __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((PyObject *)__pyx_v_self->model);
  __Pyx_GIVEREF((PyObject *)__pyx_v_self->model);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->model)) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->solvername);
  __Pyx_GIVEREF(__pyx_v_self->solvername);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->solvername) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __pyx_v_state = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.model, self.solvername)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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.model, self.solvername)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = ('self.model is not None or self.solvername is not None',)
*/
    __pyx_v_use_setstate = 1;

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

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self.model is not None or self.solvername is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[1]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self.model is not None or self.solvername is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('self.model is not None or self.solvername is not None',)
 *     if use_setstate:
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PricingSolver); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_160002037);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_160002037);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_160002037) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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 = ('self.model is not None or self.solvername is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, None), state
 *     else:
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PricingSolver__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PricingSolver); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_160002037);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_160002037);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_160002037) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.PricingSolver.__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_PricingSolver, (type(self), 0x9896ff5, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PricingSolver__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_19__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13PricingSolver_18__setstate_cython__, "PricingSolver.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13PricingSolver_19__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_19__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_18__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13PricingSolver_19__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PricingSolver.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13PricingSolver_18__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PricingSolver__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PricingSolver__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PricingSolver__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PricingSolver.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":32
 * 
 * 
 * cdef PricingSolver get_py_pricing_solver(GCG_SOLVER* pricingSolver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_SOLVERDATA* solverdata
 *     solverdata = GCGsolverGetData(pricingSolver)
*/

static struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(GCG_SOLVER *__pyx_v_pricingSolver) {
  GCG_SOLVERDATA *__pyx_v_solverdata;
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("get_py_pricing_solver", 0);

  /* "src/pygcgopt/pricing_solver.pxi":34
 * cdef PricingSolver get_py_pricing_solver(GCG_SOLVER* pricingSolver) noexcept with gil:
 *     cdef GCG_SOLVERDATA* solverdata
 *     solverdata = GCGsolverGetData(pricingSolver)             # <<<<<<<<<<<<<<
 *     py_pricing_solver = <PricingSolver>solverdata
 *     return py_pricing_solver
*/
  __pyx_v_solverdata = GCGsolverGetData(__pyx_v_pricingSolver);

  /* "src/pygcgopt/pricing_solver.pxi":35
 *     cdef GCG_SOLVERDATA* solverdata
 *     solverdata = GCGsolverGetData(pricingSolver)
 *     py_pricing_solver = <PricingSolver>solverdata             # <<<<<<<<<<<<<<
 *     return py_pricing_solver
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_solverdata);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":36
 *     solverdata = GCGsolverGetData(pricingSolver)
 *     py_pricing_solver = <PricingSolver>solverdata
 *     return py_pricing_solver             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyPricingSolverFree (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_py_pricing_solver);
  __pyx_r = __pyx_v_py_pricing_solver;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":32
 * 
 * 
 * cdef PricingSolver get_py_pricing_solver(GCG_SOLVER* pricingSolver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_SOLVERDATA* solverdata
 *     solverdata = GCGsolverGetData(pricingSolver)
*/

  /* function exit code */
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":38
 *     return py_pricing_solver
 * 
 * cdef SCIP_RETCODE PyPricingSolverFree (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.freeSolver()
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverFree(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_SOLVER *__pyx_v_solver) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyPricingSolverFree", 0);

  /* "src/pygcgopt/pricing_solver.pxi":39
 * 
 * cdef SCIP_RETCODE PyPricingSolverFree (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)             # <<<<<<<<<<<<<<
 *     py_pricing_solver.freeSolver()
 *     Py_DECREF(py_pricing_solver)
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(__pyx_v_solver)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":40
 * cdef SCIP_RETCODE PyPricingSolverFree (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.freeSolver()             # <<<<<<<<<<<<<<
 *     Py_DECREF(py_pricing_solver)
 *     return SCIP_OKAY
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_freeSolver, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 40, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":41
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.freeSolver()
 *     Py_DECREF(py_pricing_solver)             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  Py_DECREF(((PyObject *)__pyx_v_py_pricing_solver));

  /* "src/pygcgopt/pricing_solver.pxi":42
 *     py_pricing_solver.freeSolver()
 *     Py_DECREF(py_pricing_solver)
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyPricingSolverInit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":38
 *     return py_pricing_solver
 * 
 * cdef SCIP_RETCODE PyPricingSolverFree (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.freeSolver()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyPricingSolverFree", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":44
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverInit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.initSolver()
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverInit(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_SOLVER *__pyx_v_solver) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyPricingSolverInit", 0);

  /* "src/pygcgopt/pricing_solver.pxi":45
 * 
 * cdef SCIP_RETCODE PyPricingSolverInit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)             # <<<<<<<<<<<<<<
 *     py_pricing_solver.initSolver()
 *     return SCIP_OKAY
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(__pyx_v_solver)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":46
 * cdef SCIP_RETCODE PyPricingSolverInit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.initSolver()             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_initSolver, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 46, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":47
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.initSolver()
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyPricingSolverExit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":44
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverInit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.initSolver()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyPricingSolverInit", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":49
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverExit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.exitSolver()
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverExit(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_SOLVER *__pyx_v_solver) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyPricingSolverExit", 0);

  /* "src/pygcgopt/pricing_solver.pxi":50
 * 
 * cdef SCIP_RETCODE PyPricingSolverExit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)             # <<<<<<<<<<<<<<
 *     py_pricing_solver.exitSolver()
 *     return SCIP_OKAY
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(__pyx_v_solver)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":51
 * cdef SCIP_RETCODE PyPricingSolverExit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.exitSolver()             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exitSolver, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 51, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":52
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.exitSolver()
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyPricingSolverInitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":49
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverExit (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.exitSolver()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyPricingSolverExit", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":54
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverInitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.initSolution()
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverInitSol(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_SOLVER *__pyx_v_solver) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyPricingSolverInitSol", 0);

  /* "src/pygcgopt/pricing_solver.pxi":55
 * 
 * cdef SCIP_RETCODE PyPricingSolverInitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)             # <<<<<<<<<<<<<<
 *     py_pricing_solver.initSolution()
 *     return SCIP_OKAY
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(__pyx_v_solver)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":56
 * cdef SCIP_RETCODE PyPricingSolverInitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.initSolution()             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_initSolution, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 56, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":57
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.initSolution()
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyPricingSolverExitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":54
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverInitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.initSolution()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyPricingSolverInitSol", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":59
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverExitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.exitSolution()
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverExitSol(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_SOLVER *__pyx_v_solver) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyPricingSolverExitSol", 0);

  /* "src/pygcgopt/pricing_solver.pxi":60
 * 
 * cdef SCIP_RETCODE PyPricingSolverExitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)             # <<<<<<<<<<<<<<
 *     py_pricing_solver.exitSolution()
 *     return SCIP_OKAY
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(__pyx_v_solver)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":61
 * cdef SCIP_RETCODE PyPricingSolverExitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.exitSolution()             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exitSolution, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 61, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":62
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.exitSolution()
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyPricingSolverUpdate (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Bool varobjschanged, SCIP_Bool varbndschanged, SCIP_Bool consschanged) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":59
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverExitSol (GCG* gcg, GCG_SOLVER* solver) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricing_solver.exitSolution()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyPricingSolverExitSol", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":64
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverUpdate (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Bool varobjschanged, SCIP_Bool varbndschanged, SCIP_Bool consschanged) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverUpdate(CYTHON_UNUSED GCG *__pyx_v_gcg, SCIP *__pyx_v_pricingprob, GCG_SOLVER *__pyx_v_solver, int __pyx_v_probnr, SCIP_Bool __pyx_v_varobjschanged, SCIP_Bool __pyx_v_varbndschanged, SCIP_Bool __pyx_v_consschanged) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  PyObject *__pyx_v_py_pricingprob = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyPricingSolverUpdate", 0);

  /* "src/pygcgopt/pricing_solver.pxi":65
 * 
 * cdef SCIP_RETCODE PyPricingSolverUpdate (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Bool varobjschanged, SCIP_Bool varbndschanged, SCIP_Bool consschanged) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)             # <<<<<<<<<<<<<<
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     py_pricing_solver.updateSolver(py_pricingprob, probnr, varobjschanged, varbndschanged, consschanged)
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(__pyx_v_solver)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":66
 * cdef SCIP_RETCODE PyPricingSolverUpdate (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Bool varobjschanged, SCIP_Bool varbndschanged, SCIP_Bool consschanged) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)             # <<<<<<<<<<<<<<
 *     py_pricing_solver.updateSolver(py_pricingprob, probnr, varobjschanged, varbndschanged, consschanged)
 *     return SCIP_OKAY
*/
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_15GCGPricingModel_create(__pyx_v_pricingprob); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricingprob = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":67
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     py_pricing_solver.updateSolver(py_pricingprob, probnr, varobjschanged, varbndschanged, consschanged)             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_probnr); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_varobjschanged); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_varbndschanged); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_consschanged); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[6] = {__pyx_t_2, __pyx_v_py_pricingprob, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_updateSolver, __pyx_callargs+__pyx_t_7, (6-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 67, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":68
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     py_pricing_solver.updateSolver(py_pricingprob, probnr, varobjschanged, varbndschanged, consschanged)
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyPricingSolverSolve (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":64
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverUpdate (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Bool varobjschanged, SCIP_Bool varbndschanged, SCIP_Bool consschanged) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
*/

  /* 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_WriteUnraisable("pygcgopt.gcg.PyPricingSolverUpdate", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_XDECREF(__pyx_v_py_pricingprob);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":70
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverSolve (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverSolve(CYTHON_UNUSED GCG *__pyx_v_gcg, SCIP *__pyx_v_pricingprob, GCG_SOLVER *__pyx_v_solver, int __pyx_v_probnr, SCIP_Real __pyx_v_dualsolconv, SCIP_Real *__pyx_v_lowerbound, GCG_PRICINGSTATUS *__pyx_v_status) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  PyObject *__pyx_v_py_pricingprob = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  SCIP_Real __pyx_t_6;
  GCG_PRICINGSTATUS __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyPricingSolverSolve", 0);

  /* "src/pygcgopt/pricing_solver.pxi":71
 * 
 * cdef SCIP_RETCODE PyPricingSolverSolve (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)             # <<<<<<<<<<<<<<
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     result_dict = py_pricing_solver.solve(py_pricingprob, probnr, dualsolconv)
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(__pyx_v_solver)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":72
 * cdef SCIP_RETCODE PyPricingSolverSolve (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)             # <<<<<<<<<<<<<<
 *     result_dict = py_pricing_solver.solve(py_pricingprob, probnr, dualsolconv)
 *     lowerbound[0] = result_dict.get("lowerbound", 0)
*/
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_15GCGPricingModel_create(__pyx_v_pricingprob); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricingprob = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":73
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     result_dict = py_pricing_solver.solve(py_pricingprob, probnr, dualsolconv)             # <<<<<<<<<<<<<<
 *     lowerbound[0] = result_dict.get("lowerbound", 0)
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_probnr); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dualsolconv); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_py_pricingprob, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_solve, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 73, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_result_dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":74
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     result_dict = py_pricing_solver.solve(py_pricingprob, probnr, dualsolconv)
 *     lowerbound[0] = result_dict.get("lowerbound", 0)             # <<<<<<<<<<<<<<
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])
 *     return SCIP_OKAY
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_dict, __pyx_mstate_global->__pyx_n_u_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[2], NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_6 == ((SCIP_Real)-1)) && PyErr_Occurred())) __PYX_ERR(5, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  (__pyx_v_lowerbound[0]) = __pyx_t_6;

  /* "src/pygcgopt/pricing_solver.pxi":75
 *     result_dict = py_pricing_solver.solve(py_pricingprob, probnr, dualsolconv)
 *     lowerbound[0] = result_dict.get("lowerbound", 0)
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  __pyx_t_1 = __pyx_v_result_dict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_From_GCG_PRICINGSTATUS(((GCG_PRICINGSTATUS)(__pyx_v_status[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_n_u_status, __pyx_t_3};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 75, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_7 = ((GCG_PRICINGSTATUS)__Pyx_PyLong_As_GCG_PRICINGSTATUS(__pyx_t_4)); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  (__pyx_v_status[0]) = __pyx_t_7;

  /* "src/pygcgopt/pricing_solver.pxi":76
 *     lowerbound[0] = result_dict.get("lowerbound", 0)
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyPricingSolverSolveHeur (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":70
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverSolve (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
*/

  /* 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_WriteUnraisable("pygcgopt.gcg.PyPricingSolverSolve", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_XDECREF(__pyx_v_py_pricingprob);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/pricing_solver.pxi":78
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverSolveHeur (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyPricingSolverSolveHeur(CYTHON_UNUSED GCG *__pyx_v_gcg, SCIP *__pyx_v_pricingprob, GCG_SOLVER *__pyx_v_solver, int __pyx_v_probnr, SCIP_Real __pyx_v_dualsolconv, SCIP_Real *__pyx_v_lowerbound, GCG_PRICINGSTATUS *__pyx_v_status) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_py_pricing_solver = NULL;
  PyObject *__pyx_v_py_pricingprob = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  SCIP_Real __pyx_t_6;
  GCG_PRICINGSTATUS __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyPricingSolverSolveHeur", 0);

  /* "src/pygcgopt/pricing_solver.pxi":79
 * 
 * cdef SCIP_RETCODE PyPricingSolverSolveHeur (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)             # <<<<<<<<<<<<<<
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     result_dict = py_pricing_solver.solveHeuristic(py_pricingprob, probnr, dualsolconv)
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_8pygcgopt_3gcg_get_py_pricing_solver(__pyx_v_solver)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricing_solver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":80
 * cdef SCIP_RETCODE PyPricingSolverSolveHeur (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)             # <<<<<<<<<<<<<<
 *     result_dict = py_pricing_solver.solveHeuristic(py_pricingprob, probnr, dualsolconv)
 *     lowerbound[0] = result_dict.get("lowerbound", 0)
*/
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_15GCGPricingModel_create(__pyx_v_pricingprob); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_pricingprob = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":81
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     result_dict = py_pricing_solver.solveHeuristic(py_pricingprob, probnr, dualsolconv)             # <<<<<<<<<<<<<<
 *     lowerbound[0] = result_dict.get("lowerbound", 0)
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_probnr); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dualsolconv); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_py_pricingprob, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_solveHeuristic, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 81, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_result_dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":82
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     result_dict = py_pricing_solver.solveHeuristic(py_pricingprob, probnr, dualsolconv)
 *     lowerbound[0] = result_dict.get("lowerbound", 0)             # <<<<<<<<<<<<<<
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])
 *     return SCIP_OKAY
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_result_dict, __pyx_mstate_global->__pyx_n_u_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[2], NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_6 == ((SCIP_Real)-1)) && PyErr_Occurred())) __PYX_ERR(5, 82, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  (__pyx_v_lowerbound[0]) = __pyx_t_6;

  /* "src/pygcgopt/pricing_solver.pxi":83
 *     result_dict = py_pricing_solver.solveHeuristic(py_pricingprob, probnr, dualsolconv)
 *     lowerbound[0] = result_dict.get("lowerbound", 0)
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
*/
  __pyx_t_1 = __pyx_v_result_dict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_From_GCG_PRICINGSTATUS(((GCG_PRICINGSTATUS)(__pyx_v_status[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_n_u_status, __pyx_t_3};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 83, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_7 = ((GCG_PRICINGSTATUS)__Pyx_PyLong_As_GCG_PRICINGSTATUS(__pyx_t_4)); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 83, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  (__pyx_v_status[0]) = __pyx_t_7;

  /* "src/pygcgopt/pricing_solver.pxi":84
 *     lowerbound[0] = result_dict.get("lowerbound", 0)
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/pricing_solver.pxi":78
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyPricingSolverSolveHeur (GCG* gcg, SCIP* pricingprob, GCG_SOLVER* solver, int probnr, SCIP_Real dualsolconv, SCIP_Real* lowerbound, GCG_PRICINGSTATUS* status) noexcept with gil:             # <<<<<<<<<<<<<<
 *     py_pricing_solver = get_py_pricing_solver(solver)
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
*/

  /* 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_WriteUnraisable("pygcgopt.gcg.PyPricingSolverSolveHeur", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_pricing_solver);
  __Pyx_XDECREF(__pyx_v_py_pricingprob);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/score.pxi":7
 *     cdef public str scorename
 * 
 *     def scorefree(self):             # <<<<<<<<<<<<<<
 *         '''calls destructor and frees memory of score'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Score_1scorefree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Score_scorefree, "Score.scorefree(self)\n\ncalls destructor and frees memory of score");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Score_1scorefree = {"scorefree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Score_1scorefree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Score_scorefree};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Score_1scorefree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scorefree (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("scorefree", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("scorefree", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Score_scorefree(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_scorefree(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scorefree", 0);

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

/* "src/pygcgopt/score.pxi":11
 *         pass
 * 
 *     def scorecalculate(self, partialdec):             # <<<<<<<<<<<<<<
 *         '''calls calculate method of score'''
 *         return {}
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Score_3scorecalculate(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Score_2scorecalculate, "Score.scorecalculate(self, partialdec)\n\ncalls calculate method of score");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Score_3scorecalculate = {"scorecalculate", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Score_3scorecalculate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Score_2scorecalculate};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Score_3scorecalculate(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_partialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scorecalculate (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(6, 11, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(6, 11, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "scorecalculate", 0) < (0)) __PYX_ERR(6, 11, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("scorecalculate", 1, 1, 1, i); __PYX_ERR(6, 11, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(6, 11, __pyx_L3_error)
    }
    __pyx_v_partialdec = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("scorecalculate", 1, 1, 1, __pyx_nargs); __PYX_ERR(6, 11, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Score.scorecalculate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Score_2scorecalculate(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v_self), __pyx_v_partialdec);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_2scorecalculate(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_partialdec) {
  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("scorecalculate", 0);

  /* "src/pygcgopt/score.pxi":13
 *     def scorecalculate(self, partialdec):
 *         '''calls calculate method of score'''
 *         return {}             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyScoreFree(GCG* gcg, GCG_SCORE* score) noexcept with gil:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/score.pxi":11
 *         pass
 * 
 *     def scorecalculate(self, partialdec):             # <<<<<<<<<<<<<<
 *         '''calls calculate method of score'''
 *         return {}
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Score.scorecalculate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/score.pxi":4
 *     """Base class of the Score Plugin"""
 * 
 *     cdef public Model model             # <<<<<<<<<<<<<<
 *     cdef public str scorename
 * 
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_5Score_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_5Score_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Score_5model_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_5Score_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_Score *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(6, 4, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__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("pygcgopt.gcg.Score.model.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_5Score_5model_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_5Score_5model_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Score_5model_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_5Score_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None);

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

/* "src/pygcgopt/score.pxi":5
 * 
 *     cdef public Model model
 *     cdef public str scorename             # <<<<<<<<<<<<<<
 * 
 *     def scorefree(self):
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_5Score_9scorename_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_5Score_9scorename_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Score_9scorename_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_5Score_9scorename_2__set__(struct __pyx_obj_8pygcgopt_3gcg_Score *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(6, 5, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->scorename);
  __Pyx_DECREF(__pyx_v_self->scorename);
  __pyx_v_self->scorename = ((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("pygcgopt.gcg.Score.scorename.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_5Score_9scorename_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_5Score_9scorename_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Score_9scorename_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_5Score_9scorename_4__del__(struct __pyx_obj_8pygcgopt_3gcg_Score *__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->scorename);
  __Pyx_DECREF(__pyx_v_self->scorename);
  __pyx_v_self->scorename = ((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_8pygcgopt_3gcg_5Score_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Score_4__reduce_cython__, "Score.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Score_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Score_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Score_4__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Score_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Score_4__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Score_4__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_Score *__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 = (self.model, self.scorename)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
*/
  __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((PyObject *)__pyx_v_self->model);
  __Pyx_GIVEREF((PyObject *)__pyx_v_self->model);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->model)) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->scorename);
  __Pyx_GIVEREF(__pyx_v_self->scorename);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->scorename) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __pyx_v_state = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.model, self.scorename)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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.model, self.scorename)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = ('self.model is not None or self.scorename is not None',)
*/
    __pyx_v_use_setstate = 1;

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

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self.model is not None or self.scorename is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[3]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self.model is not None or self.scorename is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('self.model is not None or self.scorename is not None',)
 *     if use_setstate:
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Score); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_104261058);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_104261058);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_104261058) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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 = ('self.model is not None or self.scorename is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, None), state
 *     else:
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_Score__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Score); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_104261058);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_104261058);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_104261058) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.Score.__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_Score, (type(self), 0x636e5c2, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Score__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Score_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Score_6__setstate_cython__, "Score.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Score_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Score_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Score_6__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Score_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Score.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Score_6__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_Score__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_Score__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Score__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.Score.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/score.pxi":15
 *         return {}
 * 
 * cdef SCIP_RETCODE PyScoreFree(GCG* gcg, GCG_SCORE* score) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_SCOREDATA* scoredata
 *     scoredata = GCGscoreGetData(score)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyScoreFree(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_SCORE *__pyx_v_score) {
  GCG_SCOREDATA *__pyx_v_scoredata;
  struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_py_score = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyScoreFree", 0);

  /* "src/pygcgopt/score.pxi":17
 * cdef SCIP_RETCODE PyScoreFree(GCG* gcg, GCG_SCORE* score) noexcept with gil:
 *     cdef GCG_SCOREDATA* scoredata
 *     scoredata = GCGscoreGetData(score)             # <<<<<<<<<<<<<<
 *     py_score = <Score>scoredata
 *     py_score.scorefree()
*/
  __pyx_v_scoredata = GCGscoreGetData(__pyx_v_score);

  /* "src/pygcgopt/score.pxi":18
 *     cdef GCG_SCOREDATA* scoredata
 *     scoredata = GCGscoreGetData(score)
 *     py_score = <Score>scoredata             # <<<<<<<<<<<<<<
 *     py_score.scorefree()
 *     Py_DECREF(py_score)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_scoredata);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_score = ((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/score.pxi":19
 *     scoredata = GCGscoreGetData(score)
 *     py_score = <Score>scoredata
 *     py_score.scorefree()             # <<<<<<<<<<<<<<
 *     Py_DECREF(py_score)
 *     return SCIP_OKAY
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_score);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_scorefree, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 19, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/score.pxi":20
 *     py_score = <Score>scoredata
 *     py_score.scorefree()
 *     Py_DECREF(py_score)             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  Py_DECREF(((PyObject *)__pyx_v_py_score));

  /* "src/pygcgopt/score.pxi":21
 *     py_score.scorefree()
 *     Py_DECREF(py_score)
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyScoreCalculate(GCG* gcg, GCG_SCORE* score, int partialdecid, SCIP_Real* scorevalue) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/score.pxi":15
 *         return {}
 * 
 * cdef SCIP_RETCODE PyScoreFree(GCG* gcg, GCG_SCORE* score) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_SCOREDATA* scoredata
 *     scoredata = GCGscoreGetData(score)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyScoreFree", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_score);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/score.pxi":23
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyScoreCalculate(GCG* gcg, GCG_SCORE* score, int partialdecid, SCIP_Real* scorevalue) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_SCOREDATA* scoredata
 *     scoredata = GCGscoreGetData(score)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyScoreCalculate(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_SCORE *__pyx_v_score, int __pyx_v_partialdecid, SCIP_Real *__pyx_v_scorevalue) {
  GCG_SCOREDATA *__pyx_v_scoredata;
  struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_py_score = NULL;
  PyObject *__pyx_v_partialdec = NULL;
  PyObject *__pyx_v_result_dict = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  SCIP_Real __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyScoreCalculate", 0);

  /* "src/pygcgopt/score.pxi":25
 * cdef SCIP_RETCODE PyScoreCalculate(GCG* gcg, GCG_SCORE* score, int partialdecid, SCIP_Real* scorevalue) noexcept with gil:
 *     cdef GCG_SCOREDATA* scoredata
 *     scoredata = GCGscoreGetData(score)             # <<<<<<<<<<<<<<
 *     py_score = <Score>scoredata
 *     partialdec = py_score.model.getPartDecompFromID(partialdecid)
*/
  __pyx_v_scoredata = GCGscoreGetData(__pyx_v_score);

  /* "src/pygcgopt/score.pxi":26
 *     cdef GCG_SCOREDATA* scoredata
 *     scoredata = GCGscoreGetData(score)
 *     py_score = <Score>scoredata             # <<<<<<<<<<<<<<
 *     partialdec = py_score.model.getPartDecompFromID(partialdecid)
 *     result_dict = py_score.scorecalculate(partialdec)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_scoredata);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_score = ((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/score.pxi":27
 *     scoredata = GCGscoreGetData(score)
 *     py_score = <Score>scoredata
 *     partialdec = py_score.model.getPartDecompFromID(partialdecid)             # <<<<<<<<<<<<<<
 *     result_dict = py_score.scorecalculate(partialdec)
 *     scorevalue[0] = result_dict.get("scorevalue", scorevalue[0])
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_score->model);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_partialdecid); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getPartDecompFromID, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 27, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_partialdec = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/score.pxi":28
 *     py_score = <Score>scoredata
 *     partialdec = py_score.model.getPartDecompFromID(partialdecid)
 *     result_dict = py_score.scorecalculate(partialdec)             # <<<<<<<<<<<<<<
 *     scorevalue[0] = result_dict.get("scorevalue", scorevalue[0])
 *     return SCIP_OKAY
*/
  __pyx_t_3 = ((PyObject *)__pyx_v_py_score);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_partialdec};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_scorecalculate, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 28, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_result_dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/score.pxi":29
 *     partialdec = py_score.model.getPartDecompFromID(partialdecid)
 *     result_dict = py_score.scorecalculate(partialdec)
 *     scorevalue[0] = result_dict.get("scorevalue", scorevalue[0])             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
*/
  __pyx_t_3 = __pyx_v_result_dict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = PyFloat_FromDouble((__pyx_v_scorevalue[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_mstate_global->__pyx_n_u_scorevalue, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 29, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_5 = __Pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == ((SCIP_Real)-1)) && PyErr_Occurred())) __PYX_ERR(6, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  (__pyx_v_scorevalue[0]) = __pyx_t_5;

  /* "src/pygcgopt/score.pxi":30
 *     result_dict = py_score.scorecalculate(partialdec)
 *     scorevalue[0] = result_dict.get("scorevalue", scorevalue[0])
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/score.pxi":23
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyScoreCalculate(GCG* gcg, GCG_SCORE* score, int partialdecid, SCIP_Real* scorevalue) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_SCOREDATA* scoredata
 *     scoredata = GCGscoreGetData(score)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyScoreCalculate", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_score);
  __Pyx_XDECREF(__pyx_v_partialdec);
  __Pyx_XDECREF(__pyx_v_result_dict);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":4
 *     """Base class holding a pointer to corresponding ConsPartition"""
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(ConsPartition* consPartition, DetProbData detProbData):
 *         if consPartition == NULL:
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_8ConsPart_create(gcg::ConsPartition *__pyx_v_consPartition, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_detProbData) {
  struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_new_ConsPart = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "src/pygcgopt/partition.pxi":6
 *     @staticmethod
 *     cdef create(ConsPartition* consPartition, DetProbData detProbData):
 *         if consPartition == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create ConsPart with ConsPartition* == NULL")
 *         new_ConsPart = ConsPart()
*/
  __pyx_t_1 = (__pyx_v_consPartition == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/pygcgopt/partition.pxi":7
 *     cdef create(ConsPartition* consPartition, DetProbData detProbData):
 *         if consPartition == NULL:
 *             raise Warning("cannot create ConsPart with ConsPartition* == NULL")             # <<<<<<<<<<<<<<
 *         new_ConsPart = ConsPart()
 *         new_ConsPart.consPartition = consPartition
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_cannot_create_ConsPart_with_Cons};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_Warning)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 7, __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(7, 7, __pyx_L1_error)

    /* "src/pygcgopt/partition.pxi":6
 *     @staticmethod
 *     cdef create(ConsPartition* consPartition, DetProbData detProbData):
 *         if consPartition == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create ConsPart with ConsPartition* == NULL")
 *         new_ConsPart = ConsPart()
*/
  }

  /* "src/pygcgopt/partition.pxi":8
 *         if consPartition == NULL:
 *             raise Warning("cannot create ConsPart with ConsPartition* == NULL")
 *         new_ConsPart = ConsPart()             # <<<<<<<<<<<<<<
 *         new_ConsPart.consPartition = consPartition
 *         new_ConsPart.detProbData = detProbData
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 8, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __pyx_v_new_ConsPart = ((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":9
 *             raise Warning("cannot create ConsPart with ConsPartition* == NULL")
 *         new_ConsPart = ConsPart()
 *         new_ConsPart.consPartition = consPartition             # <<<<<<<<<<<<<<
 *         new_ConsPart.detProbData = detProbData
 *         return new_ConsPart
*/
  __pyx_v_new_ConsPart->consPartition = __pyx_v_consPartition;

  /* "src/pygcgopt/partition.pxi":10
 *         new_ConsPart = ConsPart()
 *         new_ConsPart.consPartition = consPartition
 *         new_ConsPart.detProbData = detProbData             # <<<<<<<<<<<<<<
 *         return new_ConsPart
 * 
*/
  __Pyx_INCREF((PyObject *)__pyx_v_detProbData);
  __Pyx_GIVEREF((PyObject *)__pyx_v_detProbData);
  __Pyx_GOTREF((PyObject *)__pyx_v_new_ConsPart->detProbData);
  __Pyx_DECREF((PyObject *)__pyx_v_new_ConsPart->detProbData);
  __pyx_v_new_ConsPart->detProbData = __pyx_v_detProbData;

  /* "src/pygcgopt/partition.pxi":11
 *         new_ConsPart.consPartition = consPartition
 *         new_ConsPart.detProbData = detProbData
 *         return new_ConsPart             # <<<<<<<<<<<<<<
 * 
 *     def getClassDescription(self, classindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_new_ConsPart);
  __pyx_r = ((PyObject *)__pyx_v_new_ConsPart);
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":4
 *     """Base class holding a pointer to corresponding ConsPartition"""
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(ConsPartition* consPartition, DetProbData detProbData):
 *         if consPartition == NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_new_ConsPart);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":13
 *         return new_ConsPart
 * 
 *     def getClassDescription(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the description of the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_1getClassDescription(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_getClassDescription, "ConsPart.getClassDescription(self, classindex)\n\nreturns the description of the class corresponding to the classindex\n\n:param classindex: index of the class\n:type classindex: int\n:return: description of the class\n:rtype: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_1getClassDescription = {"getClassDescription", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_1getClassDescription, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_getClassDescription};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_1getClassDescription(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassDescription (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 13, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 13, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassDescription", 0) < (0)) __PYX_ERR(7, 13, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassDescription", 1, 1, 1, i); __PYX_ERR(7, 13, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 13, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassDescription", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 13, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getClassDescription", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_getClassDescription(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_classindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_getClassDescription(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  char const *__pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassDescription", 0);

  /* "src/pygcgopt/partition.pxi":21
 *         :rtype: str
 *         """
 *         return self.consPartition.getClassDescription(classindex).decode('utf-8')             # <<<<<<<<<<<<<<
 * 
 *     def getClassName(self, classindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 21, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->consPartition->getClassDescription(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 21, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_ssize_strlen(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(7, 21, __pyx_L1_error)
  __pyx_t_4 = __Pyx_decode_c_string(__pyx_t_2, 0, __pyx_t_3, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":13
 *         return new_ConsPart
 * 
 *     def getClassDescription(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the description of the class corresponding to the classindex
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getClassDescription", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":23
 *         return self.consPartition.getClassDescription(classindex).decode('utf-8')
 * 
 *     def getClassName(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the name of the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_3getClassName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_2getClassName, "ConsPart.getClassName(self, classindex)\n\nreturns the name of the class corresponding to the classindex\n\n:param classindex: index of the class\n:type classindex: int\n:return: name of the class\n:rtype: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_3getClassName = {"getClassName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_3getClassName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_2getClassName};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_3getClassName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassName (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 23, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 23, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassName", 0) < (0)) __PYX_ERR(7, 23, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassName", 1, 1, 1, i); __PYX_ERR(7, 23, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 23, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassName", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 23, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getClassName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_2getClassName(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_classindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_2getClassName(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  char const *__pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassName", 0);

  /* "src/pygcgopt/partition.pxi":31
 *         :rtype: str
 *         """
 *         return self.consPartition.getClassName(classindex).decode('utf-8')             # <<<<<<<<<<<<<<
 * 
 *     def getName(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 31, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->consPartition->getClassName(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 31, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_ssize_strlen(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(7, 31, __pyx_L1_error)
  __pyx_t_4 = __Pyx_decode_c_string(__pyx_t_2, 0, __pyx_t_3, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":23
 *         return self.consPartition.getClassDescription(classindex).decode('utf-8')
 * 
 *     def getClassName(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the name of the class corresponding to the classindex
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getClassName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":33
 *         return self.consPartition.getClassName(classindex).decode('utf-8')
 * 
 *     def getName(self):             # <<<<<<<<<<<<<<
 *         """returns the name of the constraint partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_5getName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_4getName, "ConsPart.getName(self)\n\nreturns the name of the constraint partition\n\n:return: name of the constraint partition\n:rtype: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_5getName = {"getName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_5getName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_4getName};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_5getName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getName (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getName", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getName", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_4getName(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_4getName(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  char const *__pyx_t_1;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getName", 0);

  /* "src/pygcgopt/partition.pxi":39
 *         :rtype: str
 *         """
 *         return self.consPartition.getName().decode('utf-8')             # <<<<<<<<<<<<<<
 * 
 *     def getNClasses(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->consPartition->getName();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 39, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_ssize_strlen(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(7, 39, __pyx_L1_error)
  __pyx_t_3 = __Pyx_decode_c_string(__pyx_t_1, 0, __pyx_t_2, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":33
 *         return self.consPartition.getClassName(classindex).decode('utf-8')
 * 
 *     def getName(self):             # <<<<<<<<<<<<<<
 *         """returns the name of the constraint partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":41
 *         return self.consPartition.getName().decode('utf-8')
 * 
 *     def getNClasses(self):             # <<<<<<<<<<<<<<
 *         """returns the number of classes of the constraint partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_7getNClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_6getNClasses, "ConsPart.getNClasses(self)\n\nreturns the number of classes of the constraint partition\n\n:return: number of classes\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_7getNClasses = {"getNClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_7getNClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_6getNClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_7getNClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNClasses", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNClasses", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_6getNClasses(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_6getNClasses(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNClasses", 0);

  /* "src/pygcgopt/partition.pxi":47
 *         :rtype: int
 *         """
 *         return self.consPartition.getNClasses()             # <<<<<<<<<<<<<<
 * 
 *     def removeEmptyClasses(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->consPartition->getNClasses();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 47, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":41
 *         return self.consPartition.getName().decode('utf-8')
 * 
 *     def getNClasses(self):             # <<<<<<<<<<<<<<
 *         """returns the number of classes of the constraint partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getNClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":49
 *         return self.consPartition.getNClasses()
 * 
 *     def removeEmptyClasses(self):             # <<<<<<<<<<<<<<
 *         """removes all classes which do not have any assigned indices (classindices may change)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_9removeEmptyClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_8removeEmptyClasses, "ConsPart.removeEmptyClasses(self)\n\nremoves all classes which do not have any assigned indices (classindices may change)\n\n:return: number of removed classes\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_9removeEmptyClasses = {"removeEmptyClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_9removeEmptyClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_8removeEmptyClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_9removeEmptyClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("removeEmptyClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("removeEmptyClasses", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("removeEmptyClasses", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_8removeEmptyClasses(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_8removeEmptyClasses(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("removeEmptyClasses", 0);

  /* "src/pygcgopt/partition.pxi":55
 *         :rtype: int
 *         """
 *         return self.consPartition.removeEmptyClasses()             # <<<<<<<<<<<<<<
 * 
 *     def setClassDescription(self, classindex, desc):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->consPartition->removeEmptyClasses();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 55, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":49
 *         return self.consPartition.getNClasses()
 * 
 *     def removeEmptyClasses(self):             # <<<<<<<<<<<<<<
 *         """removes all classes which do not have any assigned indices (classindices may change)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.removeEmptyClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":57
 *         return self.consPartition.removeEmptyClasses()
 * 
 *     def setClassDescription(self, classindex, desc):             # <<<<<<<<<<<<<<
 *         """sets the description of the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_11setClassDescription(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_10setClassDescription, "ConsPart.setClassDescription(self, classindex, desc)\n\nsets the description of the class corresponding to the classindex\n\n:param classindex: index of the class\n:type classindex: int\n:param desc: description of the class\n:type desc: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_11setClassDescription = {"setClassDescription", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_11setClassDescription, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_10setClassDescription};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_11setClassDescription(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  PyObject *__pyx_v_desc = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setClassDescription (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,&__pyx_mstate_global->__pyx_n_u_desc,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 57, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 57, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 57, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setClassDescription", 0) < (0)) __PYX_ERR(7, 57, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setClassDescription", 1, 2, 2, i); __PYX_ERR(7, 57, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 57, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 57, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
    __pyx_v_desc = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setClassDescription", 1, 2, 2, __pyx_nargs); __PYX_ERR(7, 57, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.setClassDescription", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_10setClassDescription(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_classindex, __pyx_v_desc);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_10setClassDescription(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_desc) {
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_t_5;
  char const *__pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setClassDescription", 0);

  /* "src/pygcgopt/partition.pxi":65
 *         :type desc: str
 *         """
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 *         self.consPartition.setClassDescription(classindex, c_desc)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_desc};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 65, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/partition.pxi":66
 *         """
 *         c_desc = str_conversion(desc)
 *         self.consPartition.setClassDescription(classindex, c_desc)             # <<<<<<<<<<<<<<
 * 
 *     def setClassName(self, classindex, name):
*/
  __pyx_t_5 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 66, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(7, 66, __pyx_L1_error)
  try {
    __pyx_v_self->consPartition->setClassDescription(__pyx_t_5, __pyx_t_6);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 66, __pyx_L1_error)
  }

  /* "src/pygcgopt/partition.pxi":57
 *         return self.consPartition.removeEmptyClasses()
 * 
 *     def setClassDescription(self, classindex, desc):             # <<<<<<<<<<<<<<
 *         """sets the description of the class corresponding to the classindex
 * 
*/

  /* 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("pygcgopt.gcg.ConsPart.setClassDescription", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":68
 *         self.consPartition.setClassDescription(classindex, c_desc)
 * 
 *     def setClassName(self, classindex, name):             # <<<<<<<<<<<<<<
 *         """sets the name of the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_13setClassName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_12setClassName, "ConsPart.setClassName(self, classindex, name)\n\nsets the name of the class corresponding to the classindex\n\n:param classindex: index of the class\n:type classindex: int\n:param name: name of the class\n:type name: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_13setClassName = {"setClassName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_13setClassName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_12setClassName};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_13setClassName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  PyObject *__pyx_v_name = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setClassName (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,&__pyx_mstate_global->__pyx_n_u_name,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 68, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 68, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 68, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setClassName", 0) < (0)) __PYX_ERR(7, 68, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setClassName", 1, 2, 2, i); __PYX_ERR(7, 68, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 68, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 68, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
    __pyx_v_name = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setClassName", 1, 2, 2, __pyx_nargs); __PYX_ERR(7, 68, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.setClassName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_12setClassName(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_classindex, __pyx_v_name);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_12setClassName(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_name) {
  CYTHON_UNUSED PyObject *__pyx_v_c_name = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_t_5;
  char const *__pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setClassName", 0);

  /* "src/pygcgopt/partition.pxi":76
 *         :type name: str
 *         """
 *         c_name = str_conversion(name)             # <<<<<<<<<<<<<<
 *         self.consPartition.setClassName(classindex, name)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_name};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 76, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_name = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/partition.pxi":77
 *         """
 *         c_name = str_conversion(name)
 *         self.consPartition.setClassName(classindex, name)             # <<<<<<<<<<<<<<
 * 
 *     def addClass(self, name, desc, decompInfo):
*/
  __pyx_t_5 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 77, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_name); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(7, 77, __pyx_L1_error)
  try {
    __pyx_v_self->consPartition->setClassName(__pyx_t_5, __pyx_t_6);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 77, __pyx_L1_error)
  }

  /* "src/pygcgopt/partition.pxi":68
 *         self.consPartition.setClassDescription(classindex, c_desc)
 * 
 *     def setClassName(self, classindex, name):             # <<<<<<<<<<<<<<
 *         """sets the name of the class corresponding to the classindex
 * 
*/

  /* 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("pygcgopt.gcg.ConsPart.setClassName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":79
 *         self.consPartition.setClassName(classindex, name)
 * 
 *     def addClass(self, name, desc, decompInfo):             # <<<<<<<<<<<<<<
 *         """adds a new class to the constraint partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_15addClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_14addClass, "ConsPart.addClass(self, name, desc, decompInfo)\n\nadds a new class to the constraint partition\n\n:param name: name of the class\n:type name: str\n:param desc: description of the class\n:type desc: str\n:param decompInfo: decomposition information of the constraint class\n:type decompInfo: :class:`CONS_DECOMPINFO`\n:return: index of the added class\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_15addClass = {"addClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_15addClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_14addClass};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_15addClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_desc = 0;
  PyObject *__pyx_v_decompInfo = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addClass (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_name,&__pyx_mstate_global->__pyx_n_u_desc,&__pyx_mstate_global->__pyx_n_u_decompInfo,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 79, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addClass", 0) < (0)) __PYX_ERR(7, 79, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addClass", 1, 3, 3, i); __PYX_ERR(7, 79, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 79, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 79, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 79, __pyx_L3_error)
    }
    __pyx_v_name = values[0];
    __pyx_v_desc = values[1];
    __pyx_v_decompInfo = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addClass", 1, 3, 3, __pyx_nargs); __PYX_ERR(7, 79, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.addClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_14addClass(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_name, __pyx_v_desc, __pyx_v_decompInfo);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_14addClass(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_desc, PyObject *__pyx_v_decompInfo) {
  PyObject *__pyx_v_c_name = NULL;
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char const *__pyx_t_5;
  char const *__pyx_t_6;
  gcg::CONS_DECOMPINFO __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addClass", 0);

  /* "src/pygcgopt/partition.pxi":91
 *         :rtype: int
 *         """
 *         c_name = str_conversion(name)             # <<<<<<<<<<<<<<
 *         c_desc = str_conversion(desc)
 *         return self.consPartition.addClass(c_name, c_desc, decompInfo)
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_name};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_name = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/partition.pxi":92
 *         """
 *         c_name = str_conversion(name)
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 *         return self.consPartition.addClass(c_name, c_desc, decompInfo)
 * 
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_desc};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 92, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/partition.pxi":93
 *         c_name = str_conversion(name)
 *         c_desc = str_conversion(desc)
 *         return self.consPartition.addClass(c_name, c_desc, decompInfo)             # <<<<<<<<<<<<<<
 * 
 *     def assignConsToClass(self, Constraint cons, classindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_c_name); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(7, 93, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(7, 93, __pyx_L1_error)
  __pyx_t_7 = ((gcg::CONS_DECOMPINFO)__Pyx_PyLong_As_gcg_3a__3a_CONS_DECOMPINFO(__pyx_v_decompInfo)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 93, __pyx_L1_error)
  try {
    __pyx_t_8 = __pyx_v_self->consPartition->addClass(__pyx_t_5, __pyx_t_6, __pyx_t_7);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 93, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":79
 *         self.consPartition.setClassName(classindex, name)
 * 
 *     def addClass(self, name, desc, decompInfo):             # <<<<<<<<<<<<<<
 *         """adds a new class to the constraint partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.addClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_name);
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":95
 *         return self.consPartition.addClass(c_name, c_desc, decompInfo)
 * 
 *     def assignConsToClass(self, Constraint cons, classindex):             # <<<<<<<<<<<<<<
 *         """assigns a constraint to the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_17assignConsToClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_16assignConsToClass, "ConsPart.assignConsToClass(self, Constraint cons, classindex)\n\nassigns a constraint to the class corresponding to the classindex\n\n:param cons: constraint that should be assigned to a class\n:type cons: :class:`Constraint`\n:param classindex: index of the class\n:type classindex: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_17assignConsToClass = {"assignConsToClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_17assignConsToClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_16assignConsToClass};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_17assignConsToClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  PyObject *__pyx_v_classindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("assignConsToClass (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,&__pyx_mstate_global->__pyx_n_u_classindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 95, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 95, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 95, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "assignConsToClass", 0) < (0)) __PYX_ERR(7, 95, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("assignConsToClass", 1, 2, 2, i); __PYX_ERR(7, 95, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 95, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 95, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
    __pyx_v_classindex = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("assignConsToClass", 1, 2, 2, __pyx_nargs); __PYX_ERR(7, 95, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.assignConsToClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(7, 95, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_16assignConsToClass(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_cons, __pyx_v_classindex);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_16assignConsToClass(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons, PyObject *__pyx_v_classindex) {
  int __pyx_v_cpp_consindex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("assignConsToClass", 0);

  /* "src/pygcgopt/partition.pxi":103
 *         :type classindex: int
 *         """
 *         cdef int cpp_consindex = self.detProbData.getIndexForCons(cons)             # <<<<<<<<<<<<<<
 *         self.consPartition.assignConsToClass(cpp_consindex, classindex)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_cons)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getIndexForCons, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 103, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cpp_consindex = __pyx_t_4;

  /* "src/pygcgopt/partition.pxi":104
 *         """
 *         cdef int cpp_consindex = self.detProbData.getIndexForCons(cons)
 *         self.consPartition.assignConsToClass(cpp_consindex, classindex)             # <<<<<<<<<<<<<<
 * 
 *     def getAllSubsets(self, both, only_master, only_pricing):
*/
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 104, __pyx_L1_error)
  try {
    __pyx_v_self->consPartition->assignConsToClass(__pyx_v_cpp_consindex, __pyx_t_4);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 104, __pyx_L1_error)
  }

  /* "src/pygcgopt/partition.pxi":95
 *         return self.consPartition.addClass(c_name, c_desc, decompInfo)
 * 
 *     def assignConsToClass(self, Constraint cons, classindex):             # <<<<<<<<<<<<<<
 *         """assigns a constraint to the class corresponding to the classindex
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.assignConsToClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":106
 *         self.consPartition.assignConsToClass(cpp_consindex, classindex)
 * 
 *     def getAllSubsets(self, both, only_master, only_pricing):             # <<<<<<<<<<<<<<
 *         """returns a list containing all possible subsets of the chosen classindices
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_19getAllSubsets(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_18getAllSubsets, "ConsPart.getAllSubsets(self, both, only_master, only_pricing)\n\nreturns a list containing all possible subsets of the chosen classindices\n\n:param both: True iff PY_BOTH classes should be considered\n:type both: bool\n:param only_master: True iff PY_ONLY_MASTER classes should be considered\n:type only_master: bool\n:param only_pricing: True iff PY_ONLY_PRICING classes should be considered\n:type only_pricing: bool\n:return: list of lists containing all possible subsets of the chosen classindices\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_19getAllSubsets = {"getAllSubsets", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_19getAllSubsets, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_18getAllSubsets};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_19getAllSubsets(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_both = 0;
  PyObject *__pyx_v_only_master = 0;
  PyObject *__pyx_v_only_pricing = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getAllSubsets (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_both,&__pyx_mstate_global->__pyx_n_u_only_master,&__pyx_mstate_global->__pyx_n_u_only_pricing,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 106, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 106, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 106, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 106, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getAllSubsets", 0) < (0)) __PYX_ERR(7, 106, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getAllSubsets", 1, 3, 3, i); __PYX_ERR(7, 106, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 106, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 106, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 106, __pyx_L3_error)
    }
    __pyx_v_both = values[0];
    __pyx_v_only_master = values[1];
    __pyx_v_only_pricing = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getAllSubsets", 1, 3, 3, __pyx_nargs); __PYX_ERR(7, 106, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getAllSubsets", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_18getAllSubsets(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_both, __pyx_v_only_master, __pyx_v_only_pricing);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_18getAllSubsets(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_both, PyObject *__pyx_v_only_master, PyObject *__pyx_v_only_pricing) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  bool __pyx_t_2;
  bool __pyx_t_3;
  std::vector<std::vector<int> >  __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getAllSubsets", 0);

  /* "src/pygcgopt/partition.pxi":118
 *         :rtype: list
 *         """
 *         return self.consPartition.getAllSubsets(both, only_master, only_pricing)             # <<<<<<<<<<<<<<
 * 
 *     def getClassDecompInfo(self, classindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_both); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(7, 118, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_only_master); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(7, 118, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_only_pricing); if (unlikely((__pyx_t_3 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(7, 118, __pyx_L1_error)
  try {
    __pyx_t_4 = __pyx_v_self->consPartition->getAllSubsets(__pyx_t_1, __pyx_t_2, __pyx_t_3);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 118, __pyx_L1_error)
  }
  __pyx_t_5 = __pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":106
 *         self.consPartition.assignConsToClass(cpp_consindex, classindex)
 * 
 *     def getAllSubsets(self, both, only_master, only_pricing):             # <<<<<<<<<<<<<<
 *         """returns a list containing all possible subsets of the chosen classindices
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getAllSubsets", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":120
 *         return self.consPartition.getAllSubsets(both, only_master, only_pricing)
 * 
 *     def getClassDecompInfo(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the decomposition information of a class
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_21getClassDecompInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_20getClassDecompInfo, "ConsPart.getClassDecompInfo(self, classindex)\n\nreturns the decomposition information of a class\n\n:param classindex: index of the class\n:type classindex: int\n:return: decomposition information of the constraint class\n:rtype: :class:`CONS_DECOMPINFO`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_21getClassDecompInfo = {"getClassDecompInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_21getClassDecompInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_20getClassDecompInfo};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_21getClassDecompInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassDecompInfo (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 120, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 120, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassDecompInfo", 0) < (0)) __PYX_ERR(7, 120, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassDecompInfo", 1, 1, 1, i); __PYX_ERR(7, 120, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 120, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassDecompInfo", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 120, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getClassDecompInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_20getClassDecompInfo(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_classindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_20getClassDecompInfo(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::CONS_DECOMPINFO __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassDecompInfo", 0);

  /* "src/pygcgopt/partition.pxi":128
 *         :rtype: :class:`CONS_DECOMPINFO`
 *         """
 *         return self.consPartition.getClassDecompInfo(classindex)             # <<<<<<<<<<<<<<
 * 
 *     def getClassNameOfCons(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 128, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->consPartition->getClassDecompInfo(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 128, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyLong_From_gcg_3a__3a_CONS_DECOMPINFO(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":120
 *         return self.consPartition.getAllSubsets(both, only_master, only_pricing)
 * 
 *     def getClassDecompInfo(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the decomposition information of a class
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getClassDecompInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":130
 *         return self.consPartition.getClassDecompInfo(classindex)
 * 
 *     def getClassNameOfCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the name of the class a constraint is assigned to
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_23getClassNameOfCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_22getClassNameOfCons, "ConsPart.getClassNameOfCons(self, Constraint cons)\n\nreturns the name of the class a constraint is assigned to\n\n:param cons: constraint\n:type cons: :class:`Constraint`\n:return: name of the class of the constraint\n:rtype: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_23getClassNameOfCons = {"getClassNameOfCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_23getClassNameOfCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_22getClassNameOfCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_23getClassNameOfCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassNameOfCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 130, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 130, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassNameOfCons", 0) < (0)) __PYX_ERR(7, 130, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassNameOfCons", 1, 1, 1, i); __PYX_ERR(7, 130, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 130, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassNameOfCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 130, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getClassNameOfCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(7, 130, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_22getClassNameOfCons(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_22getClassNameOfCons(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  int __pyx_v_cpp_consindex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  char const *__pyx_t_5;
  Py_ssize_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassNameOfCons", 0);

  /* "src/pygcgopt/partition.pxi":138
 *         :rtype: str
 *         """
 *         cdef int cpp_consindex = self.detProbData.getIndexForCons(cons)             # <<<<<<<<<<<<<<
 *         return self.consPartition.getClassNameOfCons(cpp_consindex).decode('utf-8')
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_cons)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getIndexForCons, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 138, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cpp_consindex = __pyx_t_4;

  /* "src/pygcgopt/partition.pxi":139
 *         """
 *         cdef int cpp_consindex = self.detProbData.getIndexForCons(cons)
 *         return self.consPartition.getClassNameOfCons(cpp_consindex).decode('utf-8')             # <<<<<<<<<<<<<<
 * 
 *     def getClassOfCons(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_5 = __pyx_v_self->consPartition->getClassNameOfCons(__pyx_v_cpp_consindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 139, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_ssize_strlen(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(7, 139, __pyx_L1_error)
  __pyx_t_1 = __Pyx_decode_c_string(__pyx_t_5, 0, __pyx_t_6, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":130
 *         return self.consPartition.getClassDecompInfo(classindex)
 * 
 *     def getClassNameOfCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the name of the class a constraint is assigned to
 * 
*/

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

/* "src/pygcgopt/partition.pxi":141
 *         return self.consPartition.getClassNameOfCons(cpp_consindex).decode('utf-8')
 * 
 *     def getClassOfCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the index of the class a constraint is assigned to
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_25getClassOfCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_24getClassOfCons, "ConsPart.getClassOfCons(self, Constraint cons)\n\nreturns the index of the class a constraint is assigned to\n\n:param cons: constraint\n:type cons: :class:`Constraint`\n:return: classindex of the constraint\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_25getClassOfCons = {"getClassOfCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_25getClassOfCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_24getClassOfCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_25getClassOfCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassOfCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 141, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 141, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassOfCons", 0) < (0)) __PYX_ERR(7, 141, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassOfCons", 1, 1, 1, i); __PYX_ERR(7, 141, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 141, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassOfCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 141, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getClassOfCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(7, 141, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_24getClassOfCons(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_24getClassOfCons(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  int __pyx_v_cpp_consindex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassOfCons", 0);

  /* "src/pygcgopt/partition.pxi":149
 *         :rtype: int
 *         """
 *         cdef int cpp_consindex = self.detProbData.getIndexForCons(cons)             # <<<<<<<<<<<<<<
 *         return self.consPartition.getClassOfCons(cpp_consindex)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_cons)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getIndexForCons, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cpp_consindex = __pyx_t_4;

  /* "src/pygcgopt/partition.pxi":150
 *         """
 *         cdef int cpp_consindex = self.detProbData.getIndexForCons(cons)
 *         return self.consPartition.getClassOfCons(cpp_consindex)             # <<<<<<<<<<<<<<
 * 
 *     def getNConss(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_4 = __pyx_v_self->consPartition->getClassOfCons(__pyx_v_cpp_consindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 150, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":141
 *         return self.consPartition.getClassNameOfCons(cpp_consindex).decode('utf-8')
 * 
 *     def getClassOfCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the index of the class a constraint is assigned to
 * 
*/

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

/* "src/pygcgopt/partition.pxi":152
 *         return self.consPartition.getClassOfCons(cpp_consindex)
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints of the constraint partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_27getNConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_26getNConss, "ConsPart.getNConss(self)\n\nreturns the number of constraints of the constraint partition\n\n:return: number of constraints\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_27getNConss = {"getNConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_27getNConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_26getNConss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_27getNConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNConss", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNConss", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_26getNConss(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_26getNConss(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNConss", 0);

  /* "src/pygcgopt/partition.pxi":158
 *         :rtype: int
 *         """
 *         return self.consPartition.getNConss()             # <<<<<<<<<<<<<<
 * 
 *     def getNConssOfClasses(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->consPartition->getNConss();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 158, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":152
 *         return self.consPartition.getClassOfCons(cpp_consindex)
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints of the constraint partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getNConss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":160
 *         return self.consPartition.getNConss()
 * 
 *     def getNConssOfClasses(self):             # <<<<<<<<<<<<<<
 *         """returns list with the numbers of constraints that are assigned to the classes
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_29getNConssOfClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_28getNConssOfClasses, "ConsPart.getNConssOfClasses(self)\n\nreturns list with the numbers of constraints that are assigned to the classes\n\n:return: list with the numbers of constraints that are assigned to the classes\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_29getNConssOfClasses = {"getNConssOfClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_29getNConssOfClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_28getNConssOfClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_29getNConssOfClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConssOfClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNConssOfClasses", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNConssOfClasses", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_28getNConssOfClasses(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_28getNConssOfClasses(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNConssOfClasses", 0);

  /* "src/pygcgopt/partition.pxi":166
 *         :rtype: list
 *         """
 *         return self.consPartition.getNConssOfClasses()             # <<<<<<<<<<<<<<
 * 
 *     def isConsClassified(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->consPartition->getNConssOfClasses();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 166, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_convert_vector_to_py_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":160
 *         return self.consPartition.getNConss()
 * 
 *     def getNConssOfClasses(self):             # <<<<<<<<<<<<<<
 *         """returns list with the numbers of constraints that are assigned to the classes
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.getNConssOfClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":168
 *         return self.consPartition.getNConssOfClasses()
 * 
 *     def isConsClassified(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns whether a constraint is already assigned to a class
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_31isConsClassified(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_30isConsClassified, "ConsPart.isConsClassified(self, Constraint cons)\n\nreturns whether a constraint is already assigned to a class\n\n:param cons: constraint that should be checked if it is already assigned to a class\n:type cons: :class:`Constraint`\n:return: True iff variable is already assigned to a class\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_31isConsClassified = {"isConsClassified", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_31isConsClassified, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_30isConsClassified};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_31isConsClassified(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isConsClassified (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 168, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 168, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isConsClassified", 0) < (0)) __PYX_ERR(7, 168, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isConsClassified", 1, 1, 1, i); __PYX_ERR(7, 168, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 168, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isConsClassified", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 168, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.isConsClassified", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(7, 168, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_30isConsClassified(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_30isConsClassified(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  int __pyx_v_cpp_consindex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  bool __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isConsClassified", 0);

  /* "src/pygcgopt/partition.pxi":176
 *         :rtype: bool
 *         """
 *         cdef int cpp_consindex = self.detProbData.getIndexForCons(cons)             # <<<<<<<<<<<<<<
 *         return self.consPartition.isConsClassified(cpp_consindex)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_cons)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getIndexForCons, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 176, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 176, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cpp_consindex = __pyx_t_4;

  /* "src/pygcgopt/partition.pxi":177
 *         """
 *         cdef int cpp_consindex = self.detProbData.getIndexForCons(cons)
 *         return self.consPartition.isConsClassified(cpp_consindex)             # <<<<<<<<<<<<<<
 * 
 *     def reduceClasses(self, maxNumberOfClasses):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_5 = __pyx_v_self->consPartition->isConsClassified(__pyx_v_cpp_consindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 177, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":168
 *         return self.consPartition.getNConssOfClasses()
 * 
 *     def isConsClassified(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns whether a constraint is already assigned to a class
 * 
*/

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

/* "src/pygcgopt/partition.pxi":179
 *         return self.consPartition.isConsClassified(cpp_consindex)
 * 
 *     def reduceClasses(self, maxNumberOfClasses):             # <<<<<<<<<<<<<<
 *         """returns constraint partition with reduced number of classes
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_33reduceClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_32reduceClasses, "ConsPart.reduceClasses(self, maxNumberOfClasses)\n\nreturns constraint partition with reduced number of classes\n\n:param maxNumberOfClasses: maximal number of classes that are allowed\n:type maxNumberOfClasses: int\n:return:\n:rtype: :class:`ConsPart`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_33reduceClasses = {"reduceClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_33reduceClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_32reduceClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_33reduceClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_maxNumberOfClasses = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reduceClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_maxNumberOfClasses,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 179, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 179, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "reduceClasses", 0) < (0)) __PYX_ERR(7, 179, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("reduceClasses", 1, 1, 1, i); __PYX_ERR(7, 179, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 179, __pyx_L3_error)
    }
    __pyx_v_maxNumberOfClasses = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reduceClasses", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 179, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.reduceClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_32reduceClasses(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_maxNumberOfClasses);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_32reduceClasses(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_maxNumberOfClasses) {
  gcg::ConsPartition *__pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::ConsPartition *__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("reduceClasses", 0);

  /* "src/pygcgopt/partition.pxi":187
 *         :rtype: :class:`ConsPart`
 *         """
 *         cdef ConsPartition* result = self.consPartition.reduceClasses(maxNumberOfClasses)             # <<<<<<<<<<<<<<
 *         return ConsPart.create(result, self.detProbData)
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_maxNumberOfClasses); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 187, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->consPartition->reduceClasses(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 187, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_2;

  /* "src/pygcgopt/partition.pxi":188
 *         """
 *         cdef ConsPartition* result = self.consPartition.reduceClasses(maxNumberOfClasses)
 *         return ConsPart.create(result, self.detProbData)             # <<<<<<<<<<<<<<
 * 
 *     def setClassDecompInfo(self, classindex, decompInfo):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pygcgopt_3gcg_8ConsPart_create(__pyx_v_result, ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":179
 *         return self.consPartition.isConsClassified(cpp_consindex)
 * 
 *     def reduceClasses(self, maxNumberOfClasses):             # <<<<<<<<<<<<<<
 *         """returns constraint partition with reduced number of classes
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.reduceClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":190
 *         return ConsPart.create(result, self.detProbData)
 * 
 *     def setClassDecompInfo(self, classindex, decompInfo):             # <<<<<<<<<<<<<<
 *         """sets the decomposition information of a class
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_35setClassDecompInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_34setClassDecompInfo, "ConsPart.setClassDecompInfo(self, classindex, decompInfo)\n\nsets the decomposition information of a class\n\n:param classindex: index of the class\n:type classindex: int\n:param decompInfo: decomposition information of the constraint class\n:type decompInfo: :class:`CONS_DECOMPINFO`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_35setClassDecompInfo = {"setClassDecompInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_35setClassDecompInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_34setClassDecompInfo};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_35setClassDecompInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  PyObject *__pyx_v_decompInfo = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setClassDecompInfo (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,&__pyx_mstate_global->__pyx_n_u_decompInfo,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 190, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 190, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 190, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setClassDecompInfo", 0) < (0)) __PYX_ERR(7, 190, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setClassDecompInfo", 1, 2, 2, i); __PYX_ERR(7, 190, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 190, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 190, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
    __pyx_v_decompInfo = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setClassDecompInfo", 1, 2, 2, __pyx_nargs); __PYX_ERR(7, 190, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.setClassDecompInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_34setClassDecompInfo(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v_classindex, __pyx_v_decompInfo);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8ConsPart_34setClassDecompInfo(struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_decompInfo) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::CONS_DECOMPINFO __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setClassDecompInfo", 0);

  /* "src/pygcgopt/partition.pxi":198
 *         :type decompInfo: :class:`CONS_DECOMPINFO`
 *         """
 *         self.consPartition.setClassDecompInfo(classindex, decompInfo)             # <<<<<<<<<<<<<<
 * 
 * cdef class VarPart:
*/
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 198, __pyx_L1_error)
  __pyx_t_2 = ((gcg::CONS_DECOMPINFO)__Pyx_PyLong_As_gcg_3a__3a_CONS_DECOMPINFO(__pyx_v_decompInfo)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 198, __pyx_L1_error)
  try {
    __pyx_v_self->consPartition->setClassDecompInfo(__pyx_t_1, __pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 198, __pyx_L1_error)
  }

  /* "src/pygcgopt/partition.pxi":190
 *         return ConsPart.create(result, self.detProbData)
 * 
 *     def setClassDecompInfo(self, classindex, decompInfo):             # <<<<<<<<<<<<<<
 *         """sets the decomposition information of a class
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.setClassDecompInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_37__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_36__reduce_cython__, "ConsPart.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_37__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_37__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_36__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_37__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_36__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self));

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

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

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.consPartition cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.consPartition cannot be converted to a Python object for pickling"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self_consPartition_cannot_be_con, 0, 0);
  __PYX_ERR(2, 2, __pyx_L1_error)

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

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_39__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8ConsPart_38__setstate_cython__, "ConsPart.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_8ConsPart_39__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_39__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_38__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_8ConsPart_39__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsPart.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8ConsPart_38__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":4
 *     raise TypeError, "self.consPartition cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.consPartition cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self_consPartition_cannot_be_con, 0, 0);
  __PYX_ERR(2, 4, __pyx_L1_error)

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

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

/* "src/pygcgopt/partition.pxi":203
 *     """Base class holding a pointer to corresponding VarPartition"""
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(VarPartition* varPartition, DetProbData detProbData):
 *         if varPartition == NULL:
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_7VarPart_create(gcg::VarPartition *__pyx_v_varPartition, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_detProbData) {
  struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_new_VarPart = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "src/pygcgopt/partition.pxi":205
 *     @staticmethod
 *     cdef create(VarPartition* varPartition, DetProbData detProbData):
 *         if varPartition == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create VarPart with VarPartition* == NULL")
 *         new_VarPart = VarPart()
*/
  __pyx_t_1 = (__pyx_v_varPartition == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/pygcgopt/partition.pxi":206
 *     cdef create(VarPartition* varPartition, DetProbData detProbData):
 *         if varPartition == NULL:
 *             raise Warning("cannot create VarPart with VarPartition* == NULL")             # <<<<<<<<<<<<<<
 *         new_VarPart = VarPart()
 *         new_VarPart.varPartition = varPartition
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_cannot_create_VarPart_with_VarPa};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_Warning)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 206, __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(7, 206, __pyx_L1_error)

    /* "src/pygcgopt/partition.pxi":205
 *     @staticmethod
 *     cdef create(VarPartition* varPartition, DetProbData detProbData):
 *         if varPartition == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create VarPart with VarPartition* == NULL")
 *         new_VarPart = VarPart()
*/
  }

  /* "src/pygcgopt/partition.pxi":207
 *         if varPartition == NULL:
 *             raise Warning("cannot create VarPart with VarPartition* == NULL")
 *         new_VarPart = VarPart()             # <<<<<<<<<<<<<<
 *         new_VarPart.varPartition = varPartition
 *         new_VarPart.detProbData = detProbData
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 207, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __pyx_v_new_VarPart = ((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":208
 *             raise Warning("cannot create VarPart with VarPartition* == NULL")
 *         new_VarPart = VarPart()
 *         new_VarPart.varPartition = varPartition             # <<<<<<<<<<<<<<
 *         new_VarPart.detProbData = detProbData
 *         return new_VarPart
*/
  __pyx_v_new_VarPart->varPartition = __pyx_v_varPartition;

  /* "src/pygcgopt/partition.pxi":209
 *         new_VarPart = VarPart()
 *         new_VarPart.varPartition = varPartition
 *         new_VarPart.detProbData = detProbData             # <<<<<<<<<<<<<<
 *         return new_VarPart
 * 
*/
  __Pyx_INCREF((PyObject *)__pyx_v_detProbData);
  __Pyx_GIVEREF((PyObject *)__pyx_v_detProbData);
  __Pyx_GOTREF((PyObject *)__pyx_v_new_VarPart->detProbData);
  __Pyx_DECREF((PyObject *)__pyx_v_new_VarPart->detProbData);
  __pyx_v_new_VarPart->detProbData = __pyx_v_detProbData;

  /* "src/pygcgopt/partition.pxi":210
 *         new_VarPart.varPartition = varPartition
 *         new_VarPart.detProbData = detProbData
 *         return new_VarPart             # <<<<<<<<<<<<<<
 * 
 *     def getClassDescription(self, classindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_new_VarPart);
  __pyx_r = ((PyObject *)__pyx_v_new_VarPart);
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":203
 *     """Base class holding a pointer to corresponding VarPartition"""
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(VarPartition* varPartition, DetProbData detProbData):
 *         if varPartition == NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_new_VarPart);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":212
 *         return new_VarPart
 * 
 *     def getClassDescription(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the description of the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_1getClassDescription(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_getClassDescription, "VarPart.getClassDescription(self, classindex)\n\nreturns the description of the class corresponding to the classindex\n\n:param classindex: index of the class\n:type classindex: int\n:return: description of the class\n:rtype: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_1getClassDescription = {"getClassDescription", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_1getClassDescription, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_getClassDescription};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_1getClassDescription(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassDescription (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 212, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 212, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassDescription", 0) < (0)) __PYX_ERR(7, 212, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassDescription", 1, 1, 1, i); __PYX_ERR(7, 212, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 212, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassDescription", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 212, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getClassDescription", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_getClassDescription(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_classindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_getClassDescription(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  char const *__pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassDescription", 0);

  /* "src/pygcgopt/partition.pxi":220
 *         :rtype: str
 *         """
 *         return self.varPartition.getClassDescription(classindex).decode('utf-8')             # <<<<<<<<<<<<<<
 * 
 *     def getClassName(self, classindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 220, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->varPartition->getClassDescription(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 220, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_ssize_strlen(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(7, 220, __pyx_L1_error)
  __pyx_t_4 = __Pyx_decode_c_string(__pyx_t_2, 0, __pyx_t_3, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":212
 *         return new_VarPart
 * 
 *     def getClassDescription(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the description of the class corresponding to the classindex
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getClassDescription", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":222
 *         return self.varPartition.getClassDescription(classindex).decode('utf-8')
 * 
 *     def getClassName(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the name of the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_3getClassName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_2getClassName, "VarPart.getClassName(self, classindex)\n\nreturns the name of the class corresponding to the classindex\n\n:param classindex: index of the class\n:type classindex: int\n:return: name of the class\n:rtype: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_3getClassName = {"getClassName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_3getClassName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_2getClassName};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_3getClassName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassName (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 222, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 222, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassName", 0) < (0)) __PYX_ERR(7, 222, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassName", 1, 1, 1, i); __PYX_ERR(7, 222, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 222, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassName", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 222, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getClassName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_2getClassName(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_classindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_2getClassName(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  char const *__pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassName", 0);

  /* "src/pygcgopt/partition.pxi":230
 *         :rtype: str
 *         """
 *         return self.varPartition.getClassName(classindex).decode('utf-8')             # <<<<<<<<<<<<<<
 * 
 *     def getName(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 230, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->varPartition->getClassName(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 230, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_ssize_strlen(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(7, 230, __pyx_L1_error)
  __pyx_t_4 = __Pyx_decode_c_string(__pyx_t_2, 0, __pyx_t_3, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":222
 *         return self.varPartition.getClassDescription(classindex).decode('utf-8')
 * 
 *     def getClassName(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the name of the class corresponding to the classindex
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getClassName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":232
 *         return self.varPartition.getClassName(classindex).decode('utf-8')
 * 
 *     def getName(self):             # <<<<<<<<<<<<<<
 *         """returns the name of the variable partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_5getName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_4getName, "VarPart.getName(self)\n\nreturns the name of the variable partition\n\n:return: name of the constraint partition\n:rtype: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_5getName = {"getName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_5getName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_4getName};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_5getName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getName (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getName", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getName", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_4getName(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_4getName(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  char const *__pyx_t_1;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getName", 0);

  /* "src/pygcgopt/partition.pxi":238
 *         :rtype: str
 *         """
 *         return self.varPartition.getName().decode('utf-8')             # <<<<<<<<<<<<<<
 * 
 *     def getNClasses(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->varPartition->getName();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 238, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_ssize_strlen(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(7, 238, __pyx_L1_error)
  __pyx_t_3 = __Pyx_decode_c_string(__pyx_t_1, 0, __pyx_t_2, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 238, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":232
 *         return self.varPartition.getClassName(classindex).decode('utf-8')
 * 
 *     def getName(self):             # <<<<<<<<<<<<<<
 *         """returns the name of the variable partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":240
 *         return self.varPartition.getName().decode('utf-8')
 * 
 *     def getNClasses(self):             # <<<<<<<<<<<<<<
 *         """returns the number of classes of the variable partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_7getNClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_6getNClasses, "VarPart.getNClasses(self)\n\nreturns the number of classes of the variable partition\n\n:return: number of classes\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_7getNClasses = {"getNClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_7getNClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_6getNClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_7getNClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNClasses", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNClasses", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_6getNClasses(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_6getNClasses(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNClasses", 0);

  /* "src/pygcgopt/partition.pxi":246
 *         :rtype: int
 *         """
 *         return self.varPartition.getNClasses()             # <<<<<<<<<<<<<<
 * 
 *     def removeEmptyClasses(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->varPartition->getNClasses();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 246, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":240
 *         return self.varPartition.getName().decode('utf-8')
 * 
 *     def getNClasses(self):             # <<<<<<<<<<<<<<
 *         """returns the number of classes of the variable partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getNClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":248
 *         return self.varPartition.getNClasses()
 * 
 *     def removeEmptyClasses(self):             # <<<<<<<<<<<<<<
 *         """removes all classes which do not have any assigned indices (classindices may change)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_9removeEmptyClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_8removeEmptyClasses, "VarPart.removeEmptyClasses(self)\n\nremoves all classes which do not have any assigned indices (classindices may change)\n\n:return: number of removed classes\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_9removeEmptyClasses = {"removeEmptyClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_9removeEmptyClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_8removeEmptyClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_9removeEmptyClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("removeEmptyClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("removeEmptyClasses", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("removeEmptyClasses", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_8removeEmptyClasses(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_8removeEmptyClasses(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("removeEmptyClasses", 0);

  /* "src/pygcgopt/partition.pxi":254
 *         :rtype: int
 *         """
 *         return self.varPartition.removeEmptyClasses()             # <<<<<<<<<<<<<<
 * 
 *     def setClassDescription(self, classindex, desc):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->varPartition->removeEmptyClasses();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 254, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":248
 *         return self.varPartition.getNClasses()
 * 
 *     def removeEmptyClasses(self):             # <<<<<<<<<<<<<<
 *         """removes all classes which do not have any assigned indices (classindices may change)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.removeEmptyClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":256
 *         return self.varPartition.removeEmptyClasses()
 * 
 *     def setClassDescription(self, classindex, desc):             # <<<<<<<<<<<<<<
 *         """sets the description of the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_11setClassDescription(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_10setClassDescription, "VarPart.setClassDescription(self, classindex, desc)\n\nsets the description of the class corresponding to the classindex\n\n:param classindex: index of the class\n:type classindex: int\n:param desc: description of the class\n:type desc: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_11setClassDescription = {"setClassDescription", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_11setClassDescription, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_10setClassDescription};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_11setClassDescription(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  PyObject *__pyx_v_desc = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setClassDescription (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,&__pyx_mstate_global->__pyx_n_u_desc,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 256, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 256, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 256, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setClassDescription", 0) < (0)) __PYX_ERR(7, 256, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setClassDescription", 1, 2, 2, i); __PYX_ERR(7, 256, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 256, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 256, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
    __pyx_v_desc = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setClassDescription", 1, 2, 2, __pyx_nargs); __PYX_ERR(7, 256, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.setClassDescription", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_10setClassDescription(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_classindex, __pyx_v_desc);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_10setClassDescription(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_desc) {
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_t_5;
  char const *__pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setClassDescription", 0);

  /* "src/pygcgopt/partition.pxi":264
 *         :type desc: str
 *         """
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 *         self.varPartition.setClassDescription(classindex, c_desc)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_desc};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/partition.pxi":265
 *         """
 *         c_desc = str_conversion(desc)
 *         self.varPartition.setClassDescription(classindex, c_desc)             # <<<<<<<<<<<<<<
 * 
 *     def setClassName(self, classindex, name):
*/
  __pyx_t_5 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 265, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(7, 265, __pyx_L1_error)
  try {
    __pyx_v_self->varPartition->setClassDescription(__pyx_t_5, __pyx_t_6);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 265, __pyx_L1_error)
  }

  /* "src/pygcgopt/partition.pxi":256
 *         return self.varPartition.removeEmptyClasses()
 * 
 *     def setClassDescription(self, classindex, desc):             # <<<<<<<<<<<<<<
 *         """sets the description of the class corresponding to the classindex
 * 
*/

  /* 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("pygcgopt.gcg.VarPart.setClassDescription", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":267
 *         self.varPartition.setClassDescription(classindex, c_desc)
 * 
 *     def setClassName(self, classindex, name):             # <<<<<<<<<<<<<<
 *         """sets the name of the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_13setClassName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_12setClassName, "VarPart.setClassName(self, classindex, name)\n\nsets the name of the class corresponding to the classindex\n\n:param classindex: index of the class\n:type classindex: int\n:param name: name of the class\n:type name: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_13setClassName = {"setClassName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_13setClassName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_12setClassName};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_13setClassName(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  PyObject *__pyx_v_name = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setClassName (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,&__pyx_mstate_global->__pyx_n_u_name,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 267, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 267, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 267, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setClassName", 0) < (0)) __PYX_ERR(7, 267, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setClassName", 1, 2, 2, i); __PYX_ERR(7, 267, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 267, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 267, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
    __pyx_v_name = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setClassName", 1, 2, 2, __pyx_nargs); __PYX_ERR(7, 267, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.setClassName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_12setClassName(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_classindex, __pyx_v_name);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_12setClassName(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_c_name = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_t_5;
  char const *__pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setClassName", 0);

  /* "src/pygcgopt/partition.pxi":275
 *         :type name: str
 *         """
 *         c_name = str_conversion(name)             # <<<<<<<<<<<<<<
 *         self.varPartition.setClassName(classindex, c_name)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_name};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 275, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_name = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/partition.pxi":276
 *         """
 *         c_name = str_conversion(name)
 *         self.varPartition.setClassName(classindex, c_name)             # <<<<<<<<<<<<<<
 * 
 *     def addClass(self, name, desc, decompInfo):
*/
  __pyx_t_5 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 276, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_name); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(7, 276, __pyx_L1_error)
  try {
    __pyx_v_self->varPartition->setClassName(__pyx_t_5, __pyx_t_6);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 276, __pyx_L1_error)
  }

  /* "src/pygcgopt/partition.pxi":267
 *         self.varPartition.setClassDescription(classindex, c_desc)
 * 
 *     def setClassName(self, classindex, name):             # <<<<<<<<<<<<<<
 *         """sets the name of the class corresponding to the classindex
 * 
*/

  /* 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("pygcgopt.gcg.VarPart.setClassName", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":278
 *         self.varPartition.setClassName(classindex, c_name)
 * 
 *     def addClass(self, name, desc, decompInfo):             # <<<<<<<<<<<<<<
 *         """adds a new class to the variable partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_15addClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_14addClass, "VarPart.addClass(self, name, desc, decompInfo)\n\nadds a new class to the variable partition\n\n:param name: name of the class\n:type name: str\n:param desc: description of the class\n:type desc: str\n:param decompInfo: decomposition information of the variable class\n:type decompInfo: :class:`VAR_DECOMPINFO`\n:return: index of the added class\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_15addClass = {"addClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_15addClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_14addClass};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_15addClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_desc = 0;
  PyObject *__pyx_v_decompInfo = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addClass (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_name,&__pyx_mstate_global->__pyx_n_u_desc,&__pyx_mstate_global->__pyx_n_u_decompInfo,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 278, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 278, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 278, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 278, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addClass", 0) < (0)) __PYX_ERR(7, 278, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addClass", 1, 3, 3, i); __PYX_ERR(7, 278, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 278, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 278, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 278, __pyx_L3_error)
    }
    __pyx_v_name = values[0];
    __pyx_v_desc = values[1];
    __pyx_v_decompInfo = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addClass", 1, 3, 3, __pyx_nargs); __PYX_ERR(7, 278, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.addClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_14addClass(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_name, __pyx_v_desc, __pyx_v_decompInfo);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_14addClass(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_desc, PyObject *__pyx_v_decompInfo) {
  PyObject *__pyx_v_c_name = NULL;
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char const *__pyx_t_5;
  char const *__pyx_t_6;
  gcg::VAR_DECOMPINFO __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addClass", 0);

  /* "src/pygcgopt/partition.pxi":290
 *         :rtype: int
 *         """
 *         c_name = str_conversion(name)             # <<<<<<<<<<<<<<
 *         c_desc = str_conversion(desc)
 *         return self.varPartition.addClass(c_name, c_desc, decompInfo)
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_name};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_name = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/partition.pxi":291
 *         """
 *         c_name = str_conversion(name)
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 *         return self.varPartition.addClass(c_name, c_desc, decompInfo)
 * 
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_desc};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 291, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/partition.pxi":292
 *         c_name = str_conversion(name)
 *         c_desc = str_conversion(desc)
 *         return self.varPartition.addClass(c_name, c_desc, decompInfo)             # <<<<<<<<<<<<<<
 * 
 *     def assignVarToClass(self, Variable var, classindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_c_name); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(7, 292, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(7, 292, __pyx_L1_error)
  __pyx_t_7 = ((gcg::VAR_DECOMPINFO)__Pyx_PyLong_As_gcg_3a__3a_VAR_DECOMPINFO(__pyx_v_decompInfo)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 292, __pyx_L1_error)
  try {
    __pyx_t_8 = __pyx_v_self->varPartition->addClass(__pyx_t_5, __pyx_t_6, __pyx_t_7);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 292, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":278
 *         self.varPartition.setClassName(classindex, c_name)
 * 
 *     def addClass(self, name, desc, decompInfo):             # <<<<<<<<<<<<<<
 *         """adds a new class to the variable partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.addClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_name);
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":294
 *         return self.varPartition.addClass(c_name, c_desc, decompInfo)
 * 
 *     def assignVarToClass(self, Variable var, classindex):             # <<<<<<<<<<<<<<
 *         """assigns a variable to the class corresponding to the classindex
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_17assignVarToClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_16assignVarToClass, "VarPart.assignVarToClass(self, Variable var, classindex)\n\nassigns a variable to the class corresponding to the classindex\n\n:param var: variable that should be assigned to a class\n:type var: :class:`Variable`\n:param classindex: index of the class\n:type classindex: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_17assignVarToClass = {"assignVarToClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_17assignVarToClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_16assignVarToClass};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_17assignVarToClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  PyObject *__pyx_v_classindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("assignVarToClass (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,&__pyx_mstate_global->__pyx_n_u_classindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 294, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 294, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 294, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "assignVarToClass", 0) < (0)) __PYX_ERR(7, 294, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("assignVarToClass", 1, 2, 2, i); __PYX_ERR(7, 294, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 294, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 294, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
    __pyx_v_classindex = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("assignVarToClass", 1, 2, 2, __pyx_nargs); __PYX_ERR(7, 294, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.assignVarToClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(7, 294, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_16assignVarToClass(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_var, __pyx_v_classindex);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_16assignVarToClass(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, PyObject *__pyx_v_classindex) {
  int __pyx_v_cpp_varindex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("assignVarToClass", 0);

  /* "src/pygcgopt/partition.pxi":302
 *         :type classindex: int
 *         """
 *         cdef int cpp_varindex = self.detProbData.getIndexForVar(var)             # <<<<<<<<<<<<<<
 *         self.varPartition.assignVarToClass(cpp_varindex, classindex)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_var)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getIndexForVar, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 302, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cpp_varindex = __pyx_t_4;

  /* "src/pygcgopt/partition.pxi":303
 *         """
 *         cdef int cpp_varindex = self.detProbData.getIndexForVar(var)
 *         self.varPartition.assignVarToClass(cpp_varindex, classindex)             # <<<<<<<<<<<<<<
 * 
 *     def getAllSubsets(self, all, linking, master, block):
*/
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 303, __pyx_L1_error)
  try {
    __pyx_v_self->varPartition->assignVarToClass(__pyx_v_cpp_varindex, __pyx_t_4);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 303, __pyx_L1_error)
  }

  /* "src/pygcgopt/partition.pxi":294
 *         return self.varPartition.addClass(c_name, c_desc, decompInfo)
 * 
 *     def assignVarToClass(self, Variable var, classindex):             # <<<<<<<<<<<<<<
 *         """assigns a variable to the class corresponding to the classindex
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.assignVarToClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":305
 *         self.varPartition.assignVarToClass(cpp_varindex, classindex)
 * 
 *     def getAllSubsets(self, all, linking, master, block):             # <<<<<<<<<<<<<<
 *         """returns a list containing all possible subsets of the chosen classindices
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_19getAllSubsets(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_18getAllSubsets, "VarPart.getAllSubsets(self, all, linking, master, block)\n\nreturns a list containing all possible subsets of the chosen classindices\n\n:param all: True iff PY_ALL classes should be considered\n:type all: bool\n:param linking: True iff PY_LINKING classes should be considered\n:type linking: bool\n:param master: True iff PY_MASTER classes should be considered\n:type master: bool\n:param block: True iff PY_BLOCK classes should be considered\n:type block: bool\n:return: list of lists containing all possible subsets of the chosen classindices\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_19getAllSubsets = {"getAllSubsets", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_19getAllSubsets, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_18getAllSubsets};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_19getAllSubsets(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_all = 0;
  PyObject *__pyx_v_linking = 0;
  PyObject *__pyx_v_master = 0;
  PyObject *__pyx_v_block = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getAllSubsets (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_all,&__pyx_mstate_global->__pyx_n_u_linking,&__pyx_mstate_global->__pyx_n_u_master,&__pyx_mstate_global->__pyx_n_u_block,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 305, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(7, 305, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 305, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 305, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 305, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getAllSubsets", 0) < (0)) __PYX_ERR(7, 305, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getAllSubsets", 1, 4, 4, i); __PYX_ERR(7, 305, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 305, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 305, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 305, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(7, 305, __pyx_L3_error)
    }
    __pyx_v_all = values[0];
    __pyx_v_linking = values[1];
    __pyx_v_master = values[2];
    __pyx_v_block = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getAllSubsets", 1, 4, 4, __pyx_nargs); __PYX_ERR(7, 305, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getAllSubsets", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_18getAllSubsets(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_all, __pyx_v_linking, __pyx_v_master, __pyx_v_block);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_18getAllSubsets(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_all, PyObject *__pyx_v_linking, PyObject *__pyx_v_master, PyObject *__pyx_v_block) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  bool __pyx_t_2;
  bool __pyx_t_3;
  bool __pyx_t_4;
  std::vector<std::vector<int> >  __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getAllSubsets", 0);

  /* "src/pygcgopt/partition.pxi":319
 *         :rtype: list
 *         """
 *         return self.varPartition.getAllSubsets(all, linking, master, block)             # <<<<<<<<<<<<<<
 * 
 *     def getClassDecompInfo(self, classindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_all); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(7, 319, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_linking); if (unlikely((__pyx_t_2 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(7, 319, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_master); if (unlikely((__pyx_t_3 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(7, 319, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_block); if (unlikely((__pyx_t_4 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(7, 319, __pyx_L1_error)
  try {
    __pyx_t_5 = __pyx_v_self->varPartition->getAllSubsets(__pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 319, __pyx_L1_error)
  }
  __pyx_t_6 = __pyx_convert_vector_to_py_std_3a__3a_vector_3c_int_3e___(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":305
 *         self.varPartition.assignVarToClass(cpp_varindex, classindex)
 * 
 *     def getAllSubsets(self, all, linking, master, block):             # <<<<<<<<<<<<<<
 *         """returns a list containing all possible subsets of the chosen classindices
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getAllSubsets", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":321
 *         return self.varPartition.getAllSubsets(all, linking, master, block)
 * 
 *     def getClassDecompInfo(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the decomposition information of a class
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_21getClassDecompInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_20getClassDecompInfo, "VarPart.getClassDecompInfo(self, classindex)\n\nreturns the decomposition information of a class\n\n:param classindex: index of the class\n:type classindex: int\n:return: decomposition information of the variable class\n:rtype: :class:`VAR_DECOMPINFO`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_21getClassDecompInfo = {"getClassDecompInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_21getClassDecompInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_20getClassDecompInfo};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_21getClassDecompInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassDecompInfo (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 321, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 321, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassDecompInfo", 0) < (0)) __PYX_ERR(7, 321, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassDecompInfo", 1, 1, 1, i); __PYX_ERR(7, 321, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 321, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassDecompInfo", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 321, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getClassDecompInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_20getClassDecompInfo(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_classindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_20getClassDecompInfo(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::VAR_DECOMPINFO __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassDecompInfo", 0);

  /* "src/pygcgopt/partition.pxi":329
 *         :rtype: :class:`VAR_DECOMPINFO`
 *         """
 *         return self.varPartition.getClassDecompInfo(classindex)             # <<<<<<<<<<<<<<
 * 
 *     def getClassNameOfVar(self, Variable var):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 329, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->varPartition->getClassDecompInfo(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 329, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyLong_From_gcg_3a__3a_VAR_DECOMPINFO(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":321
 *         return self.varPartition.getAllSubsets(all, linking, master, block)
 * 
 *     def getClassDecompInfo(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the decomposition information of a class
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getClassDecompInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":331
 *         return self.varPartition.getClassDecompInfo(classindex)
 * 
 *     def getClassNameOfVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the name of the class a variable is assigned to
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_23getClassNameOfVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_22getClassNameOfVar, "VarPart.getClassNameOfVar(self, Variable var)\n\nreturns the name of the class a variable is assigned to\n\n:param var: variable\n:type var: :class:`Variable`\n:return: name of the class of the variable\n:rtype: str");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_23getClassNameOfVar = {"getClassNameOfVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_23getClassNameOfVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_22getClassNameOfVar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_23getClassNameOfVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassNameOfVar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 331, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 331, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassNameOfVar", 0) < (0)) __PYX_ERR(7, 331, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassNameOfVar", 1, 1, 1, i); __PYX_ERR(7, 331, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 331, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassNameOfVar", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 331, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getClassNameOfVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(7, 331, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_22getClassNameOfVar(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_22getClassNameOfVar(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  int __pyx_v_cpp_varindex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  char const *__pyx_t_5;
  Py_ssize_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassNameOfVar", 0);

  /* "src/pygcgopt/partition.pxi":339
 *         :rtype: str
 *         """
 *         cdef int cpp_varindex = self.detProbData.getIndexForVar(var)             # <<<<<<<<<<<<<<
 *         return self.varPartition.getClassNameOfVar(cpp_varindex).decode('utf-8')
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_var)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getIndexForVar, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 339, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cpp_varindex = __pyx_t_4;

  /* "src/pygcgopt/partition.pxi":340
 *         """
 *         cdef int cpp_varindex = self.detProbData.getIndexForVar(var)
 *         return self.varPartition.getClassNameOfVar(cpp_varindex).decode('utf-8')             # <<<<<<<<<<<<<<
 * 
 *     def getClassOfVar(self, Variable var):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_5 = __pyx_v_self->varPartition->getClassNameOfVar(__pyx_v_cpp_varindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 340, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_ssize_strlen(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(7, 340, __pyx_L1_error)
  __pyx_t_1 = __Pyx_decode_c_string(__pyx_t_5, 0, __pyx_t_6, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":331
 *         return self.varPartition.getClassDecompInfo(classindex)
 * 
 *     def getClassNameOfVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the name of the class a variable is assigned to
 * 
*/

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

/* "src/pygcgopt/partition.pxi":342
 *         return self.varPartition.getClassNameOfVar(cpp_varindex).decode('utf-8')
 * 
 *     def getClassOfVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the index of the class a variable is assigned to
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_25getClassOfVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_24getClassOfVar, "VarPart.getClassOfVar(self, Variable var)\n\nreturns the index of the class a variable is assigned to\n\n:param var: variable\n:type var: :class:`Variable`\n:return: classindex of the variable\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_25getClassOfVar = {"getClassOfVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_25getClassOfVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_24getClassOfVar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_25getClassOfVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getClassOfVar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 342, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 342, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getClassOfVar", 0) < (0)) __PYX_ERR(7, 342, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getClassOfVar", 1, 1, 1, i); __PYX_ERR(7, 342, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 342, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getClassOfVar", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 342, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getClassOfVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(7, 342, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_24getClassOfVar(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_24getClassOfVar(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  int __pyx_v_cpp_varindex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getClassOfVar", 0);

  /* "src/pygcgopt/partition.pxi":350
 *         :rtype: int
 *         """
 *         cdef int cpp_varindex = self.detProbData.getIndexForVar(var)             # <<<<<<<<<<<<<<
 *         return self.varPartition.getClassOfVar(cpp_varindex)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_var)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getIndexForVar, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 350, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cpp_varindex = __pyx_t_4;

  /* "src/pygcgopt/partition.pxi":351
 *         """
 *         cdef int cpp_varindex = self.detProbData.getIndexForVar(var)
 *         return self.varPartition.getClassOfVar(cpp_varindex)             # <<<<<<<<<<<<<<
 * 
 *     def getNVars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_4 = __pyx_v_self->varPartition->getClassOfVar(__pyx_v_cpp_varindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 351, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":342
 *         return self.varPartition.getClassNameOfVar(cpp_varindex).decode('utf-8')
 * 
 *     def getClassOfVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the index of the class a variable is assigned to
 * 
*/

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

/* "src/pygcgopt/partition.pxi":353
 *         return self.varPartition.getClassOfVar(cpp_varindex)
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """returns the number of variables of the variable partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_27getNVars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_26getNVars, "VarPart.getNVars(self)\n\nreturns the number of variables of the variable partition\n\n:return: number of variables\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_27getNVars = {"getNVars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_27getNVars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_26getNVars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_27getNVars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNVars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNVars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_26getNVars(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_26getNVars(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNVars", 0);

  /* "src/pygcgopt/partition.pxi":359
 *         :rtype: int
 *         """
 *         return self.varPartition.getNVars()             # <<<<<<<<<<<<<<
 * 
 *     def getNVarsOfClasses(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->varPartition->getNVars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 359, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":353
 *         return self.varPartition.getClassOfVar(cpp_varindex)
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """returns the number of variables of the variable partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getNVars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":361
 *         return self.varPartition.getNVars()
 * 
 *     def getNVarsOfClasses(self):             # <<<<<<<<<<<<<<
 *         """returns list with the numbers of variables that are assigned to the classes
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_29getNVarsOfClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_28getNVarsOfClasses, "VarPart.getNVarsOfClasses(self)\n\nreturns list with the numbers of variables that are assigned to the classes\n\n:return: list with the numbers of variables that are assigned to the classes\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_29getNVarsOfClasses = {"getNVarsOfClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_29getNVarsOfClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_28getNVarsOfClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_29getNVarsOfClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVarsOfClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNVarsOfClasses", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNVarsOfClasses", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_28getNVarsOfClasses(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_28getNVarsOfClasses(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNVarsOfClasses", 0);

  /* "src/pygcgopt/partition.pxi":367
 *         :rtype: list
 *         """
 *         return self.varPartition.getNVarsOfClasses()             # <<<<<<<<<<<<<<
 * 
 *     def isVarClassified(self, Variable var):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->varPartition->getNVarsOfClasses();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 367, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_convert_vector_to_py_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":361
 *         return self.varPartition.getNVars()
 * 
 *     def getNVarsOfClasses(self):             # <<<<<<<<<<<<<<
 *         """returns list with the numbers of variables that are assigned to the classes
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.getNVarsOfClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":369
 *         return self.varPartition.getNVarsOfClasses()
 * 
 *     def isVarClassified(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns whether a variable is already assigned to a class
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_31isVarClassified(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_30isVarClassified, "VarPart.isVarClassified(self, Variable var)\n\nreturns whether a variable is already assigned to a class\n\n:param var: variable that should be checked if it is already assigned to a class\n:type var: :class:`Variable`\n:return: True iff variable is already assigned to a class\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_31isVarClassified = {"isVarClassified", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_31isVarClassified, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_30isVarClassified};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_31isVarClassified(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isVarClassified (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 369, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 369, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isVarClassified", 0) < (0)) __PYX_ERR(7, 369, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isVarClassified", 1, 1, 1, i); __PYX_ERR(7, 369, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 369, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isVarClassified", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 369, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.isVarClassified", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(7, 369, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_30isVarClassified(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_30isVarClassified(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  int __pyx_v_cpp_varindex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  bool __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isVarClassified", 0);

  /* "src/pygcgopt/partition.pxi":377
 *         :rtype: bool
 *         """
 *         cdef int cpp_varindex = self.detProbData.getIndexForVar(var)             # <<<<<<<<<<<<<<
 *         return self.varPartition.isVarClassified(cpp_varindex)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_var)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getIndexForVar, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 377, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cpp_varindex = __pyx_t_4;

  /* "src/pygcgopt/partition.pxi":378
 *         """
 *         cdef int cpp_varindex = self.detProbData.getIndexForVar(var)
 *         return self.varPartition.isVarClassified(cpp_varindex)             # <<<<<<<<<<<<<<
 * 
 *     def reduceClasses(self, maxNumberOfClasses):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_5 = __pyx_v_self->varPartition->isVarClassified(__pyx_v_cpp_varindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 378, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":369
 *         return self.varPartition.getNVarsOfClasses()
 * 
 *     def isVarClassified(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns whether a variable is already assigned to a class
 * 
*/

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

/* "src/pygcgopt/partition.pxi":380
 *         return self.varPartition.isVarClassified(cpp_varindex)
 * 
 *     def reduceClasses(self, maxNumberOfClasses):             # <<<<<<<<<<<<<<
 *         """returns variable partition with reduced number of classes
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_33reduceClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_32reduceClasses, "VarPart.reduceClasses(self, maxNumberOfClasses)\n\nreturns variable partition with reduced number of classes\n\n:param maxNumberOfClasses: maximal number of classes that are allowed\n:type maxNumberOfClasses: int\n:return:\n:rtype: :class:`VarPart`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_33reduceClasses = {"reduceClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_33reduceClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_32reduceClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_33reduceClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_maxNumberOfClasses = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reduceClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_maxNumberOfClasses,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 380, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 380, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "reduceClasses", 0) < (0)) __PYX_ERR(7, 380, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("reduceClasses", 1, 1, 1, i); __PYX_ERR(7, 380, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 380, __pyx_L3_error)
    }
    __pyx_v_maxNumberOfClasses = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reduceClasses", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 380, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.reduceClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_32reduceClasses(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_maxNumberOfClasses);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_32reduceClasses(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_maxNumberOfClasses) {
  gcg::VarPartition *__pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::VarPartition *__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("reduceClasses", 0);

  /* "src/pygcgopt/partition.pxi":388
 *         :rtype: :class:`VarPart`
 *         """
 *         cdef VarPartition* result = self.varPartition.reduceClasses(maxNumberOfClasses)             # <<<<<<<<<<<<<<
 *         return VarPart.create(result, self.detProbData)
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_maxNumberOfClasses); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 388, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->varPartition->reduceClasses(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 388, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_2;

  /* "src/pygcgopt/partition.pxi":389
 *         """
 *         cdef VarPartition* result = self.varPartition.reduceClasses(maxNumberOfClasses)
 *         return VarPart.create(result, self.detProbData)             # <<<<<<<<<<<<<<
 * 
 *     def setClassDecompInfo(self, classindex, decompInfo):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = ((PyObject *)__pyx_v_self->detProbData);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pygcgopt_3gcg_7VarPart_create(__pyx_v_result, ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/partition.pxi":380
 *         return self.varPartition.isVarClassified(cpp_varindex)
 * 
 *     def reduceClasses(self, maxNumberOfClasses):             # <<<<<<<<<<<<<<
 *         """returns variable partition with reduced number of classes
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.reduceClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/partition.pxi":391
 *         return VarPart.create(result, self.detProbData)
 * 
 *     def setClassDecompInfo(self, classindex, decompInfo):             # <<<<<<<<<<<<<<
 *         """sets the decomposition information of a class
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_35setClassDecompInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_34setClassDecompInfo, "VarPart.setClassDecompInfo(self, classindex, decompInfo)\n\nsets the decomposition information of a class\n\n:param classindex: index of the class\n:type classindex: int\n:param decompInfo: decomposition information of the variable class\n:type decompInfo: :class:`VAR_DECOMPINFO`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_35setClassDecompInfo = {"setClassDecompInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_35setClassDecompInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_34setClassDecompInfo};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_35setClassDecompInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_classindex = 0;
  PyObject *__pyx_v_decompInfo = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setClassDecompInfo (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classindex,&__pyx_mstate_global->__pyx_n_u_decompInfo,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 391, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 391, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 391, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setClassDecompInfo", 0) < (0)) __PYX_ERR(7, 391, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setClassDecompInfo", 1, 2, 2, i); __PYX_ERR(7, 391, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 391, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 391, __pyx_L3_error)
    }
    __pyx_v_classindex = values[0];
    __pyx_v_decompInfo = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setClassDecompInfo", 1, 2, 2, __pyx_nargs); __PYX_ERR(7, 391, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.setClassDecompInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_34setClassDecompInfo(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v_classindex, __pyx_v_decompInfo);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_7VarPart_34setClassDecompInfo(struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_self, PyObject *__pyx_v_classindex, PyObject *__pyx_v_decompInfo) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::VAR_DECOMPINFO __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setClassDecompInfo", 0);

  /* "src/pygcgopt/partition.pxi":399
 *         :type decompInfo: :class:`VAR_DECOMPINFO`
 *         """
 *         self.varPartition.setClassDecompInfo(classindex, decompInfo)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_classindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 399, __pyx_L1_error)
  __pyx_t_2 = ((gcg::VAR_DECOMPINFO)__Pyx_PyLong_As_gcg_3a__3a_VAR_DECOMPINFO(__pyx_v_decompInfo)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 399, __pyx_L1_error)
  try {
    __pyx_v_self->varPartition->setClassDecompInfo(__pyx_t_1, __pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(7, 399, __pyx_L1_error)
  }

  /* "src/pygcgopt/partition.pxi":391
 *         return VarPart.create(result, self.detProbData)
 * 
 *     def setClassDecompInfo(self, classindex, decompInfo):             # <<<<<<<<<<<<<<
 *         """sets the decomposition information of a class
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.setClassDecompInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_37__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_36__reduce_cython__, "VarPart.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_37__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_37__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_36__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_37__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_36__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self));

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

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

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.varPartition cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.varPartition cannot be converted to a Python object for pickling"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self_varPartition_cannot_be_conv, 0, 0);
  __PYX_ERR(2, 2, __pyx_L1_error)

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

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_39__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_7VarPart_38__setstate_cython__, "VarPart.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7VarPart_39__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_39__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_38__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7VarPart_39__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarPart.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_7VarPart_38__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":4
 *     raise TypeError, "self.varPartition cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.varPartition cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self_varPartition_cannot_be_conv, 0, 0);
  __PYX_ERR(2, 4, __pyx_L1_error)

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

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

/* "src/pygcgopt/decomposition.pxi":16
 *     cdef list py_block_id_map
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.thisptr = NULL
 *         self.delete_thisptr = True
*/

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition___cinit__(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition___cinit__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_r;

  /* "src/pygcgopt/decomposition.pxi":17
 * 
 *     def __cinit__(self):
 *         self.thisptr = NULL             # <<<<<<<<<<<<<<
 *         self.delete_thisptr = True
 * 
*/
  __pyx_v_self->thisptr = NULL;

  /* "src/pygcgopt/decomposition.pxi":18
 *     def __cinit__(self):
 *         self.thisptr = NULL
 *         self.delete_thisptr = True             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __pyx_v_self->delete_thisptr = 1;

  /* "src/pygcgopt/decomposition.pxi":16
 *     cdef list py_block_id_map
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.thisptr = NULL
 *         self.delete_thisptr = True
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":20
 *         self.delete_thisptr = True
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if self.delete_thisptr and self.thisptr != NULL:
 *             del self.thisptr
*/

/* Python wrapper */
static void __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_2__dealloc__(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static void __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_2__dealloc__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_t_1;
  int __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":21
 * 
 *     def __dealloc__(self):
 *         if self.delete_thisptr and self.thisptr != NULL:             # <<<<<<<<<<<<<<
 *             del self.thisptr
 * 
*/
  __pyx_t_2 = (__pyx_v_self->delete_thisptr != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->thisptr != NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "src/pygcgopt/decomposition.pxi":22
 *     def __dealloc__(self):
 *         if self.delete_thisptr and self.thisptr != NULL:
 *             del self.thisptr             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
    delete __pyx_v_self->thisptr;

    /* "src/pygcgopt/decomposition.pxi":21
 * 
 *     def __dealloc__(self):
 *         if self.delete_thisptr and self.thisptr != NULL:             # <<<<<<<<<<<<<<
 *             del self.thisptr
 * 
*/
  }

  /* "src/pygcgopt/decomposition.pxi":20
 *         self.delete_thisptr = True
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if self.delete_thisptr and self.thisptr != NULL:
 *             del self.thisptr
*/

  /* function exit code */
}

/* "src/pygcgopt/decomposition.pxi":24
 *             del self.thisptr
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(PARTIALDECOMP* thisptr):
 *         if thisptr == NULL:
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(gcg::PARTIALDECOMP *__pyx_v_thisptr) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_new_PartialDecomposition = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "src/pygcgopt/decomposition.pxi":26
 *     @staticmethod
 *     cdef create(PARTIALDECOMP* thisptr):
 *         if thisptr == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create PartialDecomposition with PARTIALDECOMP* == NULL")
 *         new_PartialDecomposition = PartialDecomposition()
*/
  __pyx_t_1 = (__pyx_v_thisptr == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/pygcgopt/decomposition.pxi":27
 *     cdef create(PARTIALDECOMP* thisptr):
 *         if thisptr == NULL:
 *             raise Warning("cannot create PartialDecomposition with PARTIALDECOMP* == NULL")             # <<<<<<<<<<<<<<
 *         new_PartialDecomposition = PartialDecomposition()
 *         new_PartialDecomposition.thisptr = thisptr
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_cannot_create_PartialDecompositi};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_Warning)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 27, __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(8, 27, __pyx_L1_error)

    /* "src/pygcgopt/decomposition.pxi":26
 *     @staticmethod
 *     cdef create(PARTIALDECOMP* thisptr):
 *         if thisptr == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create PartialDecomposition with PARTIALDECOMP* == NULL")
 *         new_PartialDecomposition = PartialDecomposition()
*/
  }

  /* "src/pygcgopt/decomposition.pxi":28
 *         if thisptr == NULL:
 *             raise Warning("cannot create PartialDecomposition with PARTIALDECOMP* == NULL")
 *         new_PartialDecomposition = PartialDecomposition()             # <<<<<<<<<<<<<<
 *         new_PartialDecomposition.thisptr = thisptr
 *         new_PartialDecomposition._visualizations = {}
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 28, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __pyx_v_new_PartialDecomposition = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":29
 *             raise Warning("cannot create PartialDecomposition with PARTIALDECOMP* == NULL")
 *         new_PartialDecomposition = PartialDecomposition()
 *         new_PartialDecomposition.thisptr = thisptr             # <<<<<<<<<<<<<<
 *         new_PartialDecomposition._visualizations = {}
 *         new_PartialDecomposition.py_block_id_map = []
*/
  __pyx_v_new_PartialDecomposition->thisptr = __pyx_v_thisptr;

  /* "src/pygcgopt/decomposition.pxi":30
 *         new_PartialDecomposition = PartialDecomposition()
 *         new_PartialDecomposition.thisptr = thisptr
 *         new_PartialDecomposition._visualizations = {}             # <<<<<<<<<<<<<<
 *         new_PartialDecomposition.py_block_id_map = []
 *         new_PartialDecomposition.delete_thisptr = False
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_new_PartialDecomposition->_visualizations);
  __Pyx_DECREF(__pyx_v_new_PartialDecomposition->_visualizations);
  __pyx_v_new_PartialDecomposition->_visualizations = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":31
 *         new_PartialDecomposition.thisptr = thisptr
 *         new_PartialDecomposition._visualizations = {}
 *         new_PartialDecomposition.py_block_id_map = []             # <<<<<<<<<<<<<<
 *         new_PartialDecomposition.delete_thisptr = False
 *         return new_PartialDecomposition
*/
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_new_PartialDecomposition->py_block_id_map);
  __Pyx_DECREF(__pyx_v_new_PartialDecomposition->py_block_id_map);
  __pyx_v_new_PartialDecomposition->py_block_id_map = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":32
 *         new_PartialDecomposition._visualizations = {}
 *         new_PartialDecomposition.py_block_id_map = []
 *         new_PartialDecomposition.delete_thisptr = False             # <<<<<<<<<<<<<<
 *         return new_PartialDecomposition
 * 
*/
  __pyx_v_new_PartialDecomposition->delete_thisptr = 0;

  /* "src/pygcgopt/decomposition.pxi":33
 *         new_PartialDecomposition.py_block_id_map = []
 *         new_PartialDecomposition.delete_thisptr = False
 *         return new_PartialDecomposition             # <<<<<<<<<<<<<<
 * 
 *     def __copy__(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_new_PartialDecomposition);
  __pyx_r = ((PyObject *)__pyx_v_new_PartialDecomposition);
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":24
 *             del self.thisptr
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(PARTIALDECOMP* thisptr):
 *         if thisptr == NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_new_PartialDecomposition);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":35
 *         return new_PartialDecomposition
 * 
 *     def __copy__(self):             # <<<<<<<<<<<<<<
 *         return PartialDecomposition.create(new PARTIALDECOMP(self.thisptr))
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_5__copy__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_4__copy__, "PartialDecomposition.__copy__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_5__copy__ = {"__copy__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_5__copy__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_4__copy__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_5__copy__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__copy__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__copy__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__copy__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_4__copy__(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_4__copy__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__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("__copy__", 0);

  /* "src/pygcgopt/decomposition.pxi":36
 * 
 *     def __copy__(self):
 *         return PartialDecomposition.create(new PARTIALDECOMP(self.thisptr))             # <<<<<<<<<<<<<<
 * 
 *     def copy(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(new gcg::PARTIALDECOMP(__pyx_v_self->thisptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":35
 *         return new_PartialDecomposition
 * 
 *     def __copy__(self):             # <<<<<<<<<<<<<<
 *         return PartialDecomposition.create(new PARTIALDECOMP(self.thisptr))
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":38
 *         return PartialDecomposition.create(new PARTIALDECOMP(self.thisptr))
 * 
 *     def copy(self):             # <<<<<<<<<<<<<<
 *         return copy(self)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_7copy(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_6copy, "PartialDecomposition.copy(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_7copy = {"copy", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_7copy, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_6copy};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_7copy(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("copy (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("copy", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("copy", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_6copy(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_6copy(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("copy", 0);

  /* "src/pygcgopt/decomposition.pxi":39
 * 
 *     def copy(self):
 *         return copy(self)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 39, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":38
 *         return PartialDecomposition.create(new PARTIALDECOMP(self.thisptr))
 * 
 *     def copy(self):             # <<<<<<<<<<<<<<
 *         return copy(self)
 * 
*/

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

/* "src/pygcgopt/decomposition.pxi":41
 *         return copy(self)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def isSelected(self):
 *         """gets whether the partialdec is currently selected in explore menue
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_10isSelected___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":47
 *         :return: True iff the partialdec is currently selected in explore menue.
 *         """
 *         cdef bool result = self.thisptr.isSelected()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->isSelected();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 47, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":48
 *         """
 *         cdef bool result = self.thisptr.isSelected()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     @isSelected.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":41
 *         return copy(self)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def isSelected(self):
 *         """gets whether the partialdec is currently selected in explore menue
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isSelected.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":50
 *         return result
 * 
 *     @isSelected.setter             # <<<<<<<<<<<<<<
 *     def isSelected(self, bool selected):
 *         """set the selection status of this partialdecs
*/

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_10isSelected_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_selected); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_10isSelected_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_selected) {
  bool __pyx_v_selected;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  assert(__pyx_arg_selected); {
    __pyx_v_selected = __Pyx_PyObject_IsTrue(__pyx_arg_selected); if (unlikely((__pyx_v_selected == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(8, 51, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isSelected.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_10isSelected_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), ((bool)__pyx_v_selected));

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

static int __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_10isSelected_2__set__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_selected) {
  bool __pyx_v_cpp_selected;
  int __pyx_r;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/pygcgopt/decomposition.pxi":56
 *         :param selected: whether the partialdec is selected
 *         """
 *         cdef bool cpp_selected = selected             # <<<<<<<<<<<<<<
 *         self.thisptr.setSelected(cpp_selected)
 * 
*/
  __pyx_v_cpp_selected = __pyx_v_selected;

  /* "src/pygcgopt/decomposition.pxi":57
 *         """
 *         cdef bool cpp_selected = selected
 *         self.thisptr.setSelected(cpp_selected)             # <<<<<<<<<<<<<<
 * 
 *     def addBlock(self):
*/
  try {
    __pyx_v_self->thisptr->setSelected(__pyx_v_cpp_selected);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 57, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":50
 *         return result
 * 
 *     @isSelected.setter             # <<<<<<<<<<<<<<
 *     def isSelected(self, bool selected):
 *         """set the selection status of this partialdecs
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isSelected.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":59
 *         self.thisptr.setSelected(cpp_selected)
 * 
 *     def addBlock(self):             # <<<<<<<<<<<<<<
 *         """adds a new block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_9addBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_8addBlock, "PartialDecomposition.addBlock(self)\n\nadds a new block\n\n:return: the number (id) of the new block");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_9addBlock = {"addBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_9addBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_8addBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_9addBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("addBlock", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("addBlock", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_8addBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_8addBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":64
 *         :return: the number (id) of the new block
 *         """
 *         cdef int result = self.thisptr.addBlock()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->addBlock();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 64, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":65
 *         """
 *         cdef int result = self.thisptr.addBlock()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def assignOpenConssToMaster(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":59
 *         self.thisptr.setSelected(cpp_selected)
 * 
 *     def addBlock(self):             # <<<<<<<<<<<<<<
 *         """adds a new block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":67
 *         return result
 * 
 *     def assignOpenConssToMaster(self):             # <<<<<<<<<<<<<<
 *         """assigns open constraints to master
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_11assignOpenConssToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_10assignOpenConssToMaster, "PartialDecomposition.assignOpenConssToMaster(self)\n\nassigns open constraints to master\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_11assignOpenConssToMaster = {"assignOpenConssToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_11assignOpenConssToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_10assignOpenConssToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_11assignOpenConssToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("assignOpenConssToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("assignOpenConssToMaster", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("assignOpenConssToMaster", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_10assignOpenConssToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_10assignOpenConssToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("assignOpenConssToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":70
 *         """assigns open constraints to master
 *         """
 *         self.thisptr.assignOpenConssToMaster()             # <<<<<<<<<<<<<<
 * 
 *     def isComplete(self):
*/
  try {
    __pyx_v_self->thisptr->assignOpenConssToMaster();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 70, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":67
 *         return result
 * 
 *     def assignOpenConssToMaster(self):             # <<<<<<<<<<<<<<
 *         """assigns open constraints to master
 *         """
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.assignOpenConssToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":72
 *         self.thisptr.assignOpenConssToMaster()
 * 
 *     def isComplete(self):             # <<<<<<<<<<<<<<
 *         """gets whether this partialdec is complete, i.e. it has no more open constraints and variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_13isComplete(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_12isComplete, "PartialDecomposition.isComplete(self)\n\ngets whether this partialdec is complete, i.e. it has no more open constraints and variables\n\n:return: True iff this partialdec is complete");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_13isComplete = {"isComplete", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_13isComplete, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_12isComplete};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_13isComplete(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isComplete (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("isComplete", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("isComplete", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_12isComplete(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_12isComplete(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isComplete", 0);

  /* "src/pygcgopt/decomposition.pxi":77
 *         :return: True iff this partialdec is complete
 *         """
 *         cdef bool result = self.thisptr.isComplete()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->isComplete();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 77, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":78
 *         """
 *         cdef bool result = self.thisptr.isComplete()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def isTrivial(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":72
 *         self.thisptr.assignOpenConssToMaster()
 * 
 *     def isComplete(self):             # <<<<<<<<<<<<<<
 *         """gets whether this partialdec is complete, i.e. it has no more open constraints and variables
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isComplete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":80
 *         return result
 * 
 *     def isTrivial(self):             # <<<<<<<<<<<<<<
 *         """gets whether this partialdec is considered to be trivial
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15isTrivial(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_14isTrivial, "PartialDecomposition.isTrivial(self)\n\ngets whether this partialdec is considered to be trivial\n\n:return: True iff this partialdec is considered to be trivial\n\n.. note:: PartialDecomposition is considered trivial if all constraints are in one block, all constraints are in border,\nall variables linking or mastervariables, or all constraints and variables are open");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_15isTrivial = {"isTrivial", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15isTrivial, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_14isTrivial};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15isTrivial(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isTrivial (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("isTrivial", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("isTrivial", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_14isTrivial(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_14isTrivial(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isTrivial", 0);

  /* "src/pygcgopt/decomposition.pxi":88
 *         all variables linking or mastervariables, or all constraints and variables are open
 *         """
 *         cdef bool result = self.thisptr.isTrivial()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->isTrivial();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 88, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":89
 *         """
 *         cdef bool result = self.thisptr.isTrivial()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNBlocks(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":80
 *         return result
 * 
 *     def isTrivial(self):             # <<<<<<<<<<<<<<
 *         """gets whether this partialdec is considered to be trivial
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isTrivial", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":91
 *         return result
 * 
 *     def getNBlocks(self):             # <<<<<<<<<<<<<<
 *         """gets the number of blocks
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_17getNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_16getNBlocks, "PartialDecomposition.getNBlocks(self)\n\ngets the number of blocks\n\n:return: number of blocks");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_17getNBlocks = {"getNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_17getNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_16getNBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_17getNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNBlocks", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNBlocks", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_16getNBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_16getNBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":96
 *         :return: number of blocks
 *         """
 *         cdef int result = self.thisptr.getNBlocks()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNBlocks();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 96, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":97
 *         """
 *         cdef int result = self.thisptr.getNBlocks()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNConss(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":91
 *         return result
 * 
 *     def getNBlocks(self):             # <<<<<<<<<<<<<<
 *         """gets the number of blocks
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":99
 *         return result
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """gets the number of constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_19getNConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_18getNConss, "PartialDecomposition.getNConss(self)\n\ngets the number of constraints\n\n:return: number of constraints");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_19getNConss = {"getNConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_19getNConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_18getNConss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_19getNConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNConss", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNConss", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_18getNConss(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_18getNConss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNConss", 0);

  /* "src/pygcgopt/decomposition.pxi":104
 *         :return: number of constraints
 *         """
 *         cdef int result = self.thisptr.getNConss()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNConss();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 104, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":105
 *         """
 *         cdef int result = self.thisptr.getNConss()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNVars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":99
 *         return result
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """gets the number of constraints
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNConss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":107
 *         return result
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """gets number of variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_21getNVars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_20getNVars, "PartialDecomposition.getNVars(self)\n\ngets number of variables\n\n:return: number of variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_21getNVars = {"getNVars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_21getNVars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_20getNVars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_21getNVars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNVars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNVars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_20getNVars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_20getNVars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNVars", 0);

  /* "src/pygcgopt/decomposition.pxi":112
 *         :return: number of variables
 *         """
 *         cdef int result = self.thisptr.getNVars()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNVars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 112, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":113
 *         """
 *         cdef int result = self.thisptr.getNVars()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getID(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":107
 *         return result
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """gets number of variables
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNVars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":115
 *         return result
 * 
 *     def getID(self):             # <<<<<<<<<<<<<<
 *         """gets the unique id of the partialdecomposition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_23getID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_22getID, "PartialDecomposition.getID(self)\n\ngets the unique id of the partialdecomposition\n\n:return: unique id of the partialdecomposition");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_23getID = {"getID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_23getID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_22getID};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_23getID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getID (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getID", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getID", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_22getID(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_22getID(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getID", 0);

  /* "src/pygcgopt/decomposition.pxi":120
 *         :return: unique id of the partialdecomposition
 *         """
 *         cdef int result = self.thisptr.getID()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getID();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 120, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":121
 *         """
 *         cdef int result = self.thisptr.getID()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getHashValue(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":115
 *         return result
 * 
 *     def getID(self):             # <<<<<<<<<<<<<<
 *         """gets the unique id of the partialdecomposition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":123
 *         return result
 * 
 *     def getHashValue(self):             # <<<<<<<<<<<<<<
 *         """gets the calculated hash value of the partialdecomposition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_25getHashValue(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_24getHashValue, "PartialDecomposition.getHashValue(self)\n\ngets the calculated hash value of the partialdecomposition\n\n:return: calculated hash value of the partialdecomposition");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_25getHashValue = {"getHashValue", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_25getHashValue, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_24getHashValue};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_25getHashValue(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getHashValue (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getHashValue", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getHashValue", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_24getHashValue(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_24getHashValue(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  unsigned long __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  unsigned long __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getHashValue", 0);

  /* "src/pygcgopt/decomposition.pxi":128
 *         :return: calculated hash value of the partialdecomposition
 *         """
 *         cdef unsigned long result = self.thisptr.getHashValue()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getHashValue();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 128, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":129
 *         """
 *         cdef unsigned long result = self.thisptr.getHashValue()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getDetprobdata(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_unsigned_long(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":123
 *         return result
 * 
 *     def getHashValue(self):             # <<<<<<<<<<<<<<
 *         """gets the calculated hash value of the partialdecomposition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getHashValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":131
 *         return result
 * 
 *     def getDetprobdata(self):             # <<<<<<<<<<<<<<
 *         """gets the corresponding detprobdata
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_27getDetprobdata(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_26getDetprobdata, "PartialDecomposition.getDetprobdata(self)\n\ngets the corresponding detprobdata\n\n:return: corresponding detprobdata");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_27getDetprobdata = {"getDetprobdata", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_27getDetprobdata, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_26getDetprobdata};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_27getDetprobdata(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getDetprobdata (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getDetprobdata", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getDetprobdata", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_26getDetprobdata(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_26getDetprobdata(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  gcg::DETPROBDATA *__pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getDetprobdata", 0);

  /* "src/pygcgopt/decomposition.pxi":136
 *         :return: corresponding detprobdata
 *         """
 *         cdef DETPROBDATA* result = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return DetProbData.create(result)
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 136, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":137
 *         """
 *         cdef DETPROBDATA* result = self.thisptr.getDetprobdata()
 *         return DetProbData.create(result)             # <<<<<<<<<<<<<<
 * 
 *     def fixConsToMaster(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_11DetProbData_create(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":131
 *         return result
 * 
 *     def getDetprobdata(self):             # <<<<<<<<<<<<<<
 *         """gets the corresponding detprobdata
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getDetprobdata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":139
 *         return DetProbData.create(result)
 * 
 *     def fixConsToMaster(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """fixes a Constraint to the master constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_29fixConsToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_28fixConsToMaster, "PartialDecomposition.fixConsToMaster(self, Constraint cons)\n\nfixes a Constraint to the master constraints\n\n:param cons: scip#Constraint to add\n:type cons: Constraint");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_29fixConsToMaster = {"fixConsToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_29fixConsToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_28fixConsToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_29fixConsToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixConsToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 139, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 139, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixConsToMaster", 0) < (0)) __PYX_ERR(8, 139, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixConsToMaster", 1, 1, 1, i); __PYX_ERR(8, 139, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 139, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixConsToMaster", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 139, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConsToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(8, 139, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_28fixConsToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_28fixConsToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixConsToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":145
 *         :type cons: Constraint
 *         """
 *         self.thisptr.fixConsToMaster(cons.scip_cons)             # <<<<<<<<<<<<<<
 * 
 *     def fixConssToMaster(self, conss):
*/
  (void)(__pyx_v_self->thisptr->fixConsToMaster(__pyx_v_cons->scip_cons));

  /* "src/pygcgopt/decomposition.pxi":139
 *         return DetProbData.create(result)
 * 
 *     def fixConsToMaster(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """fixes a Constraint to the master constraints
 * 
*/

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

/* "src/pygcgopt/decomposition.pxi":147
 *         self.thisptr.fixConsToMaster(cons.scip_cons)
 * 
 *     def fixConssToMaster(self, conss):             # <<<<<<<<<<<<<<
 *         """fixes all constraints to the master constraints.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_31fixConssToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_30fixConssToMaster, "PartialDecomposition.fixConssToMaster(self, conss)\n\nfixes all constraints to the master constraints.\n\n:param conss: An iterable of scip#Constraint objects\n:type conss: An iterable of scip#Constraint objects\n:raises TypeError: occurs if conss is not an Iterable\n.. seealso:: * :meth:`fixConsToMaster`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_31fixConssToMaster = {"fixConssToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_31fixConssToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_30fixConssToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_31fixConssToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_conss = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixConssToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_conss,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 147, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 147, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixConssToMaster", 0) < (0)) __PYX_ERR(8, 147, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixConssToMaster", 1, 1, 1, i); __PYX_ERR(8, 147, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 147, __pyx_L3_error)
    }
    __pyx_v_conss = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixConssToMaster", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 147, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConssToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_30fixConssToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_conss);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_30fixConssToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_conss) {
  PyObject *__pyx_v_cons = NULL;
  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;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  PyObject *(*__pyx_t_9)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fixConssToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":155
 *         .. seealso:: * :meth:`fixConsToMaster`
 *         """
 *         if not isinstance(conss, Iterable):             # <<<<<<<<<<<<<<
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:
*/
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Iterable); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_conss, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(8, 155, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (unlikely(__pyx_t_3)) {

    /* "src/pygcgopt/decomposition.pxi":156
 *         """
 *         if not isinstance(conss, Iterable):
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))             # <<<<<<<<<<<<<<
 *         for cons in conss:
 *             self.fixConsToMaster(<Constraint?>cons)
*/
    __pyx_t_4 = NULL;
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_Expected_iterable_as_first_argum;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, ((PyObject *)Py_TYPE(__pyx_v_conss))};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 156, __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(8, 156, __pyx_L1_error)

    /* "src/pygcgopt/decomposition.pxi":155
 *         .. seealso:: * :meth:`fixConsToMaster`
 *         """
 *         if not isinstance(conss, Iterable):             # <<<<<<<<<<<<<<
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:
*/
  }

  /* "src/pygcgopt/decomposition.pxi":157
 *         if not isinstance(conss, Iterable):
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:             # <<<<<<<<<<<<<<
 *             self.fixConsToMaster(<Constraint?>cons)
 * 
*/
  if (likely(PyList_CheckExact(__pyx_v_conss)) || PyTuple_CheckExact(__pyx_v_conss)) {
    __pyx_t_1 = __pyx_v_conss; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_conss); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 157, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 157, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_9)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(8, 157, __pyx_L1_error)
          #endif
          if (__pyx_t_8 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_8;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(8, 157, __pyx_L1_error)
          #endif
          if (__pyx_t_8 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8);
        #endif
        ++__pyx_t_8;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 157, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_9(__pyx_t_1);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(8, 157, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_cons, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "src/pygcgopt/decomposition.pxi":158
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:
 *             self.fixConsToMaster(<Constraint?>cons)             # <<<<<<<<<<<<<<
 * 
 *     def fixConsToBlockId(self, Constraint cons, int block_id):
*/
    __pyx_t_4 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_4);
    if (!(likely(__Pyx_TypeTest(__pyx_v_cons, __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint)))) __PYX_ERR(8, 158, __pyx_L1_error)
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_cons};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_fixConsToMaster, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 158, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "src/pygcgopt/decomposition.pxi":157
 *         if not isinstance(conss, Iterable):
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:             # <<<<<<<<<<<<<<
 *             self.fixConsToMaster(<Constraint?>cons)
 * 
*/
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/decomposition.pxi":147
 *         self.thisptr.fixConsToMaster(cons.scip_cons)
 * 
 *     def fixConssToMaster(self, conss):             # <<<<<<<<<<<<<<
 *         """fixes all constraints to the master constraints.
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConssToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cons);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":160
 *             self.fixConsToMaster(<Constraint?>cons)
 * 
 *     def fixConsToBlockId(self, Constraint cons, int block_id):             # <<<<<<<<<<<<<<
 *         """Adds a constraint to a block.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_33fixConsToBlockId(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_32fixConsToBlockId, "PartialDecomposition.fixConsToBlockId(self, Constraint cons, int block_id)\n\nAdds a constraint to a block.\n\n:param cons: scip#Constraint to add\n:type cons: Constraint\n:param block_id: id of block to add.\n:type block_id: int\n:note: The passed ``block_id`` has to by of type integer and use the internal numbering of blocks. Before\ncalling this method, one has to ensure that the specified block exists. A more convenient alternative is\nfixConsToBlock().\n\n.. seealso:: * :meth:`addBlock`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_33fixConsToBlockId = {"fixConsToBlockId", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_33fixConsToBlockId, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_32fixConsToBlockId};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_33fixConsToBlockId(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixConsToBlockId (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 160, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 160, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 160, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixConsToBlockId", 0) < (0)) __PYX_ERR(8, 160, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixConsToBlockId", 1, 2, 2, i); __PYX_ERR(8, 160, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 160, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 160, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 160, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixConsToBlockId", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 160, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConsToBlockId", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(8, 160, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_32fixConsToBlockId(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_cons, __pyx_v_block_id);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_32fixConsToBlockId(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons, int __pyx_v_block_id) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixConsToBlockId", 0);

  /* "src/pygcgopt/decomposition.pxi":173
 *         .. seealso:: * :meth:`addBlock`
 *         """
 *         self.thisptr.fixConsToBlock(cons.scip_cons, block_id)             # <<<<<<<<<<<<<<
 * 
 *     def fixConssToBlockId(self, conss, int block_id):
*/
  (void)(__pyx_v_self->thisptr->fixConsToBlock(__pyx_v_cons->scip_cons, __pyx_v_block_id));

  /* "src/pygcgopt/decomposition.pxi":160
 *             self.fixConsToMaster(<Constraint?>cons)
 * 
 *     def fixConsToBlockId(self, Constraint cons, int block_id):             # <<<<<<<<<<<<<<
 *         """Adds a constraint to a block.
 * 
*/

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

/* "src/pygcgopt/decomposition.pxi":175
 *         self.thisptr.fixConsToBlock(cons.scip_cons, block_id)
 * 
 *     def fixConssToBlockId(self, conss, int block_id):             # <<<<<<<<<<<<<<
 *         """Adds all constraints to a block.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_35fixConssToBlockId(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_34fixConssToBlockId, "PartialDecomposition.fixConssToBlockId(self, conss, int block_id)\n\nAdds all constraints to a block.\n\n:param conss: An iterable of scip#Constraint objects\n:param block_id: id of block to add\n.. seealso:: * :meth:`fixConsToBlockId`\n             * :meth:`fixConssToBlock`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_35fixConssToBlockId = {"fixConssToBlockId", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_35fixConssToBlockId, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_34fixConssToBlockId};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_35fixConssToBlockId(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_conss = 0;
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixConssToBlockId (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_conss,&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 175, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixConssToBlockId", 0) < (0)) __PYX_ERR(8, 175, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixConssToBlockId", 1, 2, 2, i); __PYX_ERR(8, 175, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 175, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 175, __pyx_L3_error)
    }
    __pyx_v_conss = values[0];
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 175, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixConssToBlockId", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 175, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConssToBlockId", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_34fixConssToBlockId(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_conss, __pyx_v_block_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_34fixConssToBlockId(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_conss, int __pyx_v_block_id) {
  PyObject *__pyx_v_cons = NULL;
  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;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  PyObject *(*__pyx_t_9)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fixConssToBlockId", 0);

  /* "src/pygcgopt/decomposition.pxi":183
 *                      * :meth:`fixConssToBlock`
 *         """
 *         if not isinstance(conss, Iterable):             # <<<<<<<<<<<<<<
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:
*/
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Iterable); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_conss, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(8, 183, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (unlikely(__pyx_t_3)) {

    /* "src/pygcgopt/decomposition.pxi":184
 *         """
 *         if not isinstance(conss, Iterable):
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))             # <<<<<<<<<<<<<<
 *         for cons in conss:
 *             self.fixConsToBlockId(<Constraint?>cons, block_id)
*/
    __pyx_t_4 = NULL;
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_Expected_iterable_as_first_argum;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, ((PyObject *)Py_TYPE(__pyx_v_conss))};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 184, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 184, __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(8, 184, __pyx_L1_error)

    /* "src/pygcgopt/decomposition.pxi":183
 *                      * :meth:`fixConssToBlock`
 *         """
 *         if not isinstance(conss, Iterable):             # <<<<<<<<<<<<<<
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:
*/
  }

  /* "src/pygcgopt/decomposition.pxi":185
 *         if not isinstance(conss, Iterable):
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:             # <<<<<<<<<<<<<<
 *             self.fixConsToBlockId(<Constraint?>cons, block_id)
 * 
*/
  if (likely(PyList_CheckExact(__pyx_v_conss)) || PyTuple_CheckExact(__pyx_v_conss)) {
    __pyx_t_1 = __pyx_v_conss; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_conss); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 185, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 185, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_9)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(8, 185, __pyx_L1_error)
          #endif
          if (__pyx_t_8 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_8;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(8, 185, __pyx_L1_error)
          #endif
          if (__pyx_t_8 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8);
        #endif
        ++__pyx_t_8;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 185, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_9(__pyx_t_1);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(8, 185, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_cons, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "src/pygcgopt/decomposition.pxi":186
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:
 *             self.fixConsToBlockId(<Constraint?>cons, block_id)             # <<<<<<<<<<<<<<
 * 
 *     #def fixVarToBlockId(self, Variable var, int block_id):
*/
    __pyx_t_4 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_4);
    if (!(likely(__Pyx_TypeTest(__pyx_v_cons, __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint)))) __PYX_ERR(8, 186, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_block_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_cons, __pyx_t_6};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_fixConsToBlockId, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 186, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "src/pygcgopt/decomposition.pxi":185
 *         if not isinstance(conss, Iterable):
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         for cons in conss:             # <<<<<<<<<<<<<<
 *             self.fixConsToBlockId(<Constraint?>cons, block_id)
 * 
*/
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/decomposition.pxi":175
 *         self.thisptr.fixConsToBlock(cons.scip_cons, block_id)
 * 
 *     def fixConssToBlockId(self, conss, int block_id):             # <<<<<<<<<<<<<<
 *         """Adds all constraints to a block.
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConssToBlockId", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cons);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":207
 *     #        self.fixVarToBlockId(<Variable?>var, block_id)
 * 
 *     def fixConsToBlock(self, Constraint cons, object block):             # <<<<<<<<<<<<<<
 *         """Adds a constraint to a block.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_37fixConsToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_36fixConsToBlock, "PartialDecomposition.fixConsToBlock(self, Constraint cons, block)\n\nAdds a constraint to a block.\n\n:param cons: scip#Constraint to add\n:param block: identifier of block to add. Can be any hashable Python object.\n:return: the internal block_id assigned to the block.\n\nThis method will automatically manage the blocks of the decomposition and create blocks if neccessary.\nThe passed ``block`` identifiers will be mapped to internal block ids.\n\nTo address the internal blocks directly, use :meth:`fixConsToBlockId`.\n\n.. seealso:: * :meth:`fixConssToBlock`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_37fixConsToBlock = {"fixConsToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_37fixConsToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_36fixConsToBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_37fixConsToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  PyObject *__pyx_v_block = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixConsToBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,&__pyx_mstate_global->__pyx_n_u_block,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 207, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 207, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 207, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixConsToBlock", 0) < (0)) __PYX_ERR(8, 207, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixConsToBlock", 1, 2, 2, i); __PYX_ERR(8, 207, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 207, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 207, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
    __pyx_v_block = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixConsToBlock", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 207, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConsToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(8, 207, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_36fixConsToBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_cons, __pyx_v_block);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_36fixConsToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons, PyObject *__pyx_v_block) {
  CYTHON_UNUSED PyObject *__pyx_v_i = NULL;
  int __pyx_v_block_id;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *(*__pyx_t_10)(PyObject *);
  int __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fixConsToBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":221
 *         .. seealso:: * :meth:`fixConssToBlock`
 *         """
 *         if block not in self.py_block_id_map:             # <<<<<<<<<<<<<<
 *             self.py_block_id_map.append(block)
 * 
*/
  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_block, __pyx_v_self->py_block_id_map, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(8, 221, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "src/pygcgopt/decomposition.pxi":222
 *         """
 *         if block not in self.py_block_id_map:
 *             self.py_block_id_map.append(block)             # <<<<<<<<<<<<<<
 * 
 *         # Extend the number of blocks if we do not have enough. Do not automatically shrink the block count to avoid
*/
    if (unlikely(__pyx_v_self->py_block_id_map == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
      __PYX_ERR(8, 222, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyList_Append(__pyx_v_self->py_block_id_map, __pyx_v_block); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(8, 222, __pyx_L1_error)

    /* "src/pygcgopt/decomposition.pxi":221
 *         .. seealso:: * :meth:`fixConssToBlock`
 *         """
 *         if block not in self.py_block_id_map:             # <<<<<<<<<<<<<<
 *             self.py_block_id_map.append(block)
 * 
*/
  }

  /* "src/pygcgopt/decomposition.pxi":226
 *         # Extend the number of blocks if we do not have enough. Do not automatically shrink the block count to avoid
 *         # interferance in case the user previously set a block count manually.
 *         if len(self.py_block_id_map) > self.getNBlocks():             # <<<<<<<<<<<<<<
 *             for i in range(len(self.py_block_id_map) - self.getNBlocks()):
 *                 self.addBlock()
*/
  __pyx_t_3 = __pyx_v_self->py_block_id_map;
  __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(8, 226, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(8, 226, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyLong_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
    __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getNBlocks, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_6 = PyObject_RichCompare(__pyx_t_3, __pyx_t_5, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 226, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(8, 226, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_1) {

    /* "src/pygcgopt/decomposition.pxi":227
 *         # interferance in case the user previously set a block count manually.
 *         if len(self.py_block_id_map) > self.getNBlocks():
 *             for i in range(len(self.py_block_id_map) - self.getNBlocks()):             # <<<<<<<<<<<<<<
 *                 self.addBlock()
 * 
*/
    __pyx_t_5 = NULL;
    __pyx_t_3 = __pyx_v_self->py_block_id_map;
    __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(8, 227, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(8, 227, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyLong_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
      __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getNBlocks, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __pyx_t_9 = PyNumber_Subtract(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_9};
      __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(8, 227, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    for (;;) {
      {
        __pyx_t_6 = __pyx_t_10(__pyx_t_9);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(8, 227, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_6);
      __pyx_t_6 = 0;

      /* "src/pygcgopt/decomposition.pxi":228
 *         if len(self.py_block_id_map) > self.getNBlocks():
 *             for i in range(len(self.py_block_id_map) - self.getNBlocks()):
 *                 self.addBlock()             # <<<<<<<<<<<<<<
 * 
 *         cdef int block_id = self.py_block_id_map.index(block)
*/
      __pyx_t_5 = ((PyObject *)__pyx_v_self);
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
        __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_addBlock, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 228, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      /* "src/pygcgopt/decomposition.pxi":227
 *         # interferance in case the user previously set a block count manually.
 *         if len(self.py_block_id_map) > self.getNBlocks():
 *             for i in range(len(self.py_block_id_map) - self.getNBlocks()):             # <<<<<<<<<<<<<<
 *                 self.addBlock()
 * 
*/
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "src/pygcgopt/decomposition.pxi":226
 *         # Extend the number of blocks if we do not have enough. Do not automatically shrink the block count to avoid
 *         # interferance in case the user previously set a block count manually.
 *         if len(self.py_block_id_map) > self.getNBlocks():             # <<<<<<<<<<<<<<
 *             for i in range(len(self.py_block_id_map) - self.getNBlocks()):
 *                 self.addBlock()
*/
  }

  /* "src/pygcgopt/decomposition.pxi":230
 *                 self.addBlock()
 * 
 *         cdef int block_id = self.py_block_id_map.index(block)             # <<<<<<<<<<<<<<
 *         self.fixConsToBlockId(cons, block_id)
 *         return block_id
*/
  __pyx_t_6 = __pyx_v_self->py_block_id_map;
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_block};
    __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_index, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  __pyx_t_11 = __Pyx_PyLong_As_int(__pyx_t_9); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 230, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_block_id = __pyx_t_11;

  /* "src/pygcgopt/decomposition.pxi":231
 * 
 *         cdef int block_id = self.py_block_id_map.index(block)
 *         self.fixConsToBlockId(cons, block_id)             # <<<<<<<<<<<<<<
 *         return block_id
 * 
*/
  __pyx_t_6 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_block_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 231, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_6, ((PyObject *)__pyx_v_cons), __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_fixConsToBlockId, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/pygcgopt/decomposition.pxi":232
 *         cdef int block_id = self.py_block_id_map.index(block)
 *         self.fixConsToBlockId(cons, block_id)
 *         return block_id             # <<<<<<<<<<<<<<
 * 
 *     def fixConssToBlock(self, conss, object block):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_block_id); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_r = __pyx_t_9;
  __pyx_t_9 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":207
 *     #        self.fixVarToBlockId(<Variable?>var, block_id)
 * 
 *     def fixConsToBlock(self, Constraint cons, object block):             # <<<<<<<<<<<<<<
 *         """Adds a constraint to a block.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConsToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":234
 *         return block_id
 * 
 *     def fixConssToBlock(self, conss, object block):             # <<<<<<<<<<<<<<
 *         """Adds all constraints to a block.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_39fixConssToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_38fixConssToBlock, "PartialDecomposition.fixConssToBlock(self, conss, block)\n\nAdds all constraints to a block.\n\n:param conss: An iterable of scip#Constraint objects\n:param block: identifier of block to add. Can be any hashable Python object.\n:return: the internal block_id assigned to the block.\n\n.. seealso:: * :meth:`fixConsToBlock`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_39fixConssToBlock = {"fixConssToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_39fixConssToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_38fixConssToBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_39fixConssToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_conss = 0;
  PyObject *__pyx_v_block = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixConssToBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_conss,&__pyx_mstate_global->__pyx_n_u_block,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 234, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 234, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 234, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixConssToBlock", 0) < (0)) __PYX_ERR(8, 234, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixConssToBlock", 1, 2, 2, i); __PYX_ERR(8, 234, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 234, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 234, __pyx_L3_error)
    }
    __pyx_v_conss = values[0];
    __pyx_v_block = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixConssToBlock", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 234, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixConssToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_38fixConssToBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_conss, __pyx_v_block);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_38fixConssToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_conss, PyObject *__pyx_v_block) {
  int __pyx_v_block_id;
  PyObject *__pyx_v_cons = NULL;
  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;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  PyObject *(*__pyx_t_9)(PyObject *);
  int __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fixConssToBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":243
 *         .. seealso:: * :meth:`fixConsToBlock`
 *         """
 *         if not isinstance(conss, Iterable):             # <<<<<<<<<<<<<<
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         cdef int block_id = -1  #assign no block_id at first
*/
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Iterable); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_conss, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(8, 243, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (unlikely(__pyx_t_3)) {

    /* "src/pygcgopt/decomposition.pxi":244
 *         """
 *         if not isinstance(conss, Iterable):
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))             # <<<<<<<<<<<<<<
 *         cdef int block_id = -1  #assign no block_id at first
 *         for cons in conss:
*/
    __pyx_t_4 = NULL;
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_Expected_iterable_as_first_argum;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, ((PyObject *)Py_TYPE(__pyx_v_conss))};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 244, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 244, __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(8, 244, __pyx_L1_error)

    /* "src/pygcgopt/decomposition.pxi":243
 *         .. seealso:: * :meth:`fixConsToBlock`
 *         """
 *         if not isinstance(conss, Iterable):             # <<<<<<<<<<<<<<
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         cdef int block_id = -1  #assign no block_id at first
*/
  }

  /* "src/pygcgopt/decomposition.pxi":245
 *         if not isinstance(conss, Iterable):
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         cdef int block_id = -1  #assign no block_id at first             # <<<<<<<<<<<<<<
 *         for cons in conss:
 *             # block_id is the same for all blocks
*/
  __pyx_v_block_id = -1;

  /* "src/pygcgopt/decomposition.pxi":246
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         cdef int block_id = -1  #assign no block_id at first
 *         for cons in conss:             # <<<<<<<<<<<<<<
 *             # block_id is the same for all blocks
 *             block_id = self.fixConsToBlock(<Constraint?>cons, block)
*/
  if (likely(PyList_CheckExact(__pyx_v_conss)) || PyTuple_CheckExact(__pyx_v_conss)) {
    __pyx_t_1 = __pyx_v_conss; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_conss); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 246, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_9)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(8, 246, __pyx_L1_error)
          #endif
          if (__pyx_t_8 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_8;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(8, 246, __pyx_L1_error)
          #endif
          if (__pyx_t_8 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8);
        #endif
        ++__pyx_t_8;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 246, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_9(__pyx_t_1);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(8, 246, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_cons, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "src/pygcgopt/decomposition.pxi":248
 *         for cons in conss:
 *             # block_id is the same for all blocks
 *             block_id = self.fixConsToBlock(<Constraint?>cons, block)             # <<<<<<<<<<<<<<
 *         return block_id
 * 
*/
    __pyx_t_4 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_4);
    if (!(likely(__Pyx_TypeTest(__pyx_v_cons, __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint)))) __PYX_ERR(8, 248, __pyx_L1_error)
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_cons, __pyx_v_block};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_fixConsToBlock, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 248, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_10 = __Pyx_PyLong_As_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 248, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_block_id = __pyx_t_10;

    /* "src/pygcgopt/decomposition.pxi":246
 *             raise TypeError("Expected iterable as first argument. Got '{}' instead.".format(type(conss)))
 *         cdef int block_id = -1  #assign no block_id at first
 *         for cons in conss:             # <<<<<<<<<<<<<<
 *             # block_id is the same for all blocks
 *             block_id = self.fixConsToBlock(<Constraint?>cons, block)
*/
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/decomposition.pxi":249
 *             # block_id is the same for all blocks
 *             block_id = self.fixConsToBlock(<Constraint?>cons, block)
 *         return block_id             # <<<<<<<<<<<<<<
 * 
 *     def hasSetppccardMaster(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_block_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":234
 *         return block_id
 * 
 *     def fixConssToBlock(self, conss, object block):             # <<<<<<<<<<<<<<
 *         """Adds all constraints to a block.
 * 
*/

  /* 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("pygcgopt.gcg.PartialDecomposition.fixConssToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cons);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":251
 *         return block_id
 * 
 *     def hasSetppccardMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning, set packing, set cover or cardinality constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_41hasSetppccardMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_40hasSetppccardMaster, "PartialDecomposition.hasSetppccardMaster(self)\n\nchecks if all master constraints set partitioning, set packing, set cover or cardinality constraints\n\n:return: True iff all master constraints set partitioning, set packing, set cover or cardinality constraints");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_41hasSetppccardMaster = {"hasSetppccardMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_41hasSetppccardMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_40hasSetppccardMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_41hasSetppccardMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hasSetppccardMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("hasSetppccardMaster", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("hasSetppccardMaster", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_40hasSetppccardMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_40hasSetppccardMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  unsigned int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("hasSetppccardMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":256
 *         :return: True iff all master constraints set partitioning, set packing, set cover or cardinality constraints
 *         """
 *         cdef bool result = self.thisptr.hasSetppccardMaster()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->hasSetppccardMaster();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 256, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":257
 *         """
 *         cdef bool result = self.thisptr.hasSetppccardMaster()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def hasSetppcMaster(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":251
 *         return block_id
 * 
 *     def hasSetppccardMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning, set packing, set cover or cardinality constraints
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.hasSetppccardMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":259
 *         return result
 * 
 *     def hasSetppcMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning, set packing or set cover constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_43hasSetppcMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_42hasSetppcMaster, "PartialDecomposition.hasSetppcMaster(self)\n\nchecks if all master constraints set partitioning, set packing or set cover constraints\n\n:return: True iff all master constraints set partitioning, set packing or set cover");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_43hasSetppcMaster = {"hasSetppcMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_43hasSetppcMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_42hasSetppcMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_43hasSetppcMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hasSetppcMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("hasSetppcMaster", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("hasSetppcMaster", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_42hasSetppcMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_42hasSetppcMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  unsigned int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("hasSetppcMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":264
 *         :return: True iff all master constraints set partitioning, set packing or set cover
 *         """
 *         cdef bool result = self.thisptr.hasSetppcMaster()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->hasSetppcMaster();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 264, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":265
 *         """
 *         cdef bool result = self.thisptr.hasSetppcMaster()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def hasSetppMaster(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":259
 *         return result
 * 
 *     def hasSetppcMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning, set packing or set cover constraints
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.hasSetppcMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":267
 *         return result
 * 
 *     def hasSetppMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning or set packing constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_45hasSetppMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_44hasSetppMaster, "PartialDecomposition.hasSetppMaster(self)\n\nchecks if all master constraints set partitioning or set packing constraints\n\n:return: True iff all master constraints set partitioning or set packing constraints");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_45hasSetppMaster = {"hasSetppMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_45hasSetppMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_44hasSetppMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_45hasSetppMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hasSetppMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("hasSetppMaster", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("hasSetppMaster", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_44hasSetppMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_44hasSetppMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  unsigned int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("hasSetppMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":272
 *         :return: True iff all master constraints set partitioning or set packing constraints
 *         """
 *         cdef bool result = self.thisptr.hasSetppMaster()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->hasSetppMaster();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 272, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":273
 *         """
 *         cdef bool result = self.thisptr.hasSetppMaster()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNOpenconss(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":267
 *         return result
 * 
 *     def hasSetppMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning or set packing constraints
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.hasSetppMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":275
 *         return result
 * 
 *     def getNOpenconss(self):             # <<<<<<<<<<<<<<
 *         """gets number of constraints that are opened (not assigned yet)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_47getNOpenconss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_46getNOpenconss, "PartialDecomposition.getNOpenconss(self)\n\ngets number of constraints that are opened (not assigned yet)\n\n:return: number of open constraints");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_47getNOpenconss = {"getNOpenconss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_47getNOpenconss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_46getNOpenconss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_47getNOpenconss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNOpenconss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNOpenconss", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNOpenconss", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_46getNOpenconss(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_46getNOpenconss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNOpenconss", 0);

  /* "src/pygcgopt/decomposition.pxi":280
 *         :return: number of open constraints
 *         """
 *         cdef int result = self.thisptr.getNOpenconss()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNOpenconss();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 280, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":281
 *         """
 *         cdef int result = self.thisptr.getNOpenconss()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getOpenconss(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":275
 *         return result
 * 
 *     def getNOpenconss(self):             # <<<<<<<<<<<<<<
 *         """gets number of constraints that are opened (not assigned yet)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNOpenconss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":283
 *         return result
 * 
 *     def getOpenconss(self):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are opened (not assigned yet)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_49getOpenconss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_48getOpenconss, "PartialDecomposition.getOpenconss(self)\n\ngets a list of constraints that are opened (not assigned yet)\n\n:return: list of constraints");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_49getOpenconss = {"getOpenconss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_49getOpenconss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_48getOpenconss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_49getOpenconss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getOpenconss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getOpenconss", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getOpenconss", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_48getOpenconss(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_48getOpenconss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<int>  __pyx_v_result;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  int __pyx_7genexpr__pyx_v_consIndex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  gcg::DETPROBDATA *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::vector<int> ::iterator __pyx_t_4;
  int __pyx_t_5;
  SCIP_CONS *__pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getOpenconss", 0);

  /* "src/pygcgopt/decomposition.pxi":288
 *         :return: list of constraints
 *         """
 *         cdef vector[int] result = self.thisptr.getOpenconss()             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getOpenconss();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 288, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":289
 *         """
 *         cdef vector[int] result = self.thisptr.getOpenconss()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 289, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":290
 *         cdef vector[int] result = self.thisptr.getOpenconss()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]             # <<<<<<<<<<<<<<
 * 
 *     def getNLinkingvars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_v_result.begin();
    for (; __pyx_t_4 != __pyx_v_result.end(); ++__pyx_t_4) {
      __pyx_t_5 = *__pyx_t_4;
      __pyx_7genexpr__pyx_v_consIndex = __pyx_t_5;
      try {
        __pyx_t_6 = __pyx_v_det_prob_data->getCons(__pyx_7genexpr__pyx_v_consIndex);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(8, 290, __pyx_L1_error)
      }
      __pyx_t_7 = __pyx_vtabptr_9pyscipopt_4scip_Constraint->create(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 290, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(8, 290, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":283
 *         return result
 * 
 *     def getOpenconss(self):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are opened (not assigned yet)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getOpenconss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":292
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getNLinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets number of linking variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_51getNLinkingvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_50getNLinkingvars, "PartialDecomposition.getNLinkingvars(self)\n\ngets number of linking variables\n\n:return: number of linking variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_51getNLinkingvars = {"getNLinkingvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_51getNLinkingvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_50getNLinkingvars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_51getNLinkingvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNLinkingvars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNLinkingvars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNLinkingvars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_50getNLinkingvars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_50getNLinkingvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNLinkingvars", 0);

  /* "src/pygcgopt/decomposition.pxi":297
 *         :return: number of linking variables
 *         """
 *         cdef int result = self.thisptr.getNLinkingvars()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNLinkingvars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 297, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":298
 *         """
 *         cdef int result = self.thisptr.getNLinkingvars()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getLinkingvars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":292
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getNLinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets number of linking variables
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNLinkingvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":300
 *         return result
 * 
 *     def getLinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to linking variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_53getLinkingvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_52getLinkingvars, "PartialDecomposition.getLinkingvars(self)\n\ngets a list of variables that are assigned to linking variables\n\n:return: list of variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_53getLinkingvars = {"getLinkingvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_53getLinkingvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_52getLinkingvars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_53getLinkingvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getLinkingvars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getLinkingvars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getLinkingvars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_52getLinkingvars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_52getLinkingvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<int>  __pyx_v_result;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  int __pyx_8genexpr1__pyx_v_varIndex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  gcg::DETPROBDATA *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::vector<int> ::iterator __pyx_t_4;
  int __pyx_t_5;
  SCIP_VAR *__pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getLinkingvars", 0);

  /* "src/pygcgopt/decomposition.pxi":305
 *         :return: list of variables
 *         """
 *         cdef vector[int] result = self.thisptr.getLinkingvars()             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getLinkingvars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 305, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":306
 *         """
 *         cdef vector[int] result = self.thisptr.getLinkingvars()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 306, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":307
 *         cdef vector[int] result = self.thisptr.getLinkingvars()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]             # <<<<<<<<<<<<<<
 * 
 *     def getNMasterconss(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_v_result.begin();
    for (; __pyx_t_4 != __pyx_v_result.end(); ++__pyx_t_4) {
      __pyx_t_5 = *__pyx_t_4;
      __pyx_8genexpr1__pyx_v_varIndex = __pyx_t_5;
      try {
        __pyx_t_6 = __pyx_v_det_prob_data->getVar(__pyx_8genexpr1__pyx_v_varIndex);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(8, 307, __pyx_L1_error)
      }
      __pyx_t_7 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 307, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(8, 307, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":300
 *         return result
 * 
 *     def getLinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to linking variables
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getLinkingvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":309
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNMasterconss(self):             # <<<<<<<<<<<<<<
 *         """gets number of master constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_55getNMasterconss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_54getNMasterconss, "PartialDecomposition.getNMasterconss(self)\n\ngets number of master constraints\n\n:return: number of master constraints");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_55getNMasterconss = {"getNMasterconss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_55getNMasterconss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_54getNMasterconss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_55getNMasterconss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNMasterconss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNMasterconss", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNMasterconss", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_54getNMasterconss(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_54getNMasterconss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNMasterconss", 0);

  /* "src/pygcgopt/decomposition.pxi":314
 *         :return: number of master constraints
 *         """
 *         cdef int result = self.thisptr.getNMasterconss()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNMasterconss();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 314, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":315
 *         """
 *         cdef int result = self.thisptr.getNMasterconss()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getMasterconss(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":309
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNMasterconss(self):             # <<<<<<<<<<<<<<
 *         """gets number of master constraints
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNMasterconss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":317
 *         return result
 * 
 *     def getMasterconss(self):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are assigned to master variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_57getMasterconss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_56getMasterconss, "PartialDecomposition.getMasterconss(self)\n\ngets a list of constraints that are assigned to master variables\n\n:return: list of constraints");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_57getMasterconss = {"getMasterconss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_57getMasterconss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_56getMasterconss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_57getMasterconss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getMasterconss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getMasterconss", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getMasterconss", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_56getMasterconss(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_56getMasterconss(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<int>  __pyx_v_result;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  int __pyx_8genexpr2__pyx_v_consIndex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  gcg::DETPROBDATA *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::vector<int> ::iterator __pyx_t_4;
  int __pyx_t_5;
  SCIP_CONS *__pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getMasterconss", 0);

  /* "src/pygcgopt/decomposition.pxi":322
 *         :return: list of constraints
 *         """
 *         cdef vector[int] result = self.thisptr.getMasterconss()             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getMasterconss();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 322, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":323
 *         """
 *         cdef vector[int] result = self.thisptr.getMasterconss()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 323, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":324
 *         cdef vector[int] result = self.thisptr.getMasterconss()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]             # <<<<<<<<<<<<<<
 * 
 *     def getNMastervars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_v_result.begin();
    for (; __pyx_t_4 != __pyx_v_result.end(); ++__pyx_t_4) {
      __pyx_t_5 = *__pyx_t_4;
      __pyx_8genexpr2__pyx_v_consIndex = __pyx_t_5;
      try {
        __pyx_t_6 = __pyx_v_det_prob_data->getCons(__pyx_8genexpr2__pyx_v_consIndex);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(8, 324, __pyx_L1_error)
      }
      __pyx_t_7 = __pyx_vtabptr_9pyscipopt_4scip_Constraint->create(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 324, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(8, 324, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":317
 *         return result
 * 
 *     def getMasterconss(self):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are assigned to master variables
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getMasterconss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":326
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getNMastervars(self):             # <<<<<<<<<<<<<<
 *         """gets number of master variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_59getNMastervars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_58getNMastervars, "PartialDecomposition.getNMastervars(self)\n\ngets number of master variables\n\n:return: number of master variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_59getNMastervars = {"getNMastervars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_59getNMastervars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_58getNMastervars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_59getNMastervars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNMastervars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNMastervars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNMastervars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_58getNMastervars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_58getNMastervars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNMastervars", 0);

  /* "src/pygcgopt/decomposition.pxi":331
 *         :return: number of master variables
 *         """
 *         cdef int result = self.thisptr.getNMastervars()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNMastervars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 331, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":332
 *         """
 *         cdef int result = self.thisptr.getNMastervars()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getMastervars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":326
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getNMastervars(self):             # <<<<<<<<<<<<<<
 *         """gets number of master variables
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNMastervars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":334
 *         return result
 * 
 *     def getMastervars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to master variables (static variables)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_61getMastervars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_60getMastervars, "PartialDecomposition.getMastervars(self)\n\ngets a list of variables that are assigned to master variables (static variables)\n\n:return: list of variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_61getMastervars = {"getMastervars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_61getMastervars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_60getMastervars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_61getMastervars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getMastervars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getMastervars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getMastervars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_60getMastervars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_60getMastervars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<int>  __pyx_v_result;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  int __pyx_8genexpr3__pyx_v_varIndex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  gcg::DETPROBDATA *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::vector<int> ::iterator __pyx_t_4;
  int __pyx_t_5;
  SCIP_VAR *__pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getMastervars", 0);

  /* "src/pygcgopt/decomposition.pxi":339
 *         :return: list of variables
 *         """
 *         cdef vector[int] result = self.thisptr.getMastervars()             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getMastervars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 339, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":340
 *         """
 *         cdef vector[int] result = self.thisptr.getMastervars()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 340, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":341
 *         cdef vector[int] result = self.thisptr.getMastervars()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]             # <<<<<<<<<<<<<<
 * 
 *     def getNOpenvars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_v_result.begin();
    for (; __pyx_t_4 != __pyx_v_result.end(); ++__pyx_t_4) {
      __pyx_t_5 = *__pyx_t_4;
      __pyx_8genexpr3__pyx_v_varIndex = __pyx_t_5;
      try {
        __pyx_t_6 = __pyx_v_det_prob_data->getVar(__pyx_8genexpr3__pyx_v_varIndex);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(8, 341, __pyx_L1_error)
      }
      __pyx_t_7 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 341, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(8, 341, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":334
 *         return result
 * 
 *     def getMastervars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to master variables (static variables)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getMastervars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":343
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNOpenvars(self):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are opened (not assigned yet)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_63getNOpenvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_62getNOpenvars, "PartialDecomposition.getNOpenvars(self)\n\ngets number of variables that are opened (not assigned yet)\n\n:return: number of open variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_63getNOpenvars = {"getNOpenvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_63getNOpenvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_62getNOpenvars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_63getNOpenvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNOpenvars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNOpenvars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNOpenvars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_62getNOpenvars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_62getNOpenvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNOpenvars", 0);

  /* "src/pygcgopt/decomposition.pxi":348
 *         :return: number of open variables
 *         """
 *         cdef int result = self.thisptr.getNOpenvars()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNOpenvars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 348, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":349
 *         """
 *         cdef int result = self.thisptr.getNOpenvars()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getOpenvars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":343
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNOpenvars(self):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are opened (not assigned yet)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNOpenvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":351
 *         return result
 * 
 *     def getOpenvars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are opened (not assigned yet)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_65getOpenvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_64getOpenvars, "PartialDecomposition.getOpenvars(self)\n\ngets a list of variables that are opened (not assigned yet)\n\n:return: list of variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_65getOpenvars = {"getOpenvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_65getOpenvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_64getOpenvars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_65getOpenvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getOpenvars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getOpenvars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getOpenvars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_64getOpenvars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_64getOpenvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<int>  __pyx_v_result;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  int __pyx_8genexpr4__pyx_v_varIndex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  gcg::DETPROBDATA *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::vector<int> ::iterator __pyx_t_4;
  int __pyx_t_5;
  SCIP_VAR *__pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getOpenvars", 0);

  /* "src/pygcgopt/decomposition.pxi":356
 *         :return: list of variables
 *         """
 *         cdef vector[int] result = self.thisptr.getOpenvars()             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getOpenvars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 356, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":357
 *         """
 *         cdef vector[int] result = self.thisptr.getOpenvars()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 357, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":358
 *         cdef vector[int] result = self.thisptr.getOpenvars()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]             # <<<<<<<<<<<<<<
 * 
 *     def getNStairlinkingvars(self, int block_id):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 358, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_v_result.begin();
    for (; __pyx_t_4 != __pyx_v_result.end(); ++__pyx_t_4) {
      __pyx_t_5 = *__pyx_t_4;
      __pyx_8genexpr4__pyx_v_varIndex = __pyx_t_5;
      try {
        __pyx_t_6 = __pyx_v_det_prob_data->getVar(__pyx_8genexpr4__pyx_v_varIndex);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(8, 358, __pyx_L1_error)
      }
      __pyx_t_7 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 358, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(8, 358, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":351
 *         return result
 * 
 *     def getOpenvars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are opened (not assigned yet)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getOpenvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":360
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNStairlinkingvars(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are assigned to stairlinking variables of the specified block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_67getNStairlinkingvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_66getNStairlinkingvars, "PartialDecomposition.getNStairlinkingvars(self, int block_id)\n\ngets number of variables that are assigned to stairlinking variables of the specified block\n\n:param block_id: id of the block the number of stairlinking variables is asked for\n:return: number of stairlinking variables\n\n.. note:: if a stairlinking variable links block i and i+1 it is only stored in vector of block i");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_67getNStairlinkingvars = {"getNStairlinkingvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_67getNStairlinkingvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_66getNStairlinkingvars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_67getNStairlinkingvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNStairlinkingvars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 360, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 360, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getNStairlinkingvars", 0) < (0)) __PYX_ERR(8, 360, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getNStairlinkingvars", 1, 1, 1, i); __PYX_ERR(8, 360, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 360, __pyx_L3_error)
    }
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 360, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getNStairlinkingvars", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 360, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNStairlinkingvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_66getNStairlinkingvars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_block_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_66getNStairlinkingvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNStairlinkingvars", 0);

  /* "src/pygcgopt/decomposition.pxi":368
 *         .. note:: if a stairlinking variable links block i and i+1 it is only stored in vector of block i
 *         """
 *         cdef int result = self.thisptr.getNStairlinkingvars(block_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNStairlinkingvars(__pyx_v_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 368, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":369
 *         """
 *         cdef int result = self.thisptr.getNStairlinkingvars(block_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     #def getStairlinkingvars(self, int block_id):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":360
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNStairlinkingvars(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are assigned to stairlinking variables of the specified block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNStairlinkingvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":383
 *     #    return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getConssForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are assigned to the specified block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_69getConssForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_68getConssForBlock, "PartialDecomposition.getConssForBlock(self, int block_id)\n\ngets a list of constraints that are assigned to the specified block\n\n:param block_id: id of the block the constraints is asked for\n:return: list of constraints");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_69getConssForBlock = {"getConssForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_69getConssForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_68getConssForBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_69getConssForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getConssForBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 383, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 383, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getConssForBlock", 0) < (0)) __PYX_ERR(8, 383, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getConssForBlock", 1, 1, 1, i); __PYX_ERR(8, 383, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 383, __pyx_L3_error)
    }
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 383, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getConssForBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 383, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getConssForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_68getConssForBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_block_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_68getConssForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id) {
  std::vector<int>  __pyx_v_result;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  int __pyx_8genexpr5__pyx_v_consIndex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  gcg::DETPROBDATA *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::vector<int> ::iterator __pyx_t_4;
  int __pyx_t_5;
  SCIP_CONS *__pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getConssForBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":389
 *         :return: list of constraints
 *         """
 *         cdef vector[int] result = self.thisptr.getConssForBlock(block_id)             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getConssForBlock(__pyx_v_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 389, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":390
 *         """
 *         cdef vector[int] result = self.thisptr.getConssForBlock(block_id)
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 390, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":391
 *         cdef vector[int] result = self.thisptr.getConssForBlock(block_id)
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]             # <<<<<<<<<<<<<<
 * 
 *     def getConssForBlocks(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 391, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_v_result.begin();
    for (; __pyx_t_4 != __pyx_v_result.end(); ++__pyx_t_4) {
      __pyx_t_5 = *__pyx_t_4;
      __pyx_8genexpr5__pyx_v_consIndex = __pyx_t_5;
      try {
        __pyx_t_6 = __pyx_v_det_prob_data->getCons(__pyx_8genexpr5__pyx_v_consIndex);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(8, 391, __pyx_L1_error)
      }
      __pyx_t_7 = __pyx_vtabptr_9pyscipopt_4scip_Constraint->create(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 391, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(8, 391, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":383
 *     #    return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getConssForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are assigned to the specified block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getConssForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":393
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getConssForBlocks(self):             # <<<<<<<<<<<<<<
 *         cdef vector[vector[int]] result = self.thisptr.getConssForBlocks()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_71getConssForBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_70getConssForBlocks, "PartialDecomposition.getConssForBlocks(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_71getConssForBlocks = {"getConssForBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_71getConssForBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_70getConssForBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_71getConssForBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getConssForBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getConssForBlocks", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getConssForBlocks", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_70getConssForBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_70getConssForBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<std::vector<int> >  __pyx_v_result;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  std::vector<int>  __pyx_8genexpr6__pyx_v_block;
  int __pyx_8genexpr7__pyx_v_consIndex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<std::vector<int> >  __pyx_t_1;
  gcg::DETPROBDATA *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::vector<std::vector<int> > ::iterator __pyx_t_4;
  std::vector<int>  __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  std::vector<int> ::iterator __pyx_t_7;
  int __pyx_t_8;
  SCIP_CONS *__pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getConssForBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":394
 * 
 *     def getConssForBlocks(self):
 *         cdef vector[vector[int]] result = self.thisptr.getConssForBlocks()             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [[Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in block] for block in result]
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getConssForBlocks();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 394, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":395
 *     def getConssForBlocks(self):
 *         cdef vector[vector[int]] result = self.thisptr.getConssForBlocks()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return [[Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in block] for block in result]
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 395, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":396
 *         cdef vector[vector[int]] result = self.thisptr.getConssForBlocks()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [[Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in block] for block in result]             # <<<<<<<<<<<<<<
 * 
 *     def getNVarsForBlock(self, int block_id):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 396, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_v_result.begin();
    for (; __pyx_t_4 != __pyx_v_result.end(); ++__pyx_t_4) {
      __pyx_t_5 = *__pyx_t_4;
      __pyx_8genexpr6__pyx_v_block = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_5);
      { /* enter inner scope */
        __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 396, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __pyx_8genexpr6__pyx_v_block.begin();
        for (; __pyx_t_7 != __pyx_8genexpr6__pyx_v_block.end(); ++__pyx_t_7) {
          __pyx_t_8 = *__pyx_t_7;
          __pyx_8genexpr7__pyx_v_consIndex = __pyx_t_8;
          try {
            __pyx_t_9 = __pyx_v_det_prob_data->getCons(__pyx_8genexpr7__pyx_v_consIndex);
          } catch(...) {
            __Pyx_CppExn2PyErr();
            __PYX_ERR(8, 396, __pyx_L1_error)
          }
          __pyx_t_10 = __pyx_vtabptr_9pyscipopt_4scip_Constraint->create(__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(8, 396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_10))) __PYX_ERR(8, 396, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
      } /* exit inner scope */
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(8, 396, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":393
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getConssForBlocks(self):             # <<<<<<<<<<<<<<
 *         cdef vector[vector[int]] result = self.thisptr.getConssForBlocks()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getConssForBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":398
 *         return [[Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in block] for block in result]
 * 
 *     def getNVarsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are assigned to the specified block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_73getNVarsForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_72getNVarsForBlock, "PartialDecomposition.getNVarsForBlock(self, int block_id)\n\ngets number of variables that are assigned to the specified block\n\n:param block_id: id of the block the number of variables is asked for\n:return: number of variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_73getNVarsForBlock = {"getNVarsForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_73getNVarsForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_72getNVarsForBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_73getNVarsForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVarsForBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 398, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 398, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getNVarsForBlock", 0) < (0)) __PYX_ERR(8, 398, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getNVarsForBlock", 1, 1, 1, i); __PYX_ERR(8, 398, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 398, __pyx_L3_error)
    }
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 398, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getNVarsForBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 398, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNVarsForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_72getNVarsForBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_block_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_72getNVarsForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNVarsForBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":404
 *         :return: number of variables
 *         """
 *         cdef int result = self.thisptr.getNVarsForBlock(block_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNVarsForBlock(__pyx_v_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 404, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":405
 *         """
 *         cdef int result = self.thisptr.getNVarsForBlock(block_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getVarsForBlock(self, int block_id):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":398
 *         return [[Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in block] for block in result]
 * 
 *     def getNVarsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are assigned to the specified block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNVarsForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":407
 *         return result
 * 
 *     def getVarsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to the specified block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_75getVarsForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_74getVarsForBlock, "PartialDecomposition.getVarsForBlock(self, int block_id)\n\ngets a list of variables that are assigned to the specified block\n\n:param block_id: id of the block the variables is asked for\n:return: list of variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_75getVarsForBlock = {"getVarsForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_75getVarsForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_74getVarsForBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_75getVarsForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getVarsForBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 407, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 407, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getVarsForBlock", 0) < (0)) __PYX_ERR(8, 407, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getVarsForBlock", 1, 1, 1, i); __PYX_ERR(8, 407, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 407, __pyx_L3_error)
    }
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 407, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getVarsForBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 407, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getVarsForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_74getVarsForBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_block_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_74getVarsForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id) {
  std::vector<int>  __pyx_v_result;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  int __pyx_8genexpr8__pyx_v_varIndex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  gcg::DETPROBDATA *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::vector<int> ::iterator __pyx_t_4;
  int __pyx_t_5;
  SCIP_VAR *__pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getVarsForBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":413
 *         :return: list of variables
 *         """
 *         cdef vector[int] result = self.thisptr.getVarsForBlock(block_id)             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getVarsForBlock(__pyx_v_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 413, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":414
 *         """
 *         cdef vector[int] result = self.thisptr.getVarsForBlock(block_id)
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 414, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_2;

  /* "src/pygcgopt/decomposition.pxi":415
 *         cdef vector[int] result = self.thisptr.getVarsForBlock(block_id)
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]             # <<<<<<<<<<<<<<
 * 
 *     def setConsToMaster(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_v_result.begin();
    for (; __pyx_t_4 != __pyx_v_result.end(); ++__pyx_t_4) {
      __pyx_t_5 = *__pyx_t_4;
      __pyx_8genexpr8__pyx_v_varIndex = __pyx_t_5;
      try {
        __pyx_t_6 = __pyx_v_det_prob_data->getVar(__pyx_8genexpr8__pyx_v_varIndex);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(8, 415, __pyx_L1_error)
      }
      __pyx_t_7 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 415, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(8, 415, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":407
 *         return result
 * 
 *     def getVarsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to the specified block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getVarsForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":417
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def setConsToMaster(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """adds constraint to the master constraints, does not delete this constraint from list of open constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_77setConsToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_76setConsToMaster, "PartialDecomposition.setConsToMaster(self, Constraint cons)\n\nadds constraint to the master constraints, does not delete this constraint from list of open constraints\n\n:param cons: scip#Constraint to add\n:type cons: Constraint");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_77setConsToMaster = {"setConsToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_77setConsToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_76setConsToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_77setConsToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setConsToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 417, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 417, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setConsToMaster", 0) < (0)) __PYX_ERR(8, 417, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setConsToMaster", 1, 1, 1, i); __PYX_ERR(8, 417, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 417, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setConsToMaster", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 417, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setConsToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(8, 417, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_76setConsToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_76setConsToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setConsToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":423
 *         :type cons: Constraint
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.setConsToMaster(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 423, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":424
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.setConsToMaster(det_prob_data.getIndexForCons(cons.scip_cons))             # <<<<<<<<<<<<<<
 * 
 *     def setVarToBlockId(self, Variable var, int block_id):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForCons(__pyx_v_cons->scip_cons);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 424, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->setConsToMaster(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 424, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":417
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def setConsToMaster(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """adds constraint to the master constraints, does not delete this constraint from list of open constraints
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setConsToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":426
 *         self.thisptr.setConsToMaster(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def setVarToBlockId(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables, does not delete this variable from list of open variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_79setVarToBlockId(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_78setVarToBlockId, "PartialDecomposition.setVarToBlockId(self, Variable var, int block_id)\n\nadds variable to the linking variables, does not delete this variable from list of open variables\n\n:param var: scip#Variable to add\n:type var: Variable\n:param block_id: id of block to add\n:type block_id: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_79setVarToBlockId = {"setVarToBlockId", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_79setVarToBlockId, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_78setVarToBlockId};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_79setVarToBlockId(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setVarToBlockId (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 426, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 426, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 426, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setVarToBlockId", 0) < (0)) __PYX_ERR(8, 426, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setVarToBlockId", 1, 2, 2, i); __PYX_ERR(8, 426, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 426, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 426, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 426, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setVarToBlockId", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 426, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarToBlockId", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 426, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_78setVarToBlockId(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var, __pyx_v_block_id);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_78setVarToBlockId(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_block_id) {
  int __pyx_v_cpp_block_id;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setVarToBlockId", 0);

  /* "src/pygcgopt/decomposition.pxi":434
 *         :type block_id: int
 *         """
 *         cdef int cpp_block_id = block_id             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.setVarToBlock(det_prob_data.getIndexForVar(var.scip_var), cpp_block_id)
*/
  __pyx_v_cpp_block_id = __pyx_v_block_id;

  /* "src/pygcgopt/decomposition.pxi":435
 *         """
 *         cdef int cpp_block_id = block_id
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.setVarToBlock(det_prob_data.getIndexForVar(var.scip_var), cpp_block_id)
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 435, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":436
 *         cdef int cpp_block_id = block_id
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.setVarToBlock(det_prob_data.getIndexForVar(var.scip_var), cpp_block_id)             # <<<<<<<<<<<<<<
 * 
 *     def setVarToLinking(self, Variable var):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 436, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->setVarToBlock(__pyx_t_2, __pyx_v_cpp_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 436, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":426
 *         self.thisptr.setConsToMaster(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def setVarToBlockId(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables, does not delete this variable from list of open variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarToBlockId", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":438
 *         self.thisptr.setVarToBlock(det_prob_data.getIndexForVar(var.scip_var), cpp_block_id)
 * 
 *     def setVarToLinking(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables, does not delete this variable from list of open variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_81setVarToLinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_80setVarToLinking, "PartialDecomposition.setVarToLinking(self, Variable var)\n\nadds variable to the linking variables, does not delete this variable from list of open variables\n\n:param var: scip#Variable to add\n:type var: Variable");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_81setVarToLinking = {"setVarToLinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_81setVarToLinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_80setVarToLinking};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_81setVarToLinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setVarToLinking (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 438, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 438, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setVarToLinking", 0) < (0)) __PYX_ERR(8, 438, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setVarToLinking", 1, 1, 1, i); __PYX_ERR(8, 438, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 438, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setVarToLinking", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 438, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarToLinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 438, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_80setVarToLinking(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_80setVarToLinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setVarToLinking", 0);

  /* "src/pygcgopt/decomposition.pxi":444
 *         :type var: Variable
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.setVarToLinking(det_prob_data.getIndexForVar(var.scip_var))
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 444, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":445
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.setVarToLinking(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 * 
 *     def fixVarToLinking(self, Variable var):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 445, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->setVarToLinking(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 445, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":438
 *         self.thisptr.setVarToBlock(det_prob_data.getIndexForVar(var.scip_var), cpp_block_id)
 * 
 *     def setVarToLinking(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables, does not delete this variable from list of open variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarToLinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":447
 *         self.thisptr.setVarToLinking(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def fixVarToLinking(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_83fixVarToLinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_82fixVarToLinking, "PartialDecomposition.fixVarToLinking(self, Variable var)\n\nadds variable to the linking variables\n\n:param var: scip#Variable to add\n:type var: Variable");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_83fixVarToLinking = {"fixVarToLinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_83fixVarToLinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_82fixVarToLinking};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_83fixVarToLinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixVarToLinking (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 447, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 447, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixVarToLinking", 0) < (0)) __PYX_ERR(8, 447, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixVarToLinking", 1, 1, 1, i); __PYX_ERR(8, 447, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 447, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixVarToLinking", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 447, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixVarToLinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 447, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_82fixVarToLinking(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_82fixVarToLinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fixVarToLinking", 0);

  /* "src/pygcgopt/decomposition.pxi":453
 *         :type var: Variable
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.fixVarToLinking(det_prob_data.getIndexForVar(var.scip_var))
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 453, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":454
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.fixVarToLinking(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 * 
 *     def setVarToMaster(self, Variable var):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 454, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->fixVarToLinking(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 454, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":447
 *         self.thisptr.setVarToLinking(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def fixVarToLinking(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixVarToLinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":456
 *         self.thisptr.fixVarToLinking(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setVarToMaster(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the master variables, does not delete this variable from list of open variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_85setVarToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_84setVarToMaster, "PartialDecomposition.setVarToMaster(self, Variable var)\n\nadds variable to the master variables, does not delete this variable from list of open variables\n\nmaster variables hit only constraints in the master\n\n:param var: scip#Variable to add\n:type var: Variable");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_85setVarToMaster = {"setVarToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_85setVarToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_84setVarToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_85setVarToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setVarToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 456, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 456, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setVarToMaster", 0) < (0)) __PYX_ERR(8, 456, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setVarToMaster", 1, 1, 1, i); __PYX_ERR(8, 456, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 456, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setVarToMaster", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 456, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 456, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_84setVarToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_84setVarToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setVarToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":464
 *         :type var: Variable
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.setVarToMaster(det_prob_data.getIndexForVar(var.scip_var))
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 464, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":465
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.setVarToMaster(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 * 
 *     def fixVarToMaster(self, Variable var):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 465, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->setVarToMaster(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 465, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":456
 *         self.thisptr.fixVarToLinking(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setVarToMaster(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the master variables, does not delete this variable from list of open variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":467
 *         self.thisptr.setVarToMaster(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def fixVarToMaster(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the master variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_87fixVarToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_86fixVarToMaster, "PartialDecomposition.fixVarToMaster(self, Variable var)\n\nadds variable to the master variables\n\nmaster variables hit only constraints in the master\n\n:param var: scip#Variable to add\n:type var: Variable");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_87fixVarToMaster = {"fixVarToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_87fixVarToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_86fixVarToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_87fixVarToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixVarToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 467, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 467, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixVarToMaster", 0) < (0)) __PYX_ERR(8, 467, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixVarToMaster", 1, 1, 1, i); __PYX_ERR(8, 467, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 467, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixVarToMaster", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 467, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixVarToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 467, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_86fixVarToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_86fixVarToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fixVarToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":475
 *         :type var: Variable
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.fixVarToMaster(det_prob_data.getIndexForVar(var.scip_var))
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 475, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":476
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.fixVarToMaster(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 * 
 *     def setVarToStairlinking(self, Variable var, int block1_id, int block2_id):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 476, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->fixVarToMaster(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 476, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":467
 *         self.thisptr.setVarToMaster(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def fixVarToMaster(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the master variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixVarToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":478
 *         self.thisptr.fixVarToMaster(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setVarToStairlinking(self, Variable var, int block1_id, int block2_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the stairlinking variables, does not delete this variable from list of open variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_89setVarToStairlinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_88setVarToStairlinking, "PartialDecomposition.setVarToStairlinking(self, Variable var, int block1_id, int block2_id)\n\nadds variable to the stairlinking variables, does not delete this variable from list of open variables\n\n:param var: scip#Variable to add\n:type var: Variable\n:param block1_id: id of block one\n:type block1_id: int\n:param block2_id: id of block two\n:type block2_id: int\n.. note:: stairlinking variables are only registered in block with smaller index");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_89setVarToStairlinking = {"setVarToStairlinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_89setVarToStairlinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_88setVarToStairlinking};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_89setVarToStairlinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  int __pyx_v_block1_id;
  int __pyx_v_block2_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setVarToStairlinking (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,&__pyx_mstate_global->__pyx_n_u_block1_id,&__pyx_mstate_global->__pyx_n_u_block2_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 478, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(8, 478, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 478, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 478, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setVarToStairlinking", 0) < (0)) __PYX_ERR(8, 478, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setVarToStairlinking", 1, 3, 3, i); __PYX_ERR(8, 478, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 478, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 478, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(8, 478, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
    __pyx_v_block1_id = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_block1_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 478, __pyx_L3_error)
    __pyx_v_block2_id = __Pyx_PyLong_As_int(values[2]); if (unlikely((__pyx_v_block2_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 478, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setVarToStairlinking", 1, 3, 3, __pyx_nargs); __PYX_ERR(8, 478, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarToStairlinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 478, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_88setVarToStairlinking(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var, __pyx_v_block1_id, __pyx_v_block2_id);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_88setVarToStairlinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_block1_id, int __pyx_v_block2_id) {
  int __pyx_v_cpp_block1_id;
  int __pyx_v_cpp_block2_id;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setVarToStairlinking", 0);

  /* "src/pygcgopt/decomposition.pxi":489
 *         .. note:: stairlinking variables are only registered in block with smaller index
 *         """
 *         cdef int cpp_block1_id = block1_id             # <<<<<<<<<<<<<<
 *         cdef int cpp_block2_id = block2_id
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
*/
  __pyx_v_cpp_block1_id = __pyx_v_block1_id;

  /* "src/pygcgopt/decomposition.pxi":490
 *         """
 *         cdef int cpp_block1_id = block1_id
 *         cdef int cpp_block2_id = block2_id             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.setVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_block1_id, cpp_block2_id)
*/
  __pyx_v_cpp_block2_id = __pyx_v_block2_id;

  /* "src/pygcgopt/decomposition.pxi":491
 *         cdef int cpp_block1_id = block1_id
 *         cdef int cpp_block2_id = block2_id
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.setVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_block1_id, cpp_block2_id)
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 491, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":492
 *         cdef int cpp_block2_id = block2_id
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.setVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_block1_id, cpp_block2_id)             # <<<<<<<<<<<<<<
 * 
 *     def fixVarToStairlinking(self, Variable var, int firstblock_id):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 492, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->setVarToStairlinking(__pyx_t_2, __pyx_v_cpp_block1_id, __pyx_v_cpp_block2_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 492, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":478
 *         self.thisptr.fixVarToMaster(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setVarToStairlinking(self, Variable var, int block1_id, int block2_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the stairlinking variables, does not delete this variable from list of open variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarToStairlinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":494
 *         self.thisptr.setVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_block1_id, cpp_block2_id)
 * 
 *     def fixVarToStairlinking(self, Variable var, int firstblock_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the stairlinking variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_91fixVarToStairlinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_90fixVarToStairlinking, "PartialDecomposition.fixVarToStairlinking(self, Variable var, int firstblock_id)\n\nadds variable to the stairlinking variables\n\n:param var: scip#Variable to add\n:type var: Variable\n:param firstblock_id: stairlinking variables hit exactly two consecutive blocks, this is the index of the first of these blocks\n:type firstblock_id: int\n.. note:: stairlinking variables are only registered in block with smaller index");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_91fixVarToStairlinking = {"fixVarToStairlinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_91fixVarToStairlinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_90fixVarToStairlinking};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_91fixVarToStairlinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  int __pyx_v_firstblock_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fixVarToStairlinking (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,&__pyx_mstate_global->__pyx_n_u_firstblock_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 494, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 494, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 494, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "fixVarToStairlinking", 0) < (0)) __PYX_ERR(8, 494, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("fixVarToStairlinking", 1, 2, 2, i); __PYX_ERR(8, 494, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 494, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 494, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
    __pyx_v_firstblock_id = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_firstblock_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 494, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fixVarToStairlinking", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 494, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixVarToStairlinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 494, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_90fixVarToStairlinking(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var, __pyx_v_firstblock_id);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_90fixVarToStairlinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_firstblock_id) {
  int __pyx_v_cpp_firstblock_id;
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("fixVarToStairlinking", 0);

  /* "src/pygcgopt/decomposition.pxi":503
 *         .. note:: stairlinking variables are only registered in block with smaller index
 *         """
 *         cdef int cpp_firstblock_id = firstblock_id             # <<<<<<<<<<<<<<
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.fixVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_firstblock_id)
*/
  __pyx_v_cpp_firstblock_id = __pyx_v_firstblock_id;

  /* "src/pygcgopt/decomposition.pxi":504
 *         """
 *         cdef int cpp_firstblock_id = firstblock_id
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.fixVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_firstblock_id)
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 504, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":505
 *         cdef int cpp_firstblock_id = firstblock_id
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.fixVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_firstblock_id)             # <<<<<<<<<<<<<<
 * 
 *     def isConsMastercons(self, Constraint cons):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 505, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->fixVarToStairlinking(__pyx_t_2, __pyx_v_cpp_firstblock_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 505, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":494
 *         self.thisptr.setVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_block1_id, cpp_block2_id)
 * 
 *     def fixVarToStairlinking(self, Variable var, int firstblock_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the stairlinking variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.fixVarToStairlinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":507
 *         self.thisptr.fixVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_firstblock_id)
 * 
 *     def isConsMastercons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """gets whether the constraint is a master constraint
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_93isConsMastercons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_92isConsMastercons, "PartialDecomposition.isConsMastercons(self, Constraint cons)\n\ngets whether the constraint is a master constraint\n\n:param cons: constraint to check if it is master constraint\n:type cons: scip#Constraint\n:return: True iff the constraint is a master constraint");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_93isConsMastercons = {"isConsMastercons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_93isConsMastercons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_92isConsMastercons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_93isConsMastercons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isConsMastercons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 507, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 507, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isConsMastercons", 0) < (0)) __PYX_ERR(8, 507, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isConsMastercons", 1, 1, 1, i); __PYX_ERR(8, 507, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 507, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isConsMastercons", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 507, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isConsMastercons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(8, 507, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_92isConsMastercons(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_92isConsMastercons(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  bool __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isConsMastercons", 0);

  /* "src/pygcgopt/decomposition.pxi":514
 *         :return: True iff the constraint is a master constraint
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         cdef bool result = self.thisptr.isConsMastercons(det_prob_data.getIndexForCons(cons.scip_cons))
 *         return result
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 514, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":515
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isConsMastercons(det_prob_data.getIndexForCons(cons.scip_cons))             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForCons(__pyx_v_cons->scip_cons);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 515, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->isConsMastercons(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 515, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_3;

  /* "src/pygcgopt/decomposition.pxi":516
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isConsMastercons(det_prob_data.getIndexForCons(cons.scip_cons))
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def isConsOpencons(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":507
 *         self.thisptr.fixVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_firstblock_id)
 * 
 *     def isConsMastercons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """gets whether the constraint is a master constraint
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isConsMastercons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":518
 *         return result
 * 
 *     def isConsOpencons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """gets whether the constraint is an open constraint
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_95isConsOpencons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_94isConsOpencons, "PartialDecomposition.isConsOpencons(self, Constraint cons)\n\ngets whether the constraint is an open constraint\n\n:param cons: constraint to check if it is open constraint\n:type cons: scip#Constraint\n:return: True iff the constraint is an open constraint");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_95isConsOpencons = {"isConsOpencons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_95isConsOpencons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_94isConsOpencons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_95isConsOpencons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isConsOpencons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 518, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 518, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isConsOpencons", 0) < (0)) __PYX_ERR(8, 518, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isConsOpencons", 1, 1, 1, i); __PYX_ERR(8, 518, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 518, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isConsOpencons", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 518, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isConsOpencons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(8, 518, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_94isConsOpencons(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_94isConsOpencons(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  bool __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isConsOpencons", 0);

  /* "src/pygcgopt/decomposition.pxi":525
 *         :return: True iff the constraint is an open constraint
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         cdef bool result = self.thisptr.isConsOpencons(det_prob_data.getIndexForCons(cons.scip_cons))
 *         return result
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 525, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":526
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isConsOpencons(det_prob_data.getIndexForCons(cons.scip_cons))             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForCons(__pyx_v_cons->scip_cons);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 526, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->isConsOpencons(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 526, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_3;

  /* "src/pygcgopt/decomposition.pxi":527
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isConsOpencons(det_prob_data.getIndexForCons(cons.scip_cons))
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def isVarBlockvarOfBlock(self, Variable var, int block_id):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 527, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":518
 *         return result
 * 
 *     def isConsOpencons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """gets whether the constraint is an open constraint
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isConsOpencons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":529
 *         return result
 * 
 *     def isVarBlockvarOfBlock(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is assigned to the block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_97isVarBlockvarOfBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_96isVarBlockvarOfBlock, "PartialDecomposition.isVarBlockvarOfBlock(self, Variable var, int block_id)\n\ngets whether the variable is assigned to the block\n\n:param var: variable to check if it is in the specified block\n:type var: scip#Variable\n:param block_id: id of block to check\n:return: True iff the variable is assigned to the specified block");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_97isVarBlockvarOfBlock = {"isVarBlockvarOfBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_97isVarBlockvarOfBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_96isVarBlockvarOfBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_97isVarBlockvarOfBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isVarBlockvarOfBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 529, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 529, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 529, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isVarBlockvarOfBlock", 0) < (0)) __PYX_ERR(8, 529, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isVarBlockvarOfBlock", 1, 2, 2, i); __PYX_ERR(8, 529, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 529, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 529, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 529, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isVarBlockvarOfBlock", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 529, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarBlockvarOfBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 529, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_96isVarBlockvarOfBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var, __pyx_v_block_id);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_96isVarBlockvarOfBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_block_id) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  bool __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isVarBlockvarOfBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":537
 *         :return: True iff the variable is assigned to the specified block
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         cdef bool result = self.thisptr.isVarBlockvarOfBlock(det_prob_data.getIndexForVar(var.scip_var), block_id)
 *         return result
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 537, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":538
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarBlockvarOfBlock(det_prob_data.getIndexForVar(var.scip_var), block_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 538, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->isVarBlockvarOfBlock(__pyx_t_2, __pyx_v_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 538, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_3;

  /* "src/pygcgopt/decomposition.pxi":539
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarBlockvarOfBlock(det_prob_data.getIndexForVar(var.scip_var), block_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def isVarLinkingvar(self, Variable var):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":529
 *         return result
 * 
 *     def isVarBlockvarOfBlock(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is assigned to the block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarBlockvarOfBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":541
 *         return result
 * 
 *     def isVarLinkingvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a linking variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_99isVarLinkingvar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_98isVarLinkingvar, "PartialDecomposition.isVarLinkingvar(self, Variable var)\n\ngets whether the variable is a linking variable\n\n:param var: variable to check if it is in a linking variable\n:type var: scip#Variable\n:return: True iff the variable is a linking var");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_99isVarLinkingvar = {"isVarLinkingvar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_99isVarLinkingvar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_98isVarLinkingvar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_99isVarLinkingvar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isVarLinkingvar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 541, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 541, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isVarLinkingvar", 0) < (0)) __PYX_ERR(8, 541, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isVarLinkingvar", 1, 1, 1, i); __PYX_ERR(8, 541, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 541, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isVarLinkingvar", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 541, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarLinkingvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 541, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_98isVarLinkingvar(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_98isVarLinkingvar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  bool __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isVarLinkingvar", 0);

  /* "src/pygcgopt/decomposition.pxi":548
 *         :return: True iff the variable is a linking var
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         cdef bool result = self.thisptr.isVarLinkingvar(det_prob_data.getIndexForVar(var.scip_var))
 *         return result
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 548, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":549
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarLinkingvar(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 549, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->isVarLinkingvar(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 549, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_3;

  /* "src/pygcgopt/decomposition.pxi":550
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarLinkingvar(det_prob_data.getIndexForVar(var.scip_var))
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def isVarMastervar(self, Variable var):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":541
 *         return result
 * 
 *     def isVarLinkingvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a linking variable
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarLinkingvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":552
 *         return result
 * 
 *     def isVarMastervar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a master variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_101isVarMastervar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_100isVarMastervar, "PartialDecomposition.isVarMastervar(self, Variable var)\n\ngets whether the variable is a master variable\n\n:param var: variable to check if it is a master variable\n:type var: scip#Variable\n:return: True iff the variable is a master variable");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_101isVarMastervar = {"isVarMastervar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_101isVarMastervar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_100isVarMastervar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_101isVarMastervar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isVarMastervar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 552, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 552, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isVarMastervar", 0) < (0)) __PYX_ERR(8, 552, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isVarMastervar", 1, 1, 1, i); __PYX_ERR(8, 552, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 552, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isVarMastervar", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 552, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarMastervar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 552, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_100isVarMastervar(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_100isVarMastervar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  bool __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isVarMastervar", 0);

  /* "src/pygcgopt/decomposition.pxi":559
 *         :return: True iff the variable is a master variable
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         cdef bool result = self.thisptr.isVarMastervar(det_prob_data.getIndexForVar(var.scip_var))
 *         return result
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 559, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":560
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarMastervar(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 560, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->isVarMastervar(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 560, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_3;

  /* "src/pygcgopt/decomposition.pxi":561
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarMastervar(det_prob_data.getIndexForVar(var.scip_var))
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def isVarOpenvar(self, Variable var):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":552
 *         return result
 * 
 *     def isVarMastervar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a master variable
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarMastervar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":563
 *         return result
 * 
 *     def isVarOpenvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is an open variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_103isVarOpenvar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_102isVarOpenvar, "PartialDecomposition.isVarOpenvar(self, Variable var)\n\ngets whether the variable is an open variable\n\n:param var: variable to check if it is an open variable\n:type var: scip#Variable\n:return: True iff the variable is an open variable");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_103isVarOpenvar = {"isVarOpenvar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_103isVarOpenvar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_102isVarOpenvar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_103isVarOpenvar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isVarOpenvar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 563, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 563, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isVarOpenvar", 0) < (0)) __PYX_ERR(8, 563, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isVarOpenvar", 1, 1, 1, i); __PYX_ERR(8, 563, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 563, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isVarOpenvar", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 563, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarOpenvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 563, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_102isVarOpenvar(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_102isVarOpenvar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  bool __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isVarOpenvar", 0);

  /* "src/pygcgopt/decomposition.pxi":570
 *         :return: True iff the variable is an open variable
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         cdef bool result = self.thisptr.isVarOpenvar(det_prob_data.getIndexForVar(var.scip_var))
 *         return result
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 570, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":571
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarOpenvar(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 571, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->isVarOpenvar(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 571, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_3;

  /* "src/pygcgopt/decomposition.pxi":572
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarOpenvar(det_prob_data.getIndexForVar(var.scip_var))
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def isVarStairlinkingvar(self, Variable var):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 572, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":563
 *         return result
 * 
 *     def isVarOpenvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is an open variable
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarOpenvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":574
 *         return result
 * 
 *     def isVarStairlinkingvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a stairlinking variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_105isVarStairlinkingvar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_104isVarStairlinkingvar, "PartialDecomposition.isVarStairlinkingvar(self, Variable var)\n\ngets whether the variable is a stairlinking variable\n\n:param var: variable to check if it is a stairlinking variable\n:type var: scip#Variable\n:return: True iff the variable is a stairlinking variable");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_105isVarStairlinkingvar = {"isVarStairlinkingvar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_105isVarStairlinkingvar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_104isVarStairlinkingvar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_105isVarStairlinkingvar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isVarStairlinkingvar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 574, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 574, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isVarStairlinkingvar", 0) < (0)) __PYX_ERR(8, 574, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isVarStairlinkingvar", 1, 1, 1, i); __PYX_ERR(8, 574, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 574, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isVarStairlinkingvar", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 574, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarStairlinkingvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 574, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_104isVarStairlinkingvar(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_104isVarStairlinkingvar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  bool __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isVarStairlinkingvar", 0);

  /* "src/pygcgopt/decomposition.pxi":581
 *         :return: True iff the variable is a stairlinking variable
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         cdef bool result = self.thisptr.isVarStairlinkingvar(det_prob_data.getIndexForVar(var.scip_var))
 *         return result
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 581, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":582
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarStairlinkingvar(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 582, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->isVarStairlinkingvar(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 582, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_3;

  /* "src/pygcgopt/decomposition.pxi":583
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarStairlinkingvar(det_prob_data.getIndexForVar(var.scip_var))
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def isVarStairlinkingvarOfBlock(self, Variable var, int block_id):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":574
 *         return result
 * 
 *     def isVarStairlinkingvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a stairlinking variable
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarStairlinkingvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":585
 *         return result
 * 
 *     def isVarStairlinkingvarOfBlock(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """checks whether the var is a stairlinkingvar of a specified block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_107isVarStairlinkingvarOfBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_106isVarStairlinkingvarOfBlock, "PartialDecomposition.isVarStairlinkingvarOfBlock(self, Variable var, int block_id)\n\nchecks whether the var is a stairlinkingvar of a specified block\n\n:param var: variable to check if it is a stairlinking variable hitting the specified block\n:type var: scip#Variable\n:param block_id: id of block to check\n:return: True iff the variable is a stairlinking variable of the specified block");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_107isVarStairlinkingvarOfBlock = {"isVarStairlinkingvarOfBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_107isVarStairlinkingvarOfBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_106isVarStairlinkingvarOfBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_107isVarStairlinkingvarOfBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isVarStairlinkingvarOfBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 585, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 585, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 585, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isVarStairlinkingvarOfBlock", 0) < (0)) __PYX_ERR(8, 585, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isVarStairlinkingvarOfBlock", 1, 2, 2, i); __PYX_ERR(8, 585, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 585, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 585, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 585, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isVarStairlinkingvarOfBlock", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 585, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarStairlinkingvarOfBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 585, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_106isVarStairlinkingvarOfBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var, __pyx_v_block_id);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_106isVarStairlinkingvarOfBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var, int __pyx_v_block_id) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  bool __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isVarStairlinkingvarOfBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":593
 *         :return: True iff the variable is a stairlinking variable of the specified block
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         cdef bool result = self.thisptr.isVarStairlinkingvarOfBlock(det_prob_data.getIndexForVar(var.scip_var), block_id)
 *         return result
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 593, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":594
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarStairlinkingvarOfBlock(det_prob_data.getIndexForVar(var.scip_var), block_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 594, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->isVarStairlinkingvarOfBlock(__pyx_t_2, __pyx_v_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 594, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_3;

  /* "src/pygcgopt/decomposition.pxi":595
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         cdef bool result = self.thisptr.isVarStairlinkingvarOfBlock(det_prob_data.getIndexForVar(var.scip_var), block_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def deleteOpencons(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":585
 *         return result
 * 
 *     def isVarStairlinkingvarOfBlock(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """checks whether the var is a stairlinkingvar of a specified block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isVarStairlinkingvarOfBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":597
 *         return result
 * 
 *     def deleteOpencons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """deletes constraint from list of open constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_109deleteOpencons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_108deleteOpencons, "PartialDecomposition.deleteOpencons(self, Constraint cons)\n\ndeletes constraint from list of open constraints\n\n:param cons: scip#Constraint that is not considered open anymore\n:type cons: Constraint");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_109deleteOpencons = {"deleteOpencons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_109deleteOpencons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_108deleteOpencons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_109deleteOpencons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("deleteOpencons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 597, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 597, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "deleteOpencons", 0) < (0)) __PYX_ERR(8, 597, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("deleteOpencons", 1, 1, 1, i); __PYX_ERR(8, 597, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 597, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("deleteOpencons", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 597, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.deleteOpencons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(8, 597, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_108deleteOpencons(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_108deleteOpencons(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("deleteOpencons", 0);

  /* "src/pygcgopt/decomposition.pxi":603
 *         :type cons: Constraint
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.deleteOpencons(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 603, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":604
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.deleteOpencons(det_prob_data.getIndexForCons(cons.scip_cons))             # <<<<<<<<<<<<<<
 * 
 *     def deleteOpenvar(self, Variable var):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForCons(__pyx_v_cons->scip_cons);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 604, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->deleteOpencons(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 604, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":597
 *         return result
 * 
 *     def deleteOpencons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """deletes constraint from list of open constraints
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.deleteOpencons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":606
 *         self.thisptr.deleteOpencons(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def deleteOpenvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """deletes variable from the list of open variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_111deleteOpenvar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_110deleteOpenvar, "PartialDecomposition.deleteOpenvar(self, Variable var)\n\ndeletes variable from the list of open variables\n\n:param var: scip#Variable that is not considered open anymore\n:type var: Variable");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_111deleteOpenvar = {"deleteOpenvar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_111deleteOpenvar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_110deleteOpenvar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_111deleteOpenvar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("deleteOpenvar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 606, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 606, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "deleteOpenvar", 0) < (0)) __PYX_ERR(8, 606, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("deleteOpenvar", 1, 1, 1, i); __PYX_ERR(8, 606, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 606, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("deleteOpenvar", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 606, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.deleteOpenvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(8, 606, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_110deleteOpenvar(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_110deleteOpenvar(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("deleteOpenvar", 0);

  /* "src/pygcgopt/decomposition.pxi":612
 *         :type var: Variable
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.deleteOpenvar(det_prob_data.getIndexForVar(var.scip_var))
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 612, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":613
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.deleteOpenvar(det_prob_data.getIndexForVar(var.scip_var))             # <<<<<<<<<<<<<<
 * 
 *     def setUsergiven(self, USERGIVEN value=COMPLETED_CONSTOMASTER):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 613, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->deleteOpenvar(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 613, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":606
 *         self.thisptr.deleteOpencons(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def deleteOpenvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """deletes variable from the list of open variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.deleteOpenvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":615
 *         self.thisptr.deleteOpenvar(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setUsergiven(self, USERGIVEN value=COMPLETED_CONSTOMASTER):             # <<<<<<<<<<<<<<
 *         self.thisptr.setUsergiven(value)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_113setUsergiven(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_112setUsergiven, "PartialDecomposition.setUsergiven(self, USERGIVEN value=COMPLETED_CONSTOMASTER)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_113setUsergiven = {"setUsergiven", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_113setUsergiven, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_112setUsergiven};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_113setUsergiven(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  gcg::USERGIVEN __pyx_v_value;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setUsergiven (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 615, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 615, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setUsergiven", 0) < (0)) __PYX_ERR(8, 615, __pyx_L3_error)
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 615, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_value = ((gcg::USERGIVEN)__Pyx_PyLong_As_gcg_3a__3a_USERGIVEN(values[0])); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 615, __pyx_L3_error)
    } else {
      __pyx_v_value = __pyx_mstate_global->__pyx_k_;
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setUsergiven", 0, 0, 1, __pyx_nargs); __PYX_ERR(8, 615, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setUsergiven", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_112setUsergiven(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_value);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_112setUsergiven(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, gcg::USERGIVEN __pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setUsergiven", 0);

  /* "src/pygcgopt/decomposition.pxi":616
 * 
 *     def setUsergiven(self, USERGIVEN value=COMPLETED_CONSTOMASTER):
 *         self.thisptr.setUsergiven(value)             # <<<<<<<<<<<<<<
 * 
 *     def getUsergiven(self):
*/
  try {
    __pyx_v_self->thisptr->setUsergiven(__pyx_v_value);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 616, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":615
 *         self.thisptr.deleteOpenvar(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setUsergiven(self, USERGIVEN value=COMPLETED_CONSTOMASTER):             # <<<<<<<<<<<<<<
 *         self.thisptr.setUsergiven(value)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setUsergiven", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":618
 *         self.thisptr.setUsergiven(value)
 * 
 *     def getUsergiven(self):             # <<<<<<<<<<<<<<
 *         """gets the PY_USERGIVEN status of this partialdecs
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_115getUsergiven(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_114getUsergiven, "PartialDecomposition.getUsergiven(self)\n\ngets the PY_USERGIVEN status of this partialdecs\n\n:return: the PY_USERGIVEN status of this partialdecs");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_115getUsergiven = {"getUsergiven", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_115getUsergiven, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_114getUsergiven};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_115getUsergiven(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getUsergiven (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getUsergiven", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getUsergiven", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_114getUsergiven(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_114getUsergiven(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::USERGIVEN __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getUsergiven", 0);

  /* "src/pygcgopt/decomposition.pxi":623
 *         :return: the PY_USERGIVEN status of this partialdecs
 *         """
 *         return self.thisptr.getUsergiven()             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getUsergiven();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 623, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_USERGIVEN(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":618
 *         self.thisptr.setUsergiven(value)
 * 
 *     def getUsergiven(self):             # <<<<<<<<<<<<<<
 *         """gets the PY_USERGIVEN status of this partialdecs
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getUsergiven", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":625
 *         return self.thisptr.getUsergiven()
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def max_white_score(self):
 *         """gets the maximum white area score
*/

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

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

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

  /* "src/pygcgopt/decomposition.pxi":634
 *         :return: maximum  white area score
 *         """
 *         return self.thisptr.getMaxWhiteScore()             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getMaxWhiteScore();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 634, __pyx_L1_error)
  }
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":625
 *         return self.thisptr.getUsergiven()
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def max_white_score(self):
 *         """gets the maximum white area score
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.max_white_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":636
 *         return self.thisptr.getMaxWhiteScore()
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def classic_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("classic")))
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_13classic_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":638
 *     @property
 *     def classic_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("classic")))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 638, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_n_u_classic};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 638, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 638, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":636
 *         return self.thisptr.getMaxWhiteScore()
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def classic_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("classic")))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.classic_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":640
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("classic")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def border_area_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("border area")))
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_17border_area_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":642
 *     @property
 *     def border_area_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("border area")))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 642, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_border_area};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 642, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 642, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":640
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("classic")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def border_area_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("border area")))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.border_area_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":644
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("border area")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def max_for_white_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white")))
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_19max_for_white_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":646
 *     @property
 *     def max_for_white_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white")))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 646, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_max_foreseeing_white};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 646, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 646, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":644
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("border area")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def max_for_white_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white")))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.max_for_white_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":648
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def set_part_for_white_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white with aggregation info")))
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_24set_part_for_white_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":650
 *     @property
 *     def set_part_for_white_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white with aggregation info")))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 650, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_ppc_max_white_with_aggregation_i};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 650, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 650, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":648
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def set_part_for_white_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white with aggregation info")))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.set_part_for_white_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":652
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white with aggregation info")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def max_for_white_agg_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white with aggregation info")))
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_23max_for_white_agg_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":654
 *     @property
 *     def max_for_white_agg_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white with aggregation info")))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 654, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_max_foreseeing_white_with_aggreg};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 654, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 654, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":652
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white with aggregation info")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def max_for_white_agg_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white with aggregation info")))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.max_for_white_agg_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":656
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white with aggregation info")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def set_part_for_white_agg_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white")))
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_28set_part_for_white_agg_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":658
 *     @property
 *     def set_part_for_white_agg_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white")))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 658, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_ppc_max_white};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 658, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 658, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":656
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("max foreseeing white with aggregation info")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def set_part_for_white_agg_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white")))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.set_part_for_white_agg_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":660
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def benders_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("experimental benders score")))
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_13benders_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":662
 *     @property
 *     def benders_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("experimental benders score")))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 662, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_experimental_benders_score};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 662, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 662, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 662, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":660
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("ppc-max-white")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def benders_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("experimental benders score")))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.benders_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":664
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("experimental benders score")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def strong_decomp_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("strong decomposition score")))
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_19strong_decomp_score___get__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/pygcgopt/decomposition.pxi":666
 *     @property
 *     def strong_decomp_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("strong decomposition score")))             # <<<<<<<<<<<<<<
 * 
 *     def addClockTime(self, double clocktime):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 666, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 666, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_strong_decomposition_score};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 666, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 666, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 666, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":664
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("experimental benders score")))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def strong_decomp_score(self):
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("strong decomposition score")))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.strong_decomp_score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":668
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("strong decomposition score")))
 * 
 *     def addClockTime(self, double clocktime):             # <<<<<<<<<<<<<<
 *         """adds detection time of one detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_117addClockTime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_116addClockTime, "PartialDecomposition.addClockTime(self, double clocktime)\n\nadds detection time of one detector\n\nincorporates the needed time of some detector in the detector chain.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_117addClockTime = {"addClockTime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_117addClockTime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_116addClockTime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_117addClockTime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_clocktime;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addClockTime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_clocktime,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 668, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 668, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addClockTime", 0) < (0)) __PYX_ERR(8, 668, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addClockTime", 1, 1, 1, i); __PYX_ERR(8, 668, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 668, __pyx_L3_error)
    }
    __pyx_v_clocktime = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_clocktime == (double)-1) && PyErr_Occurred())) __PYX_ERR(8, 668, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addClockTime", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 668, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addClockTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_116addClockTime(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_clocktime);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_116addClockTime(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_clocktime) {
  double __pyx_v_cpp_clocktime;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addClockTime", 0);

  /* "src/pygcgopt/decomposition.pxi":673
 *         incorporates the needed time of some detector in the detector chain.
 *         """
 *         cdef double cpp_clocktime = clocktime             # <<<<<<<<<<<<<<
 *         self.thisptr.addClockTime(cpp_clocktime)
 * 
*/
  __pyx_v_cpp_clocktime = __pyx_v_clocktime;

  /* "src/pygcgopt/decomposition.pxi":674
 *         """
 *         cdef double cpp_clocktime = clocktime
 *         self.thisptr.addClockTime(cpp_clocktime)             # <<<<<<<<<<<<<<
 * 
 *     def addPctConssFromFree(self, double pct):
*/
  try {
    __pyx_v_self->thisptr->addClockTime(__pyx_v_cpp_clocktime);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 674, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":668
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("strong decomposition score")))
 * 
 *     def addClockTime(self, double clocktime):             # <<<<<<<<<<<<<<
 *         """adds detection time of one detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addClockTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":676
 *         self.thisptr.addClockTime(cpp_clocktime)
 * 
 *     def addPctConssFromFree(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of closed constraints
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_119addPctConssFromFree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_118addPctConssFromFree, "PartialDecomposition.addPctConssFromFree(self, double pct)\n\nadds percentage of closed constraints\n\nbookkeeping information: fraction of constraints that are not longer open for a detector added to detector chain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_119addPctConssFromFree = {"addPctConssFromFree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_119addPctConssFromFree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_118addPctConssFromFree};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_119addPctConssFromFree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_pct;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPctConssFromFree (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pct,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 676, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 676, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPctConssFromFree", 0) < (0)) __PYX_ERR(8, 676, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPctConssFromFree", 1, 1, 1, i); __PYX_ERR(8, 676, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 676, __pyx_L3_error)
    }
    __pyx_v_pct = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_pct == (double)-1) && PyErr_Occurred())) __PYX_ERR(8, 676, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPctConssFromFree", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 676, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctConssFromFree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_118addPctConssFromFree(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_pct);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_118addPctConssFromFree(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct) {
  double __pyx_v_cpp_pct;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPctConssFromFree", 0);

  /* "src/pygcgopt/decomposition.pxi":681
 *         bookkeeping information: fraction of constraints that are not longer open for a detector added to detector chain
 *         """
 *         cdef double cpp_pct = pct             # <<<<<<<<<<<<<<
 *         self.thisptr.addPctConssFromFree(cpp_pct)
 * 
*/
  __pyx_v_cpp_pct = __pyx_v_pct;

  /* "src/pygcgopt/decomposition.pxi":682
 *         """
 *         cdef double cpp_pct = pct
 *         self.thisptr.addPctConssFromFree(cpp_pct)             # <<<<<<<<<<<<<<
 * 
 *     def addPctConssToBlock(self, double pct):
*/
  try {
    __pyx_v_self->thisptr->addPctConssFromFree(__pyx_v_cpp_pct);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 682, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":676
 *         self.thisptr.addClockTime(cpp_clocktime)
 * 
 *     def addPctConssFromFree(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of closed constraints
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctConssFromFree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":684
 *         self.thisptr.addPctConssFromFree(cpp_pct)
 * 
 *     def addPctConssToBlock(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of constraints assigned to blocks
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_121addPctConssToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_120addPctConssToBlock, "PartialDecomposition.addPctConssToBlock(self, double pct)\n\nadds percentage of constraints assigned to blocks\n\nbookkeeping information: adds fraction of constraints assigned to a block for a detector added to detector chain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_121addPctConssToBlock = {"addPctConssToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_121addPctConssToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_120addPctConssToBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_121addPctConssToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_pct;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPctConssToBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pct,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 684, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 684, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPctConssToBlock", 0) < (0)) __PYX_ERR(8, 684, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPctConssToBlock", 1, 1, 1, i); __PYX_ERR(8, 684, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 684, __pyx_L3_error)
    }
    __pyx_v_pct = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_pct == (double)-1) && PyErr_Occurred())) __PYX_ERR(8, 684, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPctConssToBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 684, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctConssToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_120addPctConssToBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_pct);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_120addPctConssToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct) {
  double __pyx_v_cpp_pct;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPctConssToBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":689
 *         bookkeeping information: adds fraction of constraints assigned to a block for a detector added to detector chain
 *         """
 *         cdef double cpp_pct = pct             # <<<<<<<<<<<<<<
 *         self.thisptr.addPctConssToBlock(cpp_pct)
 * 
*/
  __pyx_v_cpp_pct = __pyx_v_pct;

  /* "src/pygcgopt/decomposition.pxi":690
 *         """
 *         cdef double cpp_pct = pct
 *         self.thisptr.addPctConssToBlock(cpp_pct)             # <<<<<<<<<<<<<<
 * 
 *     def addPctConssToBorder(self, double pct):
*/
  try {
    __pyx_v_self->thisptr->addPctConssToBlock(__pyx_v_cpp_pct);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 690, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":684
 *         self.thisptr.addPctConssFromFree(cpp_pct)
 * 
 *     def addPctConssToBlock(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of constraints assigned to blocks
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctConssToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":692
 *         self.thisptr.addPctConssToBlock(cpp_pct)
 * 
 *     def addPctConssToBorder(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of constraints assigned to border
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_123addPctConssToBorder(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_122addPctConssToBorder, "PartialDecomposition.addPctConssToBorder(self, double pct)\n\nadds percentage of constraints assigned to border\n\nbookkeeping information: adds fraction of constraints assigned to the border for a detector added to detector chain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_123addPctConssToBorder = {"addPctConssToBorder", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_123addPctConssToBorder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_122addPctConssToBorder};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_123addPctConssToBorder(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_pct;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPctConssToBorder (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pct,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 692, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 692, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPctConssToBorder", 0) < (0)) __PYX_ERR(8, 692, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPctConssToBorder", 1, 1, 1, i); __PYX_ERR(8, 692, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 692, __pyx_L3_error)
    }
    __pyx_v_pct = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_pct == (double)-1) && PyErr_Occurred())) __PYX_ERR(8, 692, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPctConssToBorder", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 692, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctConssToBorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_122addPctConssToBorder(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_pct);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_122addPctConssToBorder(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct) {
  double __pyx_v_cpp_pct;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPctConssToBorder", 0);

  /* "src/pygcgopt/decomposition.pxi":697
 *         bookkeeping information: adds fraction of constraints assigned to the border for a detector added to detector chain
 *         """
 *         cdef double cpp_pct = pct             # <<<<<<<<<<<<<<
 *         self.thisptr.addPctConssToBorder(cpp_pct)
 * 
*/
  __pyx_v_cpp_pct = __pyx_v_pct;

  /* "src/pygcgopt/decomposition.pxi":698
 *         """
 *         cdef double cpp_pct = pct
 *         self.thisptr.addPctConssToBorder(cpp_pct)             # <<<<<<<<<<<<<<
 * 
 *     def addPctVarsFromFree(self, double pct):
*/
  try {
    __pyx_v_self->thisptr->addPctConssToBorder(__pyx_v_cpp_pct);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 698, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":692
 *         self.thisptr.addPctConssToBlock(cpp_pct)
 * 
 *     def addPctConssToBorder(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of constraints assigned to border
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctConssToBorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":700
 *         self.thisptr.addPctConssToBorder(cpp_pct)
 * 
 *     def addPctVarsFromFree(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of closed variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_125addPctVarsFromFree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_124addPctVarsFromFree, "PartialDecomposition.addPctVarsFromFree(self, double pct)\n\nadds percentage of closed variables\n\nbookkeeping information: adds fraction of variables that are not longer open for a detector added to detector chain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_125addPctVarsFromFree = {"addPctVarsFromFree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_125addPctVarsFromFree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_124addPctVarsFromFree};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_125addPctVarsFromFree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_pct;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPctVarsFromFree (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pct,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 700, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 700, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPctVarsFromFree", 0) < (0)) __PYX_ERR(8, 700, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPctVarsFromFree", 1, 1, 1, i); __PYX_ERR(8, 700, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 700, __pyx_L3_error)
    }
    __pyx_v_pct = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_pct == (double)-1) && PyErr_Occurred())) __PYX_ERR(8, 700, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPctVarsFromFree", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 700, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctVarsFromFree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_124addPctVarsFromFree(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_pct);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_124addPctVarsFromFree(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct) {
  double __pyx_v_cpp_pct;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPctVarsFromFree", 0);

  /* "src/pygcgopt/decomposition.pxi":705
 *         bookkeeping information: adds fraction of variables that are not longer open for a detector added to detector chain
 *         """
 *         cdef double cpp_pct = pct             # <<<<<<<<<<<<<<
 *         self.thisptr.addPctVarsFromFree(cpp_pct)
 * 
*/
  __pyx_v_cpp_pct = __pyx_v_pct;

  /* "src/pygcgopt/decomposition.pxi":706
 *         """
 *         cdef double cpp_pct = pct
 *         self.thisptr.addPctVarsFromFree(cpp_pct)             # <<<<<<<<<<<<<<
 * 
 *     def addPctVarsToBlock(self, double pct):
*/
  try {
    __pyx_v_self->thisptr->addPctVarsFromFree(__pyx_v_cpp_pct);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 706, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":700
 *         self.thisptr.addPctConssToBorder(cpp_pct)
 * 
 *     def addPctVarsFromFree(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of closed variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctVarsFromFree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":708
 *         self.thisptr.addPctVarsFromFree(cpp_pct)
 * 
 *     def addPctVarsToBlock(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of variables assigned to blocks
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_127addPctVarsToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_126addPctVarsToBlock, "PartialDecomposition.addPctVarsToBlock(self, double pct)\n\nadds percentage of variables assigned to blocks\n\nbookkeeping information: adds fraction of variables assigned to a block for a detector added to detector chain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_127addPctVarsToBlock = {"addPctVarsToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_127addPctVarsToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_126addPctVarsToBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_127addPctVarsToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_pct;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPctVarsToBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pct,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 708, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 708, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPctVarsToBlock", 0) < (0)) __PYX_ERR(8, 708, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPctVarsToBlock", 1, 1, 1, i); __PYX_ERR(8, 708, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 708, __pyx_L3_error)
    }
    __pyx_v_pct = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_pct == (double)-1) && PyErr_Occurred())) __PYX_ERR(8, 708, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPctVarsToBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 708, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctVarsToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_126addPctVarsToBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_pct);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_126addPctVarsToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct) {
  double __pyx_v_cpp_pct;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPctVarsToBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":713
 *         bookkeeping information: adds fraction of variables assigned to a block for a detector added to detector chain
 *         """
 *         cdef double cpp_pct = pct             # <<<<<<<<<<<<<<
 *         self.thisptr.addPctVarsToBlock(cpp_pct)
 * 
*/
  __pyx_v_cpp_pct = __pyx_v_pct;

  /* "src/pygcgopt/decomposition.pxi":714
 *         """
 *         cdef double cpp_pct = pct
 *         self.thisptr.addPctVarsToBlock(cpp_pct)             # <<<<<<<<<<<<<<
 * 
 *     def addPctVarsToBorder(self, double pct):
*/
  try {
    __pyx_v_self->thisptr->addPctVarsToBlock(__pyx_v_cpp_pct);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 714, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":708
 *         self.thisptr.addPctVarsFromFree(cpp_pct)
 * 
 *     def addPctVarsToBlock(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of variables assigned to blocks
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctVarsToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":716
 *         self.thisptr.addPctVarsToBlock(cpp_pct)
 * 
 *     def addPctVarsToBorder(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of variables assigned to border
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_129addPctVarsToBorder(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_128addPctVarsToBorder, "PartialDecomposition.addPctVarsToBorder(self, double pct)\n\nadds percentage of variables assigned to border\n\nbookkeeping information: adds fraction of variables assigned to the border for a detector added to detector chain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_129addPctVarsToBorder = {"addPctVarsToBorder", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_129addPctVarsToBorder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_128addPctVarsToBorder};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_129addPctVarsToBorder(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_pct;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPctVarsToBorder (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pct,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 716, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 716, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPctVarsToBorder", 0) < (0)) __PYX_ERR(8, 716, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPctVarsToBorder", 1, 1, 1, i); __PYX_ERR(8, 716, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 716, __pyx_L3_error)
    }
    __pyx_v_pct = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_pct == (double)-1) && PyErr_Occurred())) __PYX_ERR(8, 716, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPctVarsToBorder", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 716, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctVarsToBorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_128addPctVarsToBorder(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_pct);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_128addPctVarsToBorder(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, double __pyx_v_pct) {
  double __pyx_v_cpp_pct;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPctVarsToBorder", 0);

  /* "src/pygcgopt/decomposition.pxi":721
 *         bookkeeping information: adds fraction of variables assigned to the border for a detector added to detector chain
 *         """
 *         cdef double cpp_pct = pct             # <<<<<<<<<<<<<<
 *         self.thisptr.addPctVarsToBorder(cpp_pct)
 * 
*/
  __pyx_v_cpp_pct = __pyx_v_pct;

  /* "src/pygcgopt/decomposition.pxi":722
 *         """
 *         cdef double cpp_pct = pct
 *         self.thisptr.addPctVarsToBorder(cpp_pct)             # <<<<<<<<<<<<<<
 * 
 *     def getPctVarsToBorder(self, int detectorchainindex):
*/
  try {
    __pyx_v_self->thisptr->addPctVarsToBorder(__pyx_v_cpp_pct);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 722, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":716
 *         self.thisptr.addPctVarsToBlock(cpp_pct)
 * 
 *     def addPctVarsToBorder(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of variables assigned to border
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addPctVarsToBorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":724
 *         self.thisptr.addPctVarsToBorder(cpp_pct)
 * 
 *     def getPctVarsToBorder(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to the border for a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_131getPctVarsToBorder(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_130getPctVarsToBorder, "PartialDecomposition.getPctVarsToBorder(self, int detectorchainindex)\n\ngets fraction of variables assigned to the border for a detector\n\n:return: fraction of variables assigned to the border for a detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_131getPctVarsToBorder = {"getPctVarsToBorder", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_131getPctVarsToBorder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_130getPctVarsToBorder};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_131getPctVarsToBorder(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchainindex;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctVarsToBorder (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchainindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 724, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 724, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getPctVarsToBorder", 0) < (0)) __PYX_ERR(8, 724, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getPctVarsToBorder", 1, 1, 1, i); __PYX_ERR(8, 724, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 724, __pyx_L3_error)
    }
    __pyx_v_detectorchainindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchainindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 724, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getPctVarsToBorder", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 724, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsToBorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_130getPctVarsToBorder(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchainindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_130getPctVarsToBorder(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex) {
  int __pyx_v_cpp_detectorchainindex;
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctVarsToBorder", 0);

  /* "src/pygcgopt/decomposition.pxi":729
 *         :return: fraction of variables assigned to the border for a detector
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex             # <<<<<<<<<<<<<<
 *         cdef double result = self.thisptr.getPctVarsToBorder(cpp_detectorchainindex)
 *         return result
*/
  __pyx_v_cpp_detectorchainindex = __pyx_v_detectorchainindex;

  /* "src/pygcgopt/decomposition.pxi":730
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctVarsToBorder(cpp_detectorchainindex)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctVarsToBorder(__pyx_v_cpp_detectorchainindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 730, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":731
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctVarsToBorder(cpp_detectorchainindex)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctVarsToBorderVector(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 731, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":724
 *         self.thisptr.addPctVarsToBorder(cpp_pct)
 * 
 *     def getPctVarsToBorder(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to the border for a detector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsToBorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":733
 *         return result
 * 
 *     def getPctVarsToBorderVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to the border for detectors in detectorchain
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_133getPctVarsToBorderVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_132getPctVarsToBorderVector, "PartialDecomposition.getPctVarsToBorderVector(self)\n\ngets fraction of variables assigned to the border for detectors in detectorchain\n\n:return: vector of fractions of variables assigned to the border for detectors in detectorchain.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_133getPctVarsToBorderVector = {"getPctVarsToBorderVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_133getPctVarsToBorderVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_132getPctVarsToBorderVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_133getPctVarsToBorderVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctVarsToBorderVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getPctVarsToBorderVector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getPctVarsToBorderVector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_132getPctVarsToBorderVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_132getPctVarsToBorderVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<double>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctVarsToBorderVector", 0);

  /* "src/pygcgopt/decomposition.pxi":738
 *         :return: vector of fractions of variables assigned to the border for detectors in detectorchain.
 *         """
 *         cdef vector[double] result = self.thisptr.getPctVarsToBorderVector()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctVarsToBorderVector();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 738, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":739
 *         """
 *         cdef vector[double] result = self.thisptr.getPctVarsToBorderVector()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctVarsToBlock(self, int detectorchainindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_double(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":733
 *         return result
 * 
 *     def getPctVarsToBorderVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to the border for detectors in detectorchain
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsToBorderVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":741
 *         return result
 * 
 *     def getPctVarsToBlock(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to a block for a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_135getPctVarsToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_134getPctVarsToBlock, "PartialDecomposition.getPctVarsToBlock(self, int detectorchainindex)\n\ngets fraction of variables assigned to a block for a detector\n\n:return: fraction of variables assigned to a block for a detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_135getPctVarsToBlock = {"getPctVarsToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_135getPctVarsToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_134getPctVarsToBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_135getPctVarsToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchainindex;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctVarsToBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchainindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 741, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 741, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getPctVarsToBlock", 0) < (0)) __PYX_ERR(8, 741, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getPctVarsToBlock", 1, 1, 1, i); __PYX_ERR(8, 741, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 741, __pyx_L3_error)
    }
    __pyx_v_detectorchainindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchainindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 741, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getPctVarsToBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 741, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_134getPctVarsToBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchainindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_134getPctVarsToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex) {
  int __pyx_v_cpp_detectorchainindex;
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctVarsToBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":746
 *         :return: fraction of variables assigned to a block for a detector
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex             # <<<<<<<<<<<<<<
 *         cdef double result = self.thisptr.getPctVarsToBlock(cpp_detectorchainindex)
 *         return result
*/
  __pyx_v_cpp_detectorchainindex = __pyx_v_detectorchainindex;

  /* "src/pygcgopt/decomposition.pxi":747
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctVarsToBlock(cpp_detectorchainindex)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctVarsToBlock(__pyx_v_cpp_detectorchainindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 747, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":748
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctVarsToBlock(cpp_detectorchainindex)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctVarsToBlockVector(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":741
 *         return result
 * 
 *     def getPctVarsToBlock(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to a block for a detector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":750
 *         return result
 * 
 *     def getPctVarsToBlockVector(self):             # <<<<<<<<<<<<<<
 *         """returns fraction of variables assigned to a block for detectors in detectorchain
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_137getPctVarsToBlockVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_136getPctVarsToBlockVector, "PartialDecomposition.getPctVarsToBlockVector(self)\n\nreturns fraction of variables assigned to a block for detectors in detectorchain\n\n:return: vector of fractions of variables assigned to a block for detectors in detectorchain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_137getPctVarsToBlockVector = {"getPctVarsToBlockVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_137getPctVarsToBlockVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_136getPctVarsToBlockVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_137getPctVarsToBlockVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctVarsToBlockVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getPctVarsToBlockVector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getPctVarsToBlockVector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_136getPctVarsToBlockVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_136getPctVarsToBlockVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<double>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctVarsToBlockVector", 0);

  /* "src/pygcgopt/decomposition.pxi":755
 *         :return: vector of fractions of variables assigned to a block for detectors in detectorchain
 *         """
 *         cdef vector[double] result = self.thisptr.getPctVarsToBlockVector()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctVarsToBlockVector();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 755, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":756
 *         """
 *         cdef vector[double] result = self.thisptr.getPctVarsToBlockVector()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctVarsFromFree(self, int detectorchainindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_double(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":750
 *         return result
 * 
 *     def getPctVarsToBlockVector(self):             # <<<<<<<<<<<<<<
 *         """returns fraction of variables assigned to a block for detectors in detectorchain
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsToBlockVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":758
 *         return result
 * 
 *     def getPctVarsFromFree(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """Gets fraction of variables that are not longer open for a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_139getPctVarsFromFree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_138getPctVarsFromFree, "PartialDecomposition.getPctVarsFromFree(self, int detectorchainindex)\n\nGets fraction of variables that are not longer open for a detector\n\n:return: index of the detector in the detectorchain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_139getPctVarsFromFree = {"getPctVarsFromFree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_139getPctVarsFromFree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_138getPctVarsFromFree};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_139getPctVarsFromFree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchainindex;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctVarsFromFree (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchainindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 758, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 758, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getPctVarsFromFree", 0) < (0)) __PYX_ERR(8, 758, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getPctVarsFromFree", 1, 1, 1, i); __PYX_ERR(8, 758, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 758, __pyx_L3_error)
    }
    __pyx_v_detectorchainindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchainindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 758, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getPctVarsFromFree", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 758, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsFromFree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_138getPctVarsFromFree(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchainindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_138getPctVarsFromFree(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex) {
  int __pyx_v_cpp_detectorchainindex;
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctVarsFromFree", 0);

  /* "src/pygcgopt/decomposition.pxi":763
 *         :return: index of the detector in the detectorchain
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex             # <<<<<<<<<<<<<<
 *         cdef double result = self.thisptr.getPctVarsFromFree(cpp_detectorchainindex)
 *         return result
*/
  __pyx_v_cpp_detectorchainindex = __pyx_v_detectorchainindex;

  /* "src/pygcgopt/decomposition.pxi":764
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctVarsFromFree(cpp_detectorchainindex)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctVarsFromFree(__pyx_v_cpp_detectorchainindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 764, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":765
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctVarsFromFree(cpp_detectorchainindex)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctVarsFromFreeVector(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":758
 *         return result
 * 
 *     def getPctVarsFromFree(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """Gets fraction of variables that are not longer open for a detector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsFromFree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":767
 *         return result
 * 
 *     def getPctVarsFromFreeVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables that are not longer open for detectors in detectorchain
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_141getPctVarsFromFreeVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_140getPctVarsFromFreeVector, "PartialDecomposition.getPctVarsFromFreeVector(self)\n\ngets fraction of variables that are not longer open for detectors in detectorchain\n\n:return: vector or fractions of variables that are not longer open for detectors in detectorchain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_141getPctVarsFromFreeVector = {"getPctVarsFromFreeVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_141getPctVarsFromFreeVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_140getPctVarsFromFreeVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_141getPctVarsFromFreeVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctVarsFromFreeVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getPctVarsFromFreeVector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getPctVarsFromFreeVector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_140getPctVarsFromFreeVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_140getPctVarsFromFreeVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<double>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctVarsFromFreeVector", 0);

  /* "src/pygcgopt/decomposition.pxi":772
 *         :return: vector or fractions of variables that are not longer open for detectors in detectorchain
 *         """
 *         cdef vector[double] result = self.thisptr.getPctVarsFromFreeVector()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctVarsFromFreeVector();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 772, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":773
 *         """
 *         cdef vector[double] result = self.thisptr.getPctVarsFromFreeVector()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctConssToBorder(self, int detectorchainindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_double(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":767
 *         return result
 * 
 *     def getPctVarsFromFreeVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables that are not longer open for detectors in detectorchain
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctVarsFromFreeVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":775
 *         return result
 * 
 *     def getPctConssToBorder(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to the border for a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_143getPctConssToBorder(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_142getPctConssToBorder, "PartialDecomposition.getPctConssToBorder(self, int detectorchainindex)\n\ngets fraction of constraints assigned to the border for a detector\n\n:return: returns fraction of constraints assigned to the border for a detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_143getPctConssToBorder = {"getPctConssToBorder", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_143getPctConssToBorder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_142getPctConssToBorder};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_143getPctConssToBorder(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchainindex;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctConssToBorder (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchainindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 775, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 775, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getPctConssToBorder", 0) < (0)) __PYX_ERR(8, 775, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getPctConssToBorder", 1, 1, 1, i); __PYX_ERR(8, 775, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 775, __pyx_L3_error)
    }
    __pyx_v_detectorchainindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchainindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 775, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getPctConssToBorder", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 775, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssToBorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_142getPctConssToBorder(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchainindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_142getPctConssToBorder(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex) {
  int __pyx_v_cpp_detectorchainindex;
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctConssToBorder", 0);

  /* "src/pygcgopt/decomposition.pxi":780
 *         :return: returns fraction of constraints assigned to the border for a detector
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex             # <<<<<<<<<<<<<<
 *         cdef double result = self.thisptr.getPctConssToBorder(cpp_detectorchainindex)
 *         return result
*/
  __pyx_v_cpp_detectorchainindex = __pyx_v_detectorchainindex;

  /* "src/pygcgopt/decomposition.pxi":781
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctConssToBorder(cpp_detectorchainindex)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctConssToBorder(__pyx_v_cpp_detectorchainindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 781, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":782
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctConssToBorder(cpp_detectorchainindex)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctConssToBorderVector(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":775
 *         return result
 * 
 *     def getPctConssToBorder(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to the border for a detector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssToBorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":784
 *         return result
 * 
 *     def getPctConssToBorderVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to the border for detectors in detectorchain
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_145getPctConssToBorderVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_144getPctConssToBorderVector, "PartialDecomposition.getPctConssToBorderVector(self)\n\ngets fraction of constraints assigned to the border for detectors in detectorchain\n\n:return: vector of fractions of constraints assigned to the border for detectors in detectorchain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_145getPctConssToBorderVector = {"getPctConssToBorderVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_145getPctConssToBorderVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_144getPctConssToBorderVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_145getPctConssToBorderVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctConssToBorderVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getPctConssToBorderVector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getPctConssToBorderVector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_144getPctConssToBorderVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_144getPctConssToBorderVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<double>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctConssToBorderVector", 0);

  /* "src/pygcgopt/decomposition.pxi":789
 *         :return: vector of fractions of constraints assigned to the border for detectors in detectorchain
 *         """
 *         cdef vector[double] result = self.thisptr.getPctConssToBorderVector()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctConssToBorderVector();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 789, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":790
 *         """
 *         cdef vector[double] result = self.thisptr.getPctConssToBorderVector()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctConssToBlock(self, int detectorchainindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_double(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":784
 *         return result
 * 
 *     def getPctConssToBorderVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to the border for detectors in detectorchain
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssToBorderVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":792
 *         return result
 * 
 *     def getPctConssToBlock(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to a block for a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_147getPctConssToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_146getPctConssToBlock, "PartialDecomposition.getPctConssToBlock(self, int detectorchainindex)\n\ngets fraction of constraints assigned to a block for a detector\n\n:return: fraction of constraints assigned to a block for a detector.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_147getPctConssToBlock = {"getPctConssToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_147getPctConssToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_146getPctConssToBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_147getPctConssToBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchainindex;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctConssToBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchainindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 792, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 792, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getPctConssToBlock", 0) < (0)) __PYX_ERR(8, 792, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getPctConssToBlock", 1, 1, 1, i); __PYX_ERR(8, 792, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 792, __pyx_L3_error)
    }
    __pyx_v_detectorchainindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchainindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 792, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getPctConssToBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 792, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_146getPctConssToBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchainindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_146getPctConssToBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex) {
  int __pyx_v_cpp_detectorchainindex;
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctConssToBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":797
 *         :return: fraction of constraints assigned to a block for a detector.
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex             # <<<<<<<<<<<<<<
 *         cdef double result = self.thisptr.getPctConssToBlock(cpp_detectorchainindex)
 *         return result
*/
  __pyx_v_cpp_detectorchainindex = __pyx_v_detectorchainindex;

  /* "src/pygcgopt/decomposition.pxi":798
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctConssToBlock(cpp_detectorchainindex)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctConssToBlock(__pyx_v_cpp_detectorchainindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 798, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":799
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctConssToBlock(cpp_detectorchainindex)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctConssToBlockVector(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":792
 *         return result
 * 
 *     def getPctConssToBlock(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to a block for a detector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssToBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":801
 *         return result
 * 
 *     def getPctConssToBlockVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to a block for detectors in detectorchain
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_149getPctConssToBlockVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_148getPctConssToBlockVector, "PartialDecomposition.getPctConssToBlockVector(self)\n\ngets fraction of constraints assigned to a block for detectors in detectorchain\n\n:return: vector of fractions of constraints assigned to a block for detectors in detectorchain.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_149getPctConssToBlockVector = {"getPctConssToBlockVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_149getPctConssToBlockVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_148getPctConssToBlockVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_149getPctConssToBlockVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctConssToBlockVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getPctConssToBlockVector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getPctConssToBlockVector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_148getPctConssToBlockVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_148getPctConssToBlockVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<double>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctConssToBlockVector", 0);

  /* "src/pygcgopt/decomposition.pxi":806
 *         :return: vector of fractions of constraints assigned to a block for detectors in detectorchain.
 *         """
 *         cdef vector[double] result = self.thisptr.getPctConssToBlockVector()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctConssToBlockVector();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 806, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":807
 *         """
 *         cdef vector[double] result = self.thisptr.getPctConssToBlockVector()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctConssFromFree(self, int detectorchainindex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_double(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":801
 *         return result
 * 
 *     def getPctConssToBlockVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to a block for detectors in detectorchain
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssToBlockVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":809
 *         return result
 * 
 *     def getPctConssFromFree(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints that are not longer open for a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_151getPctConssFromFree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_150getPctConssFromFree, "PartialDecomposition.getPctConssFromFree(self, int detectorchainindex)\n\ngets fraction of constraints that are not longer open for a detector\n\n:return: fraction of constraints that are not longer open for a detector.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_151getPctConssFromFree = {"getPctConssFromFree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_151getPctConssFromFree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_150getPctConssFromFree};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_151getPctConssFromFree(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchainindex;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctConssFromFree (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchainindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 809, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 809, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getPctConssFromFree", 0) < (0)) __PYX_ERR(8, 809, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getPctConssFromFree", 1, 1, 1, i); __PYX_ERR(8, 809, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 809, __pyx_L3_error)
    }
    __pyx_v_detectorchainindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchainindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 809, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getPctConssFromFree", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 809, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssFromFree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_150getPctConssFromFree(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchainindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_150getPctConssFromFree(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex) {
  int __pyx_v_cpp_detectorchainindex;
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctConssFromFree", 0);

  /* "src/pygcgopt/decomposition.pxi":814
 *         :return: fraction of constraints that are not longer open for a detector.
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex             # <<<<<<<<<<<<<<
 *         cdef double result = self.thisptr.getPctConssFromFree(cpp_detectorchainindex)
 *         return result
*/
  __pyx_v_cpp_detectorchainindex = __pyx_v_detectorchainindex;

  /* "src/pygcgopt/decomposition.pxi":815
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctConssFromFree(cpp_detectorchainindex)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctConssFromFree(__pyx_v_cpp_detectorchainindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 815, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":816
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef double result = self.thisptr.getPctConssFromFree(cpp_detectorchainindex)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getPctConssFromFreeVector(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":809
 *         return result
 * 
 *     def getPctConssFromFree(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints that are not longer open for a detector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssFromFree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":818
 *         return result
 * 
 *     def getPctConssFromFreeVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints that are not longer open for detectors in detectorchain
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_153getPctConssFromFreeVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_152getPctConssFromFreeVector, "PartialDecomposition.getPctConssFromFreeVector(self)\n\ngets fraction of constraints that are not longer open for detectors in detectorchain\n\n:return: vector of fractions of constraints that are not longer open for detectors in detectorchain.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_153getPctConssFromFreeVector = {"getPctConssFromFreeVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_153getPctConssFromFreeVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_152getPctConssFromFreeVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_153getPctConssFromFreeVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPctConssFromFreeVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getPctConssFromFreeVector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getPctConssFromFreeVector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_152getPctConssFromFreeVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_152getPctConssFromFreeVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<double>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPctConssFromFreeVector", 0);

  /* "src/pygcgopt/decomposition.pxi":823
 *         :return: vector of fractions of constraints that are not longer open for detectors in detectorchain.
 *         """
 *         cdef vector[double] result = self.thisptr.getPctConssFromFreeVector()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getPctConssFromFreeVector();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 823, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":824
 *         """
 *         cdef vector[double] result = self.thisptr.getPctConssFromFreeVector()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getScore(self, Score score):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_double(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":818
 *         return result
 * 
 *     def getPctConssFromFreeVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints that are not longer open for detectors in detectorchain
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getPctConssFromFreeVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":826
 *         return result
 * 
 *     def getScore(self, Score score):             # <<<<<<<<<<<<<<
 *         """gets value of the score
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_155getScore(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_154getScore, "PartialDecomposition.getScore(self, Score score)\n\ngets value of the score\n\n:param score: score for which the value should be returned\n:return: value of score");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_155getScore = {"getScore", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_155getScore, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_154getScore};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_155getScore(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_score = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getScore (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_score,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 826, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 826, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getScore", 0) < (0)) __PYX_ERR(8, 826, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getScore", 1, 1, 1, i); __PYX_ERR(8, 826, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 826, __pyx_L3_error)
    }
    __pyx_v_score = ((struct __pyx_obj_8pygcgopt_3gcg_Score *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getScore", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 826, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getScore", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_score), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Score, 1, "score", 0))) __PYX_ERR(8, 826, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_154getScore(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_score);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_154getScore(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_score) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char const *__pyx_t_6;
  SCIP_Real __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getScore", 0);

  /* "src/pygcgopt/decomposition.pxi":832
 *         :return: value of score
 *         """
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion(score.scorename)))             # <<<<<<<<<<<<<<
 * 
 * #    def calcStairlinkingVars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 832, __pyx_L1_error)
  }
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_score->scorename};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(8, 832, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->getScore(GCGfindScore(__pyx_t_1->getGcg(), __pyx_t_6));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 832, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":826
 *         return result
 * 
 *     def getScore(self, Score score):             # <<<<<<<<<<<<<<
 *         """gets value of the score
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getScore", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":844
 * #        self.thisptr.calcStairlinkingVars()
 * 
 *     def checkAllConssAssigned(self):             # <<<<<<<<<<<<<<
 *         """checks if all constraints are assigned and deletes the open constraint vector if so
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_157checkAllConssAssigned(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_156checkAllConssAssigned, "PartialDecomposition.checkAllConssAssigned(self)\n\nchecks if all constraints are assigned and deletes the open constraint vector if so\n\n:return: True iff all constraints are assigned");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_157checkAllConssAssigned = {"checkAllConssAssigned", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_157checkAllConssAssigned, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_156checkAllConssAssigned};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_157checkAllConssAssigned(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("checkAllConssAssigned (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("checkAllConssAssigned", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("checkAllConssAssigned", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_156checkAllConssAssigned(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_156checkAllConssAssigned(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("checkAllConssAssigned", 0);

  /* "src/pygcgopt/decomposition.pxi":849
 *         :return: True iff all constraints are assigned
 *         """
 *         cdef bool result = self.thisptr.checkAllConssAssigned()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->checkAllConssAssigned();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 849, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":850
 *         """
 *         cdef bool result = self.thisptr.checkAllConssAssigned()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def checkConsistency(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":844
 * #        self.thisptr.calcStairlinkingVars()
 * 
 *     def checkAllConssAssigned(self):             # <<<<<<<<<<<<<<
 *         """checks if all constraints are assigned and deletes the open constraint vector if so
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.checkAllConssAssigned", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":852
 *         return result
 * 
 *     def checkConsistency(self):             # <<<<<<<<<<<<<<
 *         """checks whether the assignments in the partialdec are consistent
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_159checkConsistency(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_158checkConsistency, "PartialDecomposition.checkConsistency(self)\n\nchecks whether the assignments in the partialdec are consistent\n\nThe following checks are performed:\n- check if nblocks is set appropriately\n- check for empty (row- and col-wise) blocks\n- every variable is assigned at most once\n- check if all not assigned variables are open vars\n- check if all open vars are not assigned\n- every constraint is assigned at most once\n- check if all not assigned constraints are open cons\n- check if all open conss are not assigned\n- check if the data structures are sorted\n- check if variables hitting a cons are either in the cons's block or border or still open\n\n:return: True iff the partialdec seems to be consistent");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_159checkConsistency = {"checkConsistency", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_159checkConsistency, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_158checkConsistency};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_159checkConsistency(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("checkConsistency (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("checkConsistency", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("checkConsistency", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_158checkConsistency(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_158checkConsistency(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("checkConsistency", 0);

  /* "src/pygcgopt/decomposition.pxi":869
 *         :return: True iff the partialdec seems to be consistent
 *         """
 *         cdef bool result = self.thisptr.checkConsistency()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->checkConsistency();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 869, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":870
 *         """
 *         cdef bool result = self.thisptr.checkConsistency()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def complete(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":852
 *         return result
 * 
 *     def checkConsistency(self):             # <<<<<<<<<<<<<<
 *         """checks whether the assignments in the partialdec are consistent
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.checkConsistency", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":872
 *         return result
 * 
 *     def complete(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables trivially
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_161complete(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_160complete, "PartialDecomposition.complete(self)\n\nassigns all open constraints and open variables trivially\n\nstrategy: assigns all open conss and vars to blocks if they can be refined there, otherwise to the master\n\n:note: partialdecomps should usually be completed by a detector, only use this function if you know what you are doing");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_161complete = {"complete", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_161complete, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_160complete};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_161complete(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("complete (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("complete", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("complete", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_160complete(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_160complete(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("complete", 0);

  /* "src/pygcgopt/decomposition.pxi":879
 *         :note: partialdecomps should usually be completed by a detector, only use this function if you know what you are doing
 *         """
 *         self.thisptr.complete()             # <<<<<<<<<<<<<<
 * 
 *     def sort(self):
*/
  try {
    __pyx_v_self->thisptr->complete();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 879, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":872
 *         return result
 * 
 *     def complete(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables trivially
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":881
 *         self.thisptr.complete()
 * 
 *     def sort(self):             # <<<<<<<<<<<<<<
 *         """sorts the variables and constraints data structures by their indices
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_163sort(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_162sort, "PartialDecomposition.sort(self)\n\nsorts the variables and constraints data structures by their indices\n\n:return: True if the internal order of variables or constraints changed");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_163sort = {"sort", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_163sort, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_162sort};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_163sort(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sort (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("sort", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("sort", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_162sort(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_162sort(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sort", 0);

  /* "src/pygcgopt/decomposition.pxi":886
 *         :return: True if the internal order of variables or constraints changed
 *         """
 *         cdef bool result = self.thisptr.sort()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->sort();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 886, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":887
 *         """
 *         cdef bool result = self.thisptr.sort()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def completeByConnected(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 887, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":881
 *         self.thisptr.complete()
 * 
 *     def sort(self):             # <<<<<<<<<<<<<<
 *         """sorts the variables and constraints data structures by their indices
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.sort", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":889
 *         return result
 * 
 *     def completeByConnected(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_165completeByConnected(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_164completeByConnected, "PartialDecomposition.completeByConnected(self)\n\nassigns all open constraints and open variables\n\nstrategy: assigns all constraints and variables to the same block if they are connected,\na constraint and a variable are adjacent if the variable appears in the constraint");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_165completeByConnected = {"completeByConnected", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_165completeByConnected, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_164completeByConnected};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_165completeByConnected(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("completeByConnected (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("completeByConnected", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("completeByConnected", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_164completeByConnected(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_164completeByConnected(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("completeByConnected", 0);

  /* "src/pygcgopt/decomposition.pxi":895
 *         a constraint and a variable are adjacent if the variable appears in the constraint
 *         """
 *         self.thisptr.completeByConnected()             # <<<<<<<<<<<<<<
 * 
 *     def completeByConnectedConssAdjacency(self):
*/
  try {
    __pyx_v_self->thisptr->completeByConnected();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 895, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":889
 *         return result
 * 
 *     def completeByConnected(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.completeByConnected", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":897
 *         self.thisptr.completeByConnected()
 * 
 *     def completeByConnectedConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_167completeByConnectedConssAdjacency(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_166completeByConnectedConssAdjacency, "PartialDecomposition.completeByConnectedConssAdjacency(self)\n\nassigns all open constraints and open variables\n\nstrategy: assigns all constraints and variables to the same block if they are connected\na constraint and a variable are adjacent if the variable appears in the constraint\n.. note:: this relies on the consadjacency structure of the detprobdata\nhence it cannot be applied in presence of linking variables.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_167completeByConnectedConssAdjacency = {"completeByConnectedConssAdjacency", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_167completeByConnectedConssAdjacency, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_166completeByConnectedConssAdjacency};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_167completeByConnectedConssAdjacency(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("completeByConnectedConssAdjacency (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("completeByConnectedConssAdjacency", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("completeByConnectedConssAdjacency", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_166completeByConnectedConssAdjacency(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_166completeByConnectedConssAdjacency(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("completeByConnectedConssAdjacency", 0);

  /* "src/pygcgopt/decomposition.pxi":905
 *         hence it cannot be applied in presence of linking variables.
 *         """
 *         self.thisptr.completeByConnectedConssAdjacency()             # <<<<<<<<<<<<<<
 * 
 *     def completeGreedily(self):
*/
  try {
    __pyx_v_self->thisptr->completeByConnectedConssAdjacency();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 905, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":897
 *         self.thisptr.completeByConnected()
 * 
 *     def completeByConnectedConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.completeByConnectedConssAdjacency", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":907
 *         self.thisptr.completeByConnectedConssAdjacency()
 * 
 *     def completeGreedily(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_169completeGreedily(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_168completeGreedily, "PartialDecomposition.completeGreedily(self)\n\nassigns all open constraints and open variables\n\nstrategy: assigns a constraint (and related variables) to a new block if possible,\nif not to an existing block if possible (by means of prior var assignments)\nand finally to master, if there does not exist such a block.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_169completeGreedily = {"completeGreedily", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_169completeGreedily, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_168completeGreedily};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_169completeGreedily(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("completeGreedily (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("completeGreedily", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("completeGreedily", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_168completeGreedily(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_168completeGreedily(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("completeGreedily", 0);

  /* "src/pygcgopt/decomposition.pxi":914
 *         and finally to master, if there does not exist such a block.
 *         """
 *         self.thisptr.completeGreedily()             # <<<<<<<<<<<<<<
 * 
 *     def prepare(self):
*/
  try {
    __pyx_v_self->thisptr->completeGreedily();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 914, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":907
 *         self.thisptr.completeByConnectedConssAdjacency()
 * 
 *     def completeGreedily(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.completeGreedily", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":916
 *         self.thisptr.completeGreedily()
 * 
 *     def prepare(self):             # <<<<<<<<<<<<<<
 *         """sorts the partialdec and calculates a its implicit assignments, hashvalue and evaluation
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_171prepare(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_170prepare, "PartialDecomposition.prepare(self)\n\nsorts the partialdec and calculates a its implicit assignments, hashvalue and evaluation\n        \n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_171prepare = {"prepare", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_171prepare, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_170prepare};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_171prepare(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("prepare (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("prepare", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("prepare", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_170prepare(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_170prepare(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("prepare", 0);

  /* "src/pygcgopt/decomposition.pxi":920
 * 
 *         """
 *         self.thisptr.prepare()             # <<<<<<<<<<<<<<
 * 
 *     def getNDetectors(self):
*/
  try {
    __pyx_v_self->thisptr->prepare();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 920, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":916
 *         self.thisptr.completeGreedily()
 * 
 *     def prepare(self):             # <<<<<<<<<<<<<<
 *         """sorts the partialdec and calculates a its implicit assignments, hashvalue and evaluation
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.prepare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":922
 *         self.thisptr.prepare()
 * 
 *     def getNDetectors(self):             # <<<<<<<<<<<<<<
 *         """gets the number of detectors the partialdec is propagated by
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_173getNDetectors(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_172getNDetectors, "PartialDecomposition.getNDetectors(self)\n\ngets the number of detectors the partialdec is propagated by\n\n:return: number of detectors the partialdec is propagated by");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_173getNDetectors = {"getNDetectors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_173getNDetectors, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_172getNDetectors};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_173getNDetectors(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNDetectors (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNDetectors", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNDetectors", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_172getNDetectors(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_172getNDetectors(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNDetectors", 0);

  /* "src/pygcgopt/decomposition.pxi":927
 *         :return: number of detectors the partialdec is propagated by
 *         """
 *         cdef int result = self.thisptr.getNDetectors()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNDetectors();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 927, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":928
 *         """
 *         cdef int result = self.thisptr.getNDetectors()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNEquivalenceClasses(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 928, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":922
 *         self.thisptr.prepare()
 * 
 *     def getNDetectors(self):             # <<<<<<<<<<<<<<
 *         """gets the number of detectors the partialdec is propagated by
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNDetectors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":930
 *         return result
 * 
 *     def getNEquivalenceClasses(self):             # <<<<<<<<<<<<<<
 *         """gets the number of blockrepresentatives
 *         :return: the number of blockrepresentatives
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_175getNEquivalenceClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_174getNEquivalenceClasses, "PartialDecomposition.getNEquivalenceClasses(self)\n\ngets the number of blockrepresentatives\n:return: the number of blockrepresentatives");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_175getNEquivalenceClasses = {"getNEquivalenceClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_175getNEquivalenceClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_174getNEquivalenceClasses};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_175getNEquivalenceClasses(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNEquivalenceClasses (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNEquivalenceClasses", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNEquivalenceClasses", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_174getNEquivalenceClasses(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_174getNEquivalenceClasses(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNEquivalenceClasses", 0);

  /* "src/pygcgopt/decomposition.pxi":934
 *         :return: the number of blockrepresentatives
 *         """
 *         cdef int result = self.thisptr.getNEquivalenceClasses()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNEquivalenceClasses();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 934, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":935
 *         """
 *         cdef int result = self.thisptr.getNEquivalenceClasses()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNCoeffsForMaster(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":930
 *         return result
 * 
 *     def getNEquivalenceClasses(self):             # <<<<<<<<<<<<<<
 *         """gets the number of blockrepresentatives
 *         :return: the number of blockrepresentatives
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNEquivalenceClasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":937
 *         return result
 * 
 *     def getNCoeffsForMaster(self):             # <<<<<<<<<<<<<<
 *         """gets number of nonzero coefficients in master
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_177getNCoeffsForMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_176getNCoeffsForMaster, "PartialDecomposition.getNCoeffsForMaster(self)\n\ngets number of nonzero coefficients in master\n\n:return: number of nonzero coefficients in master");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_177getNCoeffsForMaster = {"getNCoeffsForMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_177getNCoeffsForMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_176getNCoeffsForMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_177getNCoeffsForMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNCoeffsForMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNCoeffsForMaster", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNCoeffsForMaster", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_176getNCoeffsForMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_176getNCoeffsForMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNCoeffsForMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":942
 *         :return: number of nonzero coefficients in master
 *         """
 *         cdef int result = self.thisptr.getNCoeffsForMaster()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNCoeffsForMaster();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 942, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":943
 *         """
 *         cdef int result = self.thisptr.getNCoeffsForMaster()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def setNBlocks(self, int nblocks):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":937
 *         return result
 * 
 *     def getNCoeffsForMaster(self):             # <<<<<<<<<<<<<<
 *         """gets number of nonzero coefficients in master
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNCoeffsForMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":945
 *         return result
 * 
 *     def setNBlocks(self, int nblocks):             # <<<<<<<<<<<<<<
 *         """sets number of blocks, only increasing number allowed
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_179setNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_178setNBlocks, "PartialDecomposition.setNBlocks(self, int nblocks)\n\nsets number of blocks, only increasing number allowed\n\n:param nblocks: new number of blocks");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_179setNBlocks = {"setNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_179setNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_178setNBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_179setNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_nblocks;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setNBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_nblocks,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 945, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 945, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setNBlocks", 0) < (0)) __PYX_ERR(8, 945, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setNBlocks", 1, 1, 1, i); __PYX_ERR(8, 945, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 945, __pyx_L3_error)
    }
    __pyx_v_nblocks = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_nblocks == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 945, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setNBlocks", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 945, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setNBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_178setNBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_nblocks);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_178setNBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_nblocks) {
  int __pyx_v_cpp_nblocks;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setNBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":950
 *         :param nblocks: new number of blocks
 *         """
 *         cdef int cpp_nblocks = nblocks             # <<<<<<<<<<<<<<
 *         self.thisptr.setNBlocks(cpp_nblocks)
 * 
*/
  __pyx_v_cpp_nblocks = __pyx_v_nblocks;

  /* "src/pygcgopt/decomposition.pxi":951
 *         """
 *         cdef int cpp_nblocks = nblocks
 *         self.thisptr.setNBlocks(cpp_nblocks)             # <<<<<<<<<<<<<<
 * 
 *     def getNTotalStairlinkingvars(self):
*/
  try {
    __pyx_v_self->thisptr->setNBlocks(__pyx_v_cpp_nblocks);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 951, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":945
 *         return result
 * 
 *     def setNBlocks(self, int nblocks):             # <<<<<<<<<<<<<<
 *         """sets number of blocks, only increasing number allowed
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setNBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":953
 *         self.thisptr.setNBlocks(cpp_nblocks)
 * 
 *     def getNTotalStairlinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets total number of stairlinking variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_181getNTotalStairlinkingvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_180getNTotalStairlinkingvars, "PartialDecomposition.getNTotalStairlinkingvars(self)\n\ngets total number of stairlinking variables\n\n:return: total number of stairlinking variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_181getNTotalStairlinkingvars = {"getNTotalStairlinkingvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_181getNTotalStairlinkingvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_180getNTotalStairlinkingvars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_181getNTotalStairlinkingvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNTotalStairlinkingvars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNTotalStairlinkingvars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNTotalStairlinkingvars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_180getNTotalStairlinkingvars(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_180getNTotalStairlinkingvars(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNTotalStairlinkingvars", 0);

  /* "src/pygcgopt/decomposition.pxi":958
 *         :return: total number of stairlinking variables
 *         """
 *         cdef int result = self.thisptr.getNTotalStairlinkingvars()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNTotalStairlinkingvars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 958, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":959
 *         """
 *         cdef int result = self.thisptr.getNTotalStairlinkingvars()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNVarsForBlocks(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":953
 *         self.thisptr.setNBlocks(cpp_nblocks)
 * 
 *     def getNTotalStairlinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets total number of stairlinking variables
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNTotalStairlinkingvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":961
 *         return result
 * 
 *     def getNVarsForBlocks(self):             # <<<<<<<<<<<<<<
 *         """gets overall number of variables assigned to a block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_183getNVarsForBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_182getNVarsForBlocks, "PartialDecomposition.getNVarsForBlocks(self)\n\ngets overall number of variables assigned to a block\n\n:return: number of variables that are assigned to any block");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_183getNVarsForBlocks = {"getNVarsForBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_183getNVarsForBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_182getNVarsForBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_183getNVarsForBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVarsForBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNVarsForBlocks", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNVarsForBlocks", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_182getNVarsForBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_182getNVarsForBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNVarsForBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":966
 *         :return: number of variables that are assigned to any block
 *         """
 *         cdef int result = self.thisptr.getNVarsForBlocks()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNVarsForBlocks();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 966, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":967
 *         """
 *         cdef int result = self.thisptr.getNVarsForBlocks()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def findVarsLinkingToMaster(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":961
 *         return result
 * 
 *     def getNVarsForBlocks(self):             # <<<<<<<<<<<<<<
 *         """gets overall number of variables assigned to a block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNVarsForBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":969
 *         return result
 * 
 *     def findVarsLinkingToMaster(self):             # <<<<<<<<<<<<<<
 *         """reassigns linking variables to master if appropriate
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_185findVarsLinkingToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_184findVarsLinkingToMaster, "PartialDecomposition.findVarsLinkingToMaster(self)\n\nreassigns linking variables to master if appropriate\n\nVariables are reassigned as master if the variable only hits master conss");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_185findVarsLinkingToMaster = {"findVarsLinkingToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_185findVarsLinkingToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_184findVarsLinkingToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_185findVarsLinkingToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("findVarsLinkingToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("findVarsLinkingToMaster", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("findVarsLinkingToMaster", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_184findVarsLinkingToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_184findVarsLinkingToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("findVarsLinkingToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":974
 *         Variables are reassigned as master if the variable only hits master conss
 *         """
 *         self.thisptr.findVarsLinkingToMaster()             # <<<<<<<<<<<<<<
 * 
 *     def findVarsLinkingToStairlinking(self):
*/
  try {
    __pyx_v_self->thisptr->findVarsLinkingToMaster();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 974, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":969
 *         return result
 * 
 *     def findVarsLinkingToMaster(self):             # <<<<<<<<<<<<<<
 *         """reassigns linking variables to master if appropriate
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.findVarsLinkingToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":976
 *         self.thisptr.findVarsLinkingToMaster()
 * 
 *     def findVarsLinkingToStairlinking(self):             # <<<<<<<<<<<<<<
 *         """reassigns variables classified as linking to stairlinking if appropriate
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_187findVarsLinkingToStairlinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_186findVarsLinkingToStairlinking, "PartialDecomposition.findVarsLinkingToStairlinking(self)\n\nreassigns variables classified as linking to stairlinking if appropriate\n\nVariables are reassigned as master if the variable hits conss in exactly two consecutive blocks");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_187findVarsLinkingToStairlinking = {"findVarsLinkingToStairlinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_187findVarsLinkingToStairlinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_186findVarsLinkingToStairlinking};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_187findVarsLinkingToStairlinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("findVarsLinkingToStairlinking (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("findVarsLinkingToStairlinking", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("findVarsLinkingToStairlinking", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_186findVarsLinkingToStairlinking(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_186findVarsLinkingToStairlinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("findVarsLinkingToStairlinking", 0);

  /* "src/pygcgopt/decomposition.pxi":981
 *         Variables are reassigned as master if the variable hits conss in exactly two consecutive blocks
 *         """
 *         self.thisptr.findVarsLinkingToStairlinking()             # <<<<<<<<<<<<<<
 * 
 *     def getNCoeffsForBlock(self, int block_id):
*/
  try {
    __pyx_v_self->thisptr->findVarsLinkingToStairlinking();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 981, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":976
 *         self.thisptr.findVarsLinkingToMaster()
 * 
 *     def findVarsLinkingToStairlinking(self):             # <<<<<<<<<<<<<<
 *         """reassigns variables classified as linking to stairlinking if appropriate
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.findVarsLinkingToStairlinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":983
 *         self.thisptr.findVarsLinkingToStairlinking()
 * 
 *     def getNCoeffsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of nonzero coeffs in a certain block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_189getNCoeffsForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_188getNCoeffsForBlock, "PartialDecomposition.getNCoeffsForBlock(self, int block_id)\n\ngets number of nonzero coeffs in a certain block\n\n:param block_id: of the block the number of nozerors are requested for\n:return: number of nonzero coeffs in a certain block");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_189getNCoeffsForBlock = {"getNCoeffsForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_189getNCoeffsForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_188getNCoeffsForBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_189getNCoeffsForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNCoeffsForBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 983, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 983, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getNCoeffsForBlock", 0) < (0)) __PYX_ERR(8, 983, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getNCoeffsForBlock", 1, 1, 1, i); __PYX_ERR(8, 983, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 983, __pyx_L3_error)
    }
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 983, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getNCoeffsForBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 983, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNCoeffsForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_188getNCoeffsForBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_block_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_188getNCoeffsForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id) {
  int __pyx_v_cpp_block_id;
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNCoeffsForBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":989
 *         :return: number of nonzero coeffs in a certain block
 *         """
 *         cdef int cpp_block_id = block_id             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getNCoeffsForBlock(cpp_block_id)
 *         return result
*/
  __pyx_v_cpp_block_id = __pyx_v_block_id;

  /* "src/pygcgopt/decomposition.pxi":990
 *         """
 *         cdef int cpp_block_id = block_id
 *         cdef int result = self.thisptr.getNCoeffsForBlock(cpp_block_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNCoeffsForBlock(__pyx_v_cpp_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 990, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":991
 *         cdef int cpp_block_id = block_id
 *         cdef int result = self.thisptr.getNCoeffsForBlock(cpp_block_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def addNNewBlocks(self, int nnewblocks):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 991, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":983
 *         self.thisptr.findVarsLinkingToStairlinking()
 * 
 *     def getNCoeffsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of nonzero coeffs in a certain block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNCoeffsForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":993
 *         return result
 * 
 *     def addNNewBlocks(self, int nnewblocks):             # <<<<<<<<<<<<<<
 *         """adds how many new blocks were introduced
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_191addNNewBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_190addNNewBlocks, "PartialDecomposition.addNNewBlocks(self, int nnewblocks)\n\nadds how many new blocks were introduced\n\nbookkeeping information: adds number of new blocks created by a detector added to detector chain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_191addNNewBlocks = {"addNNewBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_191addNNewBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_190addNNewBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_191addNNewBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_nnewblocks;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addNNewBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_nnewblocks,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 993, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 993, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addNNewBlocks", 0) < (0)) __PYX_ERR(8, 993, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addNNewBlocks", 1, 1, 1, i); __PYX_ERR(8, 993, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 993, __pyx_L3_error)
    }
    __pyx_v_nnewblocks = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_nnewblocks == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 993, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addNNewBlocks", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 993, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addNNewBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_190addNNewBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_nnewblocks);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_190addNNewBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_nnewblocks) {
  int __pyx_v_cpp_nnewblocks;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addNNewBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":998
 *         bookkeeping information: adds number of new blocks created by a detector added to detector chain
 *         """
 *         cdef int cpp_nnewblocks = nnewblocks             # <<<<<<<<<<<<<<
 *         self.thisptr.addNNewBlocks(cpp_nnewblocks)
 * 
*/
  __pyx_v_cpp_nnewblocks = __pyx_v_nnewblocks;

  /* "src/pygcgopt/decomposition.pxi":999
 *         """
 *         cdef int cpp_nnewblocks = nnewblocks
 *         self.thisptr.addNNewBlocks(cpp_nnewblocks)             # <<<<<<<<<<<<<<
 * 
 *     def getNConssForBlock(self, int block_id):
*/
  try {
    __pyx_v_self->thisptr->addNNewBlocks(__pyx_v_cpp_nnewblocks);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 999, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":993
 *         return result
 * 
 *     def addNNewBlocks(self, int nnewblocks):             # <<<<<<<<<<<<<<
 *         """adds how many new blocks were introduced
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addNNewBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1001
 *         self.thisptr.addNNewBlocks(cpp_nnewblocks)
 * 
 *     def getNConssForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets size of the vector containing constraints assigned to a block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_193getNConssForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_192getNConssForBlock, "PartialDecomposition.getNConssForBlock(self, int block_id)\n\ngets size of the vector containing constraints assigned to a block\n\n:param block_id: id of the block the number of constraints is asked for\n:return: size of the vector containing constraints assigned to a block");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_193getNConssForBlock = {"getNConssForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_193getNConssForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_192getNConssForBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_193getNConssForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConssForBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1001, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1001, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getNConssForBlock", 0) < (0)) __PYX_ERR(8, 1001, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getNConssForBlock", 1, 1, 1, i); __PYX_ERR(8, 1001, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1001, __pyx_L3_error)
    }
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1001, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getNConssForBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1001, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNConssForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_192getNConssForBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_block_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_192getNConssForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id) {
  int __pyx_v_cpp_block_id;
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNConssForBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":1007
 *         :return: size of the vector containing constraints assigned to a block
 *         """
 *         cdef int cpp_block_id = block_id             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getNConssForBlock(cpp_block_id)
 *         return result
*/
  __pyx_v_cpp_block_id = __pyx_v_block_id;

  /* "src/pygcgopt/decomposition.pxi":1008
 *         """
 *         cdef int cpp_block_id = block_id
 *         cdef int result = self.thisptr.getNConssForBlock(cpp_block_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNConssForBlock(__pyx_v_cpp_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1008, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1009
 *         cdef int cpp_block_id = block_id
 *         cdef int result = self.thisptr.getNConssForBlock(cpp_block_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def removeMastercons(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1001
 *         self.thisptr.addNNewBlocks(cpp_nnewblocks)
 * 
 *     def getNConssForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets size of the vector containing constraints assigned to a block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNConssForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1011
 *         return result
 * 
 *     def removeMastercons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """removes the given constraint from master
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_195removeMastercons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_194removeMastercons, "PartialDecomposition.removeMastercons(self, Constraint cons)\n\nremoves the given constraint from master\n\n:param cons: constraint to be removed from master\n:type cons: scip#Constraint");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_195removeMastercons = {"removeMastercons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_195removeMastercons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_194removeMastercons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_195removeMastercons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("removeMastercons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1011, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1011, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "removeMastercons", 0) < (0)) __PYX_ERR(8, 1011, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("removeMastercons", 1, 1, 1, i); __PYX_ERR(8, 1011, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1011, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("removeMastercons", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1011, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.removeMastercons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(8, 1011, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_194removeMastercons(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_194removeMastercons(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  gcg::DETPROBDATA *__pyx_v_det_prob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("removeMastercons", 0);

  /* "src/pygcgopt/decomposition.pxi":1017
 *         :type cons: scip#Constraint
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()             # <<<<<<<<<<<<<<
 *         self.thisptr.removeMastercons(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetprobdata();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1017, __pyx_L1_error)
  }
  __pyx_v_det_prob_data = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1018
 *         """
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
 *         self.thisptr.removeMastercons(det_prob_data.getIndexForCons(cons.scip_cons))             # <<<<<<<<<<<<<<
 * 
 *     def isAssignedToOrigProb(self):
*/
  try {
    __pyx_t_2 = __pyx_v_det_prob_data->getIndexForCons(__pyx_v_cons->scip_cons);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1018, __pyx_L1_error)
  }
  try {
    __pyx_v_self->thisptr->removeMastercons(__pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1018, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1011
 *         return result
 * 
 *     def removeMastercons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """removes the given constraint from master
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.removeMastercons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1020
 *         self.thisptr.removeMastercons(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def isAssignedToOrigProb(self):             # <<<<<<<<<<<<<<
 *         """gets whether the partialdec is from the presolved problem
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_197isAssignedToOrigProb(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_196isAssignedToOrigProb, "PartialDecomposition.isAssignedToOrigProb(self)\n\ngets whether the partialdec is from the presolved problem\n\n:return: True iff the partialdec is from the presolved problem");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_197isAssignedToOrigProb = {"isAssignedToOrigProb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_197isAssignedToOrigProb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_196isAssignedToOrigProb};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_197isAssignedToOrigProb(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isAssignedToOrigProb (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("isAssignedToOrigProb", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("isAssignedToOrigProb", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_196isAssignedToOrigProb(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_196isAssignedToOrigProb(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isAssignedToOrigProb", 0);

  /* "src/pygcgopt/decomposition.pxi":1025
 *         :return: True iff the partialdec is from the presolved problem
 *         """
 *         cdef bool result = self.thisptr.isAssignedToOrigProb()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->isAssignedToOrigProb();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1025, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1026
 *         """
 *         cdef bool result = self.thisptr.isAssignedToOrigProb()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def refineToBlocks(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1020
 *         self.thisptr.removeMastercons(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def isAssignedToOrigProb(self):             # <<<<<<<<<<<<<<
 *         """gets whether the partialdec is from the presolved problem
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.isAssignedToOrigProb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1028
 *         return result
 * 
 *     def refineToBlocks(self):             # <<<<<<<<<<<<<<
 *         """refine partialdec with focus on blocks
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_199refineToBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_198refineToBlocks, "PartialDecomposition.refineToBlocks(self)\n\nrefine partialdec with focus on blocks\n\nstrategy: assigns open conss and vars if they can be found in blocks\n(without respect to open vars and conss  see assignHittingOpenconss(), see assignHittingOpenvars())\n.. note:: partialdec might be not complete.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_199refineToBlocks = {"refineToBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_199refineToBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_198refineToBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_199refineToBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("refineToBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("refineToBlocks", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("refineToBlocks", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_198refineToBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_198refineToBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("refineToBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":1035
 *         .. note:: partialdec might be not complete.
 *         """
 *         self.thisptr.refineToBlocks()             # <<<<<<<<<<<<<<
 * 
 *     def refineToMaster(self):
*/
  try {
    __pyx_v_self->thisptr->refineToBlocks();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1035, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1028
 *         return result
 * 
 *     def refineToBlocks(self):             # <<<<<<<<<<<<<<
 *         """refine partialdec with focus on blocks
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.refineToBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1037
 *         self.thisptr.refineToBlocks()
 * 
 *     def refineToMaster(self):             # <<<<<<<<<<<<<<
 *         """refine partialdec with focus on master
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_201refineToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_200refineToMaster, "PartialDecomposition.refineToMaster(self)\n\nrefine partialdec with focus on master\n\nstrategy: do obvious ( see considerImplicits()) assignments and\nassign other conss and vars to master if possible (see assignOpenPartialHittingToMaster())");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_201refineToMaster = {"refineToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_201refineToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_200refineToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_201refineToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("refineToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("refineToMaster", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("refineToMaster", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_200refineToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_200refineToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("refineToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":1043
 *         assign other conss and vars to master if possible (see assignOpenPartialHittingToMaster())
 *         """
 *         self.thisptr.refineToMaster()             # <<<<<<<<<<<<<<
 * 
 *     def alreadyAssignedConssToBlocks(self):
*/
  try {
    __pyx_v_self->thisptr->refineToMaster();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1043, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1037
 *         self.thisptr.refineToBlocks()
 * 
 *     def refineToMaster(self):             # <<<<<<<<<<<<<<
 *         """refine partialdec with focus on master
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.refineToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1045
 *         self.thisptr.refineToMaster()
 * 
 *     def alreadyAssignedConssToBlocks(self):             # <<<<<<<<<<<<<<
 *         """checks if at least one constraint is assigned to some block
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_203alreadyAssignedConssToBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_202alreadyAssignedConssToBlocks, "PartialDecomposition.alreadyAssignedConssToBlocks(self)\n\nchecks if at least one constraint is assigned to some block\n\n:return: True iff at least one constraint is assigned to a block");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_203alreadyAssignedConssToBlocks = {"alreadyAssignedConssToBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_203alreadyAssignedConssToBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_202alreadyAssignedConssToBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_203alreadyAssignedConssToBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("alreadyAssignedConssToBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("alreadyAssignedConssToBlocks", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("alreadyAssignedConssToBlocks", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_202alreadyAssignedConssToBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_202alreadyAssignedConssToBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("alreadyAssignedConssToBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":1050
 *         :return: True iff at least one constraint is assigned to a block
 *         """
 *         cdef bool result = self.thisptr.alreadyAssignedConssToBlocks()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->alreadyAssignedConssToBlocks();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1050, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1051
 *         """
 *         cdef bool result = self.thisptr.alreadyAssignedConssToBlocks()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def assignCurrentStairlinking(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1045
 *         self.thisptr.refineToMaster()
 * 
 *     def alreadyAssignedConssToBlocks(self):             # <<<<<<<<<<<<<<
 *         """checks if at least one constraint is assigned to some block
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.alreadyAssignedConssToBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1053
 *         return result
 * 
 *     def assignCurrentStairlinking(self):             # <<<<<<<<<<<<<<
 *         """assigns open variables to stairlinking if appropriate
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_205assignCurrentStairlinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_204assignCurrentStairlinking, "PartialDecomposition.assignCurrentStairlinking(self)\n\nassigns open variables to stairlinking if appropriate\n\nassigns open variables to stairlinking if they can be found in exactly two consecutive blocks\n\n:return: True iff at least one stairlinkingvariable was assigned");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_205assignCurrentStairlinking = {"assignCurrentStairlinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_205assignCurrentStairlinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_204assignCurrentStairlinking};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_205assignCurrentStairlinking(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("assignCurrentStairlinking (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("assignCurrentStairlinking", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("assignCurrentStairlinking", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_204assignCurrentStairlinking(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_204assignCurrentStairlinking(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("assignCurrentStairlinking", 0);

  /* "src/pygcgopt/decomposition.pxi":1060
 *         :return: True iff at least one stairlinkingvariable was assigned
 *         """
 *         cdef bool result = self.thisptr.assignCurrentStairlinking()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->assignCurrentStairlinking();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1060, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1061
 *         """
 *         cdef bool result = self.thisptr.assignCurrentStairlinking()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def aggInfoCalculated(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1053
 *         return result
 * 
 *     def assignCurrentStairlinking(self):             # <<<<<<<<<<<<<<
 *         """assigns open variables to stairlinking if appropriate
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.assignCurrentStairlinking", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1063
 *         return result
 * 
 *     def aggInfoCalculated(self):             # <<<<<<<<<<<<<<
 *         """checks if the aggregation information was already calculated
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_207aggInfoCalculated(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_206aggInfoCalculated, "PartialDecomposition.aggInfoCalculated(self)\n\nchecks if the aggregation information was already calculated\n\n:return: True iff the aggregation information was already calculated");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_207aggInfoCalculated = {"aggInfoCalculated", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_207aggInfoCalculated, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_206aggInfoCalculated};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_207aggInfoCalculated(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("aggInfoCalculated (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("aggInfoCalculated", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("aggInfoCalculated", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_206aggInfoCalculated(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_206aggInfoCalculated(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("aggInfoCalculated", 0);

  /* "src/pygcgopt/decomposition.pxi":1068
 *         :return: True iff the aggregation information was already calculated
 *         """
 *         cdef bool result = self.thisptr.aggInfoCalculated()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->aggInfoCalculated();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1068, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1069
 *         """
 *         cdef bool result = self.thisptr.aggInfoCalculated()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def considerImplicits(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1063
 *         return result
 * 
 *     def aggInfoCalculated(self):             # <<<<<<<<<<<<<<
 *         """checks if the aggregation information was already calculated
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.aggInfoCalculated", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1071
 *         return result
 * 
 *     def considerImplicits(self):             # <<<<<<<<<<<<<<
 *         """assigns every open constraint/variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_209considerImplicits(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_208considerImplicits, "PartialDecomposition.considerImplicits(self)\n\nassigns every open constraint/variable\n\nAssignments happen as follows:\n- to the respective block if it hits exactly one blockvariable/blockconstraint and no open variables/constraints\n- to master/linking if it hits blockvariables/blockconstraints assigned to different blocks\n- and every constraint to master that hits a master variable\n- and every variable to master if it does not hit any blockconstraint and has no open constraint\n- leave the constraitn/variable open if nothing from the above holds");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_209considerImplicits = {"considerImplicits", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_209considerImplicits, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_208considerImplicits};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_209considerImplicits(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("considerImplicits (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("considerImplicits", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("considerImplicits", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_208considerImplicits(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_208considerImplicits(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("considerImplicits", 0);

  /* "src/pygcgopt/decomposition.pxi":1081
 *         - leave the constraitn/variable open if nothing from the above holds
 *         """
 *         self.thisptr.considerImplicits()             # <<<<<<<<<<<<<<
 * 
 *     def displayInfo(self, int detailLevel):
*/
  try {
    __pyx_v_self->thisptr->considerImplicits();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1081, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1071
 *         return result
 * 
 *     def considerImplicits(self):             # <<<<<<<<<<<<<<
 *         """assigns every open constraint/variable
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.considerImplicits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1083
 *         self.thisptr.considerImplicits()
 * 
 *     def displayInfo(self, int detailLevel):             # <<<<<<<<<<<<<<
 *         """displays the relevant information of the partialdec
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_211displayInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_210displayInfo, "PartialDecomposition.displayInfo(self, int detailLevel)\n\ndisplays the relevant information of the partialdec\n\n:param detailLevel: pass a value that indicates how detailed the output should be:\n0: brief overview\n1: block and detector info\n2: cons and var assignments");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_211displayInfo = {"displayInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_211displayInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_210displayInfo};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_211displayInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detailLevel;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("displayInfo (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detailLevel,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1083, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1083, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "displayInfo", 0) < (0)) __PYX_ERR(8, 1083, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("displayInfo", 1, 1, 1, i); __PYX_ERR(8, 1083, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1083, __pyx_L3_error)
    }
    __pyx_v_detailLevel = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detailLevel == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1083, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("displayInfo", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1083, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.displayInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_210displayInfo(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detailLevel);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_210displayInfo(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detailLevel) {
  int __pyx_v_cpp_detailLevel;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("displayInfo", 0);

  /* "src/pygcgopt/decomposition.pxi":1091
 *         2: cons and var assignments
 *         """
 *         cdef int cpp_detailLevel = detailLevel             # <<<<<<<<<<<<<<
 *         self.thisptr.displayInfo(cpp_detailLevel)
 * 
*/
  __pyx_v_cpp_detailLevel = __pyx_v_detailLevel;

  /* "src/pygcgopt/decomposition.pxi":1092
 *         """
 *         cdef int cpp_detailLevel = detailLevel
 *         self.thisptr.displayInfo(cpp_detailLevel)             # <<<<<<<<<<<<<<
 * 
 *     def getAncestorList(self):
*/
  try {
    __pyx_v_self->thisptr->displayInfo(__pyx_v_cpp_detailLevel);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1092, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1083
 *         self.thisptr.considerImplicits()
 * 
 *     def displayInfo(self, int detailLevel):             # <<<<<<<<<<<<<<
 *         """displays the relevant information of the partialdec
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.displayInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1094
 *         self.thisptr.displayInfo(cpp_detailLevel)
 * 
 *     def getAncestorList(self):             # <<<<<<<<<<<<<<
 *         """gets ancestor ids as vector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_213getAncestorList(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_212getAncestorList, "PartialDecomposition.getAncestorList(self)\n\ngets ancestor ids as vector\n\n:return: list of ids of all ancestors id");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_213getAncestorList = {"getAncestorList", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_213getAncestorList, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_212getAncestorList};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_213getAncestorList(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getAncestorList (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getAncestorList", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getAncestorList", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_212getAncestorList(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_212getAncestorList(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<int>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getAncestorList", 0);

  /* "src/pygcgopt/decomposition.pxi":1099
 *         :return: list of ids of all ancestors id
 *         """
 *         cdef vector[int] result = self.thisptr.getAncestorList()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getAncestorList();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1099, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1100
 *         """
 *         cdef vector[int] result = self.thisptr.getAncestorList()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def assignSmallestComponentsButOneConssAdjacency(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1094
 *         self.thisptr.displayInfo(cpp_detailLevel)
 * 
 *     def getAncestorList(self):             # <<<<<<<<<<<<<<
 *         """gets ancestor ids as vector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getAncestorList", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1102
 *         return result
 * 
 *     def assignSmallestComponentsButOneConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """computes components by connectedness of constraints and variables
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_215assignSmallestComponentsButOneConssAdjacency(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_214assignSmallestComponentsButOneConssAdjacency, "PartialDecomposition.assignSmallestComponentsButOneConssAdjacency(self)\n\ncomputes components by connectedness of constraints and variables\n\ncomputes components corresponding to connectedness of constraints and variables\nand assigns them accordingly (all but one of largest components)\n\nstrategy: assigns all conss same block if they are connected\ntwo constraints are adjacent if there is a common variable\n\n.. note:: this relies on the consadjacency structure of the detprobdata\nhence it cannot be applied in presence of linking variables.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_215assignSmallestComponentsButOneConssAdjacency = {"assignSmallestComponentsButOneConssAdjacency", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_215assignSmallestComponentsButOneConssAdjacency, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_214assignSmallestComponentsButOneConssAdjacency};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_215assignSmallestComponentsButOneConssAdjacency(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("assignSmallestComponentsButOneConssAdjacency (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("assignSmallestComponentsButOneConssAdjacency", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("assignSmallestComponentsButOneConssAdjacency", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_214assignSmallestComponentsButOneConssAdjacency(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_214assignSmallestComponentsButOneConssAdjacency(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("assignSmallestComponentsButOneConssAdjacency", 0);

  /* "src/pygcgopt/decomposition.pxi":1114
 *         hence it cannot be applied in presence of linking variables.
 *         """
 *         self.thisptr.assignSmallestComponentsButOneConssAdjacency()             # <<<<<<<<<<<<<<
 * 
 *     def deleteEmptyBlocks(self, bool variables):
*/
  try {
    __pyx_v_self->thisptr->assignSmallestComponentsButOneConssAdjacency();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1114, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1102
 *         return result
 * 
 *     def assignSmallestComponentsButOneConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """computes components by connectedness of constraints and variables
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.assignSmallestComponentsButOneConssAdjacency", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1116
 *         self.thisptr.assignSmallestComponentsButOneConssAdjacency()
 * 
 *     def deleteEmptyBlocks(self, bool variables):             # <<<<<<<<<<<<<<
 *         """deletes empty blocks and sets nblocks accordingly
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_217deleteEmptyBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_216deleteEmptyBlocks, "PartialDecomposition.deleteEmptyBlocks(self, bool variables)\n\ndeletes empty blocks and sets nblocks accordingly\n\nA block is considered to be empty if no constraint is assigned to it,\nvariables in blocks with no constraints become open\n\n:param variables: if True, then blocks with no constraints but at least one variable are considered to be nonempty");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_217deleteEmptyBlocks = {"deleteEmptyBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_217deleteEmptyBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_216deleteEmptyBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_217deleteEmptyBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  bool __pyx_v_variables;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("deleteEmptyBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_variables,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1116, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1116, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "deleteEmptyBlocks", 0) < (0)) __PYX_ERR(8, 1116, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("deleteEmptyBlocks", 1, 1, 1, i); __PYX_ERR(8, 1116, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1116, __pyx_L3_error)
    }
    __pyx_v_variables = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_variables == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(8, 1116, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("deleteEmptyBlocks", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1116, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.deleteEmptyBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_216deleteEmptyBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_variables);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_216deleteEmptyBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_variables) {
  bool __pyx_v_cpp_variables;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("deleteEmptyBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":1124
 *         :param variables: if True, then blocks with no constraints but at least one variable are considered to be nonempty
 *         """
 *         cdef bool cpp_variables = variables             # <<<<<<<<<<<<<<
 *         self.thisptr.deleteEmptyBlocks(cpp_variables)
 * 
*/
  __pyx_v_cpp_variables = __pyx_v_variables;

  /* "src/pygcgopt/decomposition.pxi":1125
 *         """
 *         cdef bool cpp_variables = variables
 *         self.thisptr.deleteEmptyBlocks(cpp_variables)             # <<<<<<<<<<<<<<
 * 
 *     def getTranslatedpartialdecid(self):
*/
  try {
    __pyx_v_self->thisptr->deleteEmptyBlocks(__pyx_v_cpp_variables);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1125, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1116
 *         self.thisptr.assignSmallestComponentsButOneConssAdjacency()
 * 
 *     def deleteEmptyBlocks(self, bool variables):             # <<<<<<<<<<<<<<
 *         """deletes empty blocks and sets nblocks accordingly
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.deleteEmptyBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1127
 *         self.thisptr.deleteEmptyBlocks(cpp_variables)
 * 
 *     def getTranslatedpartialdecid(self):             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getTranslatedpartialdecid()
 *         return result
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_219getTranslatedpartialdecid(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_218getTranslatedpartialdecid, "PartialDecomposition.getTranslatedpartialdecid(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_219getTranslatedpartialdecid = {"getTranslatedpartialdecid", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_219getTranslatedpartialdecid, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_218getTranslatedpartialdecid};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_219getTranslatedpartialdecid(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getTranslatedpartialdecid (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getTranslatedpartialdecid", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getTranslatedpartialdecid", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_218getTranslatedpartialdecid(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_218getTranslatedpartialdecid(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getTranslatedpartialdecid", 0);

  /* "src/pygcgopt/decomposition.pxi":1128
 * 
 *     def getTranslatedpartialdecid(self):
 *         cdef int result = self.thisptr.getTranslatedpartialdecid()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getTranslatedpartialdecid();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1128, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1129
 *     def getTranslatedpartialdecid(self):
 *         cdef int result = self.thisptr.getTranslatedpartialdecid()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def setTranslatedpartialdecid(self, int dec_id):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1127
 *         self.thisptr.deleteEmptyBlocks(cpp_variables)
 * 
 *     def getTranslatedpartialdecid(self):             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getTranslatedpartialdecid()
 *         return result
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getTranslatedpartialdecid", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1131
 *         return result
 * 
 *     def setTranslatedpartialdecid(self, int dec_id):             # <<<<<<<<<<<<<<
 *         cdef int cpp_dec_id = dec_id
 *         self.thisptr.setTranslatedpartialdecid(cpp_dec_id)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_221setTranslatedpartialdecid(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_220setTranslatedpartialdecid, "PartialDecomposition.setTranslatedpartialdecid(self, int dec_id)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_221setTranslatedpartialdecid = {"setTranslatedpartialdecid", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_221setTranslatedpartialdecid, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_220setTranslatedpartialdecid};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_221setTranslatedpartialdecid(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_dec_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setTranslatedpartialdecid (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_dec_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1131, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1131, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setTranslatedpartialdecid", 0) < (0)) __PYX_ERR(8, 1131, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setTranslatedpartialdecid", 1, 1, 1, i); __PYX_ERR(8, 1131, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1131, __pyx_L3_error)
    }
    __pyx_v_dec_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_dec_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1131, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setTranslatedpartialdecid", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1131, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setTranslatedpartialdecid", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_220setTranslatedpartialdecid(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_dec_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_220setTranslatedpartialdecid(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_dec_id) {
  int __pyx_v_cpp_dec_id;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setTranslatedpartialdecid", 0);

  /* "src/pygcgopt/decomposition.pxi":1132
 * 
 *     def setTranslatedpartialdecid(self, int dec_id):
 *         cdef int cpp_dec_id = dec_id             # <<<<<<<<<<<<<<
 *         self.thisptr.setTranslatedpartialdecid(cpp_dec_id)
 * 
*/
  __pyx_v_cpp_dec_id = __pyx_v_dec_id;

  /* "src/pygcgopt/decomposition.pxi":1133
 *     def setTranslatedpartialdecid(self, int dec_id):
 *         cdef int cpp_dec_id = dec_id
 *         self.thisptr.setTranslatedpartialdecid(cpp_dec_id)             # <<<<<<<<<<<<<<
 * 
 *     def buildDecChainString(self, buffer):
*/
  try {
    __pyx_v_self->thisptr->setTranslatedpartialdecid(__pyx_v_cpp_dec_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1133, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1131
 *         return result
 * 
 *     def setTranslatedpartialdecid(self, int dec_id):             # <<<<<<<<<<<<<<
 *         cdef int cpp_dec_id = dec_id
 *         self.thisptr.setTranslatedpartialdecid(cpp_dec_id)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setTranslatedpartialdecid", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1135
 *         self.thisptr.setTranslatedpartialdecid(cpp_dec_id)
 * 
 *     def buildDecChainString(self, buffer):             # <<<<<<<<<<<<<<
 *         """creates a detector chain short string for this partialdec, is built from detector chain
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_223buildDecChainString(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_222buildDecChainString, "PartialDecomposition.buildDecChainString(self, buffer)\n\ncreates a detector chain short string for this partialdec, is built from detector chain\n\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_223buildDecChainString = {"buildDecChainString", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_223buildDecChainString, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_222buildDecChainString};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_223buildDecChainString(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_buffer = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("buildDecChainString (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_buffer,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1135, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1135, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "buildDecChainString", 0) < (0)) __PYX_ERR(8, 1135, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("buildDecChainString", 1, 1, 1, i); __PYX_ERR(8, 1135, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1135, __pyx_L3_error)
    }
    __pyx_v_buffer = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("buildDecChainString", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1135, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.buildDecChainString", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_222buildDecChainString(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_buffer);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_222buildDecChainString(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_buffer) {
  PyObject *__pyx_v_c_buffer = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char *__pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("buildDecChainString", 0);

  /* "src/pygcgopt/decomposition.pxi":1139
 * 
 *         """
 *         c_buffer = str_conversion(buffer)             # <<<<<<<<<<<<<<
 *         self.thisptr.buildDecChainString(c_buffer)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 1139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_buffer};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_buffer = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/decomposition.pxi":1140
 *         """
 *         c_buffer = str_conversion(buffer)
 *         self.thisptr.buildDecChainString(c_buffer)             # <<<<<<<<<<<<<<
 * 
 *     def addDecChangesFromAncestor(self, PartialDecomposition ancestor):
*/
  __pyx_t_5 = __Pyx_PyObject_AsWritableString(__pyx_v_c_buffer); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(8, 1140, __pyx_L1_error)
  try {
    __pyx_v_self->thisptr->buildDecChainString(__pyx_t_5);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1140, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1135
 *         self.thisptr.setTranslatedpartialdecid(cpp_dec_id)
 * 
 *     def buildDecChainString(self, buffer):             # <<<<<<<<<<<<<<
 *         """creates a detector chain short string for this partialdec, is built from detector chain
 * 
*/

  /* 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("pygcgopt.gcg.PartialDecomposition.buildDecChainString", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_buffer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1142
 *         self.thisptr.buildDecChainString(c_buffer)
 * 
 *     def addDecChangesFromAncestor(self, PartialDecomposition ancestor):             # <<<<<<<<<<<<<<
 *         """adds the statistical differences to an ancestor
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_225addDecChangesFromAncestor(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_224addDecChangesFromAncestor, "PartialDecomposition.addDecChangesFromAncestor(self, PartialDecomposition ancestor)\n\nadds the statistical differences to an ancestor\n\nincorporates the changes from ancestor partialdec into the statistical data structures");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_225addDecChangesFromAncestor = {"addDecChangesFromAncestor", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_225addDecChangesFromAncestor, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_224addDecChangesFromAncestor};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_225addDecChangesFromAncestor(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_ancestor = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addDecChangesFromAncestor (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_ancestor,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1142, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1142, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addDecChangesFromAncestor", 0) < (0)) __PYX_ERR(8, 1142, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addDecChangesFromAncestor", 1, 1, 1, i); __PYX_ERR(8, 1142, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1142, __pyx_L3_error)
    }
    __pyx_v_ancestor = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addDecChangesFromAncestor", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1142, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addDecChangesFromAncestor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ancestor), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "ancestor", 0))) __PYX_ERR(8, 1142, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_224addDecChangesFromAncestor(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_ancestor);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_224addDecChangesFromAncestor(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_ancestor) {
  gcg::PARTIALDECOMP *__pyx_v_cpp_ancestor;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addDecChangesFromAncestor", 0);

  /* "src/pygcgopt/decomposition.pxi":1147
 *         incorporates the changes from ancestor partialdec into the statistical data structures
 *         """
 *         cdef PARTIALDECOMP* cpp_ancestor = ancestor.thisptr             # <<<<<<<<<<<<<<
 *         self.thisptr.addDecChangesFromAncestor(cpp_ancestor)
 * 
*/
  __pyx_t_1 = __pyx_v_ancestor->thisptr;
  __pyx_v_cpp_ancestor = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1148
 *         """
 *         cdef PARTIALDECOMP* cpp_ancestor = ancestor.thisptr
 *         self.thisptr.addDecChangesFromAncestor(cpp_ancestor)             # <<<<<<<<<<<<<<
 * 
 *     def addDetectorChainInfo(PartialDecomposition self, decinfo):
*/
  try {
    __pyx_v_self->thisptr->addDecChangesFromAncestor(__pyx_v_cpp_ancestor);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1148, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1142
 *         self.thisptr.buildDecChainString(c_buffer)
 * 
 *     def addDecChangesFromAncestor(self, PartialDecomposition ancestor):             # <<<<<<<<<<<<<<
 *         """adds the statistical differences to an ancestor
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addDecChangesFromAncestor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1150
 *         self.thisptr.addDecChangesFromAncestor(cpp_ancestor)
 * 
 *     def addDetectorChainInfo(PartialDecomposition self, decinfo):             # <<<<<<<<<<<<<<
 *         """adds information about the detector chain
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_227addDetectorChainInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_226addDetectorChainInfo, "PartialDecomposition.addDetectorChainInfo(self, decinfo)\n\nadds information about the detector chain\n\nadds a detectorchain information string to the corresponding vector\n(that carries information for each detector call)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_227addDetectorChainInfo = {"addDetectorChainInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_227addDetectorChainInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_226addDetectorChainInfo};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_227addDetectorChainInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_decinfo = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addDetectorChainInfo (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_decinfo,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1150, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1150, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addDetectorChainInfo", 0) < (0)) __PYX_ERR(8, 1150, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addDetectorChainInfo", 1, 1, 1, i); __PYX_ERR(8, 1150, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1150, __pyx_L3_error)
    }
    __pyx_v_decinfo = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addDetectorChainInfo", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1150, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addDetectorChainInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_226addDetectorChainInfo(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_decinfo);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_226addDetectorChainInfo(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_decinfo) {
  PyObject *__pyx_v_c_decinfo = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char *__pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addDetectorChainInfo", 0);

  /* "src/pygcgopt/decomposition.pxi":1156
 *         (that carries information for each detector call)
 *         """
 *         c_decinfo = str_conversion(decinfo)             # <<<<<<<<<<<<<<
 *         self.thisptr.addDetectorChainInfo(c_decinfo)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 1156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_decinfo};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_decinfo = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/decomposition.pxi":1157
 *         """
 *         c_decinfo = str_conversion(decinfo)
 *         self.thisptr.addDetectorChainInfo(c_decinfo)             # <<<<<<<<<<<<<<
 * 
 *     def getAncestorID(self, int ancestor_id):
*/
  __pyx_t_5 = __Pyx_PyObject_AsWritableString(__pyx_v_c_decinfo); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(8, 1157, __pyx_L1_error)
  try {
    __pyx_v_self->thisptr->addDetectorChainInfo(__pyx_t_5);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1157, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1150
 *         self.thisptr.addDecChangesFromAncestor(cpp_ancestor)
 * 
 *     def addDetectorChainInfo(PartialDecomposition self, decinfo):             # <<<<<<<<<<<<<<
 *         """adds information about the detector chain
 * 
*/

  /* 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("pygcgopt.gcg.PartialDecomposition.addDetectorChainInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_decinfo);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1159
 *         self.thisptr.addDetectorChainInfo(c_decinfo)
 * 
 *     def getAncestorID(self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """gets partialdec id of given ancestor id
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_229getAncestorID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_228getAncestorID, "PartialDecomposition.getAncestorID(self, int ancestor_id)\n\ngets partialdec id of given ancestor id\n\n:return: partialdec id of given ancestor id");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_229getAncestorID = {"getAncestorID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_229getAncestorID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_228getAncestorID};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_229getAncestorID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_ancestor_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getAncestorID (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_ancestor_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1159, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1159, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getAncestorID", 0) < (0)) __PYX_ERR(8, 1159, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getAncestorID", 1, 1, 1, i); __PYX_ERR(8, 1159, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1159, __pyx_L3_error)
    }
    __pyx_v_ancestor_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_ancestor_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1159, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getAncestorID", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1159, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getAncestorID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_228getAncestorID(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_ancestor_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_228getAncestorID(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_ancestor_id) {
  int __pyx_v_cpp_ancestor_id;
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getAncestorID", 0);

  /* "src/pygcgopt/decomposition.pxi":1164
 *         :return: partialdec id of given ancestor id
 *         """
 *         cdef int cpp_ancestor_id = ancestor_id             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getAncestorID(cpp_ancestor_id)
 *         return result
*/
  __pyx_v_cpp_ancestor_id = __pyx_v_ancestor_id;

  /* "src/pygcgopt/decomposition.pxi":1165
 *         """
 *         cdef int cpp_ancestor_id = ancestor_id
 *         cdef int result = self.thisptr.getAncestorID(cpp_ancestor_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getAncestorID(__pyx_v_cpp_ancestor_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1165, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1166
 *         cdef int cpp_ancestor_id = ancestor_id
 *         cdef int result = self.thisptr.getAncestorID(cpp_ancestor_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def copyPartitionStatistics(PartialDecomposition self, PartialDecomposition otherpartialdec):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1159
 *         self.thisptr.addDetectorChainInfo(c_decinfo)
 * 
 *     def getAncestorID(self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """gets partialdec id of given ancestor id
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getAncestorID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1168
 *         return result
 * 
 *     def copyPartitionStatistics(PartialDecomposition self, PartialDecomposition otherpartialdec):             # <<<<<<<<<<<<<<
 *         """copies the given partialdec's partition statistics
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_231copyPartitionStatistics(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_230copyPartitionStatistics, "PartialDecomposition.copyPartitionStatistics(self, PartialDecomposition otherpartialdec)\n\ncopies the given partialdec's partition statistics\n\n:param otherpartialdec: partialdec whose partition statistics are to be copied");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_231copyPartitionStatistics = {"copyPartitionStatistics", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_231copyPartitionStatistics, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_230copyPartitionStatistics};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_231copyPartitionStatistics(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_otherpartialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("copyPartitionStatistics (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_otherpartialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1168, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1168, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "copyPartitionStatistics", 0) < (0)) __PYX_ERR(8, 1168, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("copyPartitionStatistics", 1, 1, 1, i); __PYX_ERR(8, 1168, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1168, __pyx_L3_error)
    }
    __pyx_v_otherpartialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("copyPartitionStatistics", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1168, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.copyPartitionStatistics", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_otherpartialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "otherpartialdec", 0))) __PYX_ERR(8, 1168, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_230copyPartitionStatistics(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_otherpartialdec);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_230copyPartitionStatistics(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_otherpartialdec) {
  gcg::PARTIALDECOMP *__pyx_v_cpp_otherpartialdec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("copyPartitionStatistics", 0);

  /* "src/pygcgopt/decomposition.pxi":1173
 *         :param otherpartialdec: partialdec whose partition statistics are to be copied
 *         """
 *         cdef PARTIALDECOMP* cpp_otherpartialdec = otherpartialdec.thisptr             # <<<<<<<<<<<<<<
 *         self.thisptr.copyPartitionStatistics(cpp_otherpartialdec)
 * 
*/
  __pyx_t_1 = __pyx_v_otherpartialdec->thisptr;
  __pyx_v_cpp_otherpartialdec = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1174
 *         """
 *         cdef PARTIALDECOMP* cpp_otherpartialdec = otherpartialdec.thisptr
 *         self.thisptr.copyPartitionStatistics(cpp_otherpartialdec)             # <<<<<<<<<<<<<<
 * 
 *     def removeAncestorID(PartialDecomposition self, int ancestor_id):
*/
  try {
    __pyx_v_self->thisptr->copyPartitionStatistics(__pyx_v_cpp_otherpartialdec);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1174, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1168
 *         return result
 * 
 *     def copyPartitionStatistics(PartialDecomposition self, PartialDecomposition otherpartialdec):             # <<<<<<<<<<<<<<
 *         """copies the given partialdec's partition statistics
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.copyPartitionStatistics", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1176
 *         self.thisptr.copyPartitionStatistics(cpp_otherpartialdec)
 * 
 *     def removeAncestorID(PartialDecomposition self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """removes ancestor id from list
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_233removeAncestorID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_232removeAncestorID, "PartialDecomposition.removeAncestorID(self, int ancestor_id)\n\nremoves ancestor id from list\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_233removeAncestorID = {"removeAncestorID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_233removeAncestorID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_232removeAncestorID};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_233removeAncestorID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_ancestor_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("removeAncestorID (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_ancestor_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1176, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1176, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "removeAncestorID", 0) < (0)) __PYX_ERR(8, 1176, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("removeAncestorID", 1, 1, 1, i); __PYX_ERR(8, 1176, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1176, __pyx_L3_error)
    }
    __pyx_v_ancestor_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_ancestor_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1176, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("removeAncestorID", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1176, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.removeAncestorID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_232removeAncestorID(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_ancestor_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_232removeAncestorID(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_ancestor_id) {
  int __pyx_v_cpp_ancestor_id;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("removeAncestorID", 0);

  /* "src/pygcgopt/decomposition.pxi":1179
 *         """removes ancestor id from list
 *         """
 *         cdef int cpp_ancestor_id = ancestor_id             # <<<<<<<<<<<<<<
 *         self.thisptr.removeAncestorID(cpp_ancestor_id)
 * 
*/
  __pyx_v_cpp_ancestor_id = __pyx_v_ancestor_id;

  /* "src/pygcgopt/decomposition.pxi":1180
 *         """
 *         cdef int cpp_ancestor_id = ancestor_id
 *         self.thisptr.removeAncestorID(cpp_ancestor_id)             # <<<<<<<<<<<<<<
 * 
 *     def addAncestorID(self, int ancestor_id):
*/
  try {
    __pyx_v_self->thisptr->removeAncestorID(__pyx_v_cpp_ancestor_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1180, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1176
 *         self.thisptr.copyPartitionStatistics(cpp_otherpartialdec)
 * 
 *     def removeAncestorID(PartialDecomposition self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """removes ancestor id from list
 *         """
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.removeAncestorID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1182
 *         self.thisptr.removeAncestorID(cpp_ancestor_id)
 * 
 *     def addAncestorID(self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """adds ancestor id to back of list
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_235addAncestorID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_234addAncestorID, "PartialDecomposition.addAncestorID(self, int ancestor_id)\n\nadds ancestor id to back of list\n\n:param ancestor: id of ancestor that is to be added");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_235addAncestorID = {"addAncestorID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_235addAncestorID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_234addAncestorID};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_235addAncestorID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_ancestor_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addAncestorID (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_ancestor_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1182, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1182, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addAncestorID", 0) < (0)) __PYX_ERR(8, 1182, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addAncestorID", 1, 1, 1, i); __PYX_ERR(8, 1182, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1182, __pyx_L3_error)
    }
    __pyx_v_ancestor_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_ancestor_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1182, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addAncestorID", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1182, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addAncestorID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_234addAncestorID(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_ancestor_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_234addAncestorID(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_ancestor_id) {
  int __pyx_v_cpp_ancestor_id;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addAncestorID", 0);

  /* "src/pygcgopt/decomposition.pxi":1187
 *         :param ancestor: id of ancestor that is to be added
 *         """
 *         cdef int cpp_ancestor_id = ancestor_id             # <<<<<<<<<<<<<<
 *         self.thisptr.addAncestorID(cpp_ancestor_id)
 * 
*/
  __pyx_v_cpp_ancestor_id = __pyx_v_ancestor_id;

  /* "src/pygcgopt/decomposition.pxi":1188
 *         """
 *         cdef int cpp_ancestor_id = ancestor_id
 *         self.thisptr.addAncestorID(cpp_ancestor_id)             # <<<<<<<<<<<<<<
 * 
 *     def getBlocksForEqClass(PartialDecomposition self, int rep_id):
*/
  try {
    __pyx_v_self->thisptr->addAncestorID(__pyx_v_cpp_ancestor_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1188, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1182
 *         self.thisptr.removeAncestorID(cpp_ancestor_id)
 * 
 *     def addAncestorID(self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """adds ancestor id to back of list
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.addAncestorID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1190
 *         self.thisptr.addAncestorID(cpp_ancestor_id)
 * 
 *     def getBlocksForEqClass(PartialDecomposition self, int rep_id):             # <<<<<<<<<<<<<<
 *         """get a vector of block ids that are identical to block with id rep_id
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_237getBlocksForEqClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_236getBlocksForEqClass, "PartialDecomposition.getBlocksForEqClass(self, int rep_id)\n\nget a vector of block ids that are identical to block with id rep_id\n\n:param rep_id: id of the representative block\n:return: vector of block ids that are identical to block with id rep_id");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_237getBlocksForEqClass = {"getBlocksForEqClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_237getBlocksForEqClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_236getBlocksForEqClass};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_237getBlocksForEqClass(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_rep_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getBlocksForEqClass (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_rep_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1190, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1190, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getBlocksForEqClass", 0) < (0)) __PYX_ERR(8, 1190, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getBlocksForEqClass", 1, 1, 1, i); __PYX_ERR(8, 1190, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1190, __pyx_L3_error)
    }
    __pyx_v_rep_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_rep_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1190, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getBlocksForEqClass", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1190, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getBlocksForEqClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_236getBlocksForEqClass(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_rep_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_236getBlocksForEqClass(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_rep_id) {
  int __pyx_v_cpp_rep_id;
  std::vector<int>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getBlocksForEqClass", 0);

  /* "src/pygcgopt/decomposition.pxi":1196
 *         :return: vector of block ids that are identical to block with id rep_id
 *         """
 *         cdef int cpp_rep_id = rep_id             # <<<<<<<<<<<<<<
 *         cdef vector[int] result = self.thisptr.getBlocksForEqClass(cpp_rep_id)
 *         return result
*/
  __pyx_v_cpp_rep_id = __pyx_v_rep_id;

  /* "src/pygcgopt/decomposition.pxi":1197
 *         """
 *         cdef int cpp_rep_id = rep_id
 *         cdef vector[int] result = self.thisptr.getBlocksForEqClass(cpp_rep_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getBlocksForEqClass(__pyx_v_cpp_rep_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1197, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1198
 *         cdef int cpp_rep_id = rep_id
 *         cdef vector[int] result = self.thisptr.getBlocksForEqClass(cpp_rep_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNNewBlocksVector(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1190
 *         self.thisptr.addAncestorID(cpp_ancestor_id)
 * 
 *     def getBlocksForEqClass(PartialDecomposition self, int rep_id):             # <<<<<<<<<<<<<<
 *         """get a vector of block ids that are identical to block with id rep_id
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getBlocksForEqClass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1200
 *         return result
 * 
 *     def getNNewBlocksVector(self):             # <<<<<<<<<<<<<<
 *         """gets number of blocks the detectors in the detectorchain added
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_239getNNewBlocksVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_238getNNewBlocksVector, "PartialDecomposition.getNNewBlocksVector(self)\n\ngets number of blocks the detectors in the detectorchain added\n\n:return: number of blocks the detectors in the detectorchain added");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_239getNNewBlocksVector = {"getNNewBlocksVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_239getNNewBlocksVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_238getNNewBlocksVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_239getNNewBlocksVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNNewBlocksVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNNewBlocksVector", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNNewBlocksVector", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_238getNNewBlocksVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_238getNNewBlocksVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<int>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNNewBlocksVector", 0);

  /* "src/pygcgopt/decomposition.pxi":1205
 *         :return: number of blocks the detectors in the detectorchain added
 *         """
 *         cdef vector[int] result = self.thisptr.getNNewBlocksVector()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNNewBlocksVector();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1205, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1206
 *         """
 *         cdef vector[int] result = self.thisptr.getNNewBlocksVector()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNAncestors(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1200
 *         return result
 * 
 *     def getNNewBlocksVector(self):             # <<<<<<<<<<<<<<
 *         """gets number of blocks the detectors in the detectorchain added
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNNewBlocksVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1208
 *         return result
 * 
 *     def getNAncestors(self):             # <<<<<<<<<<<<<<
 *         """gets number of ancestor partialdecs
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_241getNAncestors(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_240getNAncestors, "PartialDecomposition.getNAncestors(self)\n\ngets number of ancestor partialdecs\n\n:return: number of ancestor partialdecs");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_241getNAncestors = {"getNAncestors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_241getNAncestors, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_240getNAncestors};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_241getNAncestors(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNAncestors (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNAncestors", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNAncestors", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_240getNAncestors(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_240getNAncestors(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNAncestors", 0);

  /* "src/pygcgopt/decomposition.pxi":1213
 *         :return: number of ancestor partialdecs
 *         """
 *         cdef int result = self.thisptr.getNAncestors()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNAncestors();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1213, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1214
 *         """
 *         cdef int result = self.thisptr.getNAncestors()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getNNewBlocks(self, int detectorchain_id):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1214, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1208
 *         return result
 * 
 *     def getNAncestors(self):             # <<<<<<<<<<<<<<
 *         """gets number of ancestor partialdecs
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNAncestors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1216
 *         return result
 * 
 *     def getNNewBlocks(self, int detectorchain_id):             # <<<<<<<<<<<<<<
 *         """gets number of blocks a detector added
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_243getNNewBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_242getNNewBlocks, "PartialDecomposition.getNNewBlocks(self, int detectorchain_id)\n\ngets number of blocks a detector added\n\n:return: number of blocks a detector added");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_243getNNewBlocks = {"getNNewBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_243getNNewBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_242getNNewBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_243getNNewBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchain_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNNewBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchain_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1216, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1216, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getNNewBlocks", 0) < (0)) __PYX_ERR(8, 1216, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getNNewBlocks", 1, 1, 1, i); __PYX_ERR(8, 1216, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1216, __pyx_L3_error)
    }
    __pyx_v_detectorchain_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchain_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1216, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getNNewBlocks", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1216, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNNewBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_242getNNewBlocks(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchain_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_242getNNewBlocks(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchain_id) {
  int __pyx_v_cpp_detectorchain_id;
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNNewBlocks", 0);

  /* "src/pygcgopt/decomposition.pxi":1221
 *         :return: number of blocks a detector added
 *         """
 *         cdef int cpp_detectorchain_id = detectorchain_id             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getNNewBlocks(cpp_detectorchain_id)
 *         return result
*/
  __pyx_v_cpp_detectorchain_id = __pyx_v_detectorchain_id;

  /* "src/pygcgopt/decomposition.pxi":1222
 *         """
 *         cdef int cpp_detectorchain_id = detectorchain_id
 *         cdef int result = self.thisptr.getNNewBlocks(cpp_detectorchain_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNNewBlocks(__pyx_v_cpp_detectorchain_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1222, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1223
 *         cdef int cpp_detectorchain_id = detectorchain_id
 *         cdef int result = self.thisptr.getNNewBlocks(cpp_detectorchain_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getFinishedByFinisher(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1216
 *         return result
 * 
 *     def getNNewBlocks(self, int detectorchain_id):             # <<<<<<<<<<<<<<
 *         """gets number of blocks a detector added
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getNNewBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1225
 *         return result
 * 
 *     def getFinishedByFinisher(self):             # <<<<<<<<<<<<<<
 *         """returns True iff this partialdec was finished by finishPartialdec() method of a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_245getFinishedByFinisher(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_244getFinishedByFinisher, "PartialDecomposition.getFinishedByFinisher(self)\n\nreturns True iff this partialdec was finished by finishPartialdec() method of a detector\n\n:return: True iff this partialdec was finished by finishPartialdec() method of a detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_245getFinishedByFinisher = {"getFinishedByFinisher", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_245getFinishedByFinisher, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_244getFinishedByFinisher};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_245getFinishedByFinisher(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getFinishedByFinisher (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getFinishedByFinisher", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getFinishedByFinisher", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_244getFinishedByFinisher(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_244getFinishedByFinisher(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  bool __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getFinishedByFinisher", 0);

  /* "src/pygcgopt/decomposition.pxi":1230
 *         :return: True iff this partialdec was finished by finishPartialdec() method of a detector
 *         """
 *         cdef bool result = self.thisptr.getFinishedByFinisher()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getFinishedByFinisher();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1230, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1231
 *         """
 *         cdef bool result = self.thisptr.getFinishedByFinisher()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getDetectorchainInfo(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1231, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1225
 *         return result
 * 
 *     def getFinishedByFinisher(self):             # <<<<<<<<<<<<<<
 *         """returns True iff this partialdec was finished by finishPartialdec() method of a detector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getFinishedByFinisher", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1233
 *         return result
 * 
 *     def getDetectorchainInfo(self):             # <<<<<<<<<<<<<<
 *         """gets the detectorchain info vector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_247getDetectorchainInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_246getDetectorchainInfo, "PartialDecomposition.getDetectorchainInfo(self)\n\ngets the detectorchain info vector\n\n:return: detectorchain info vector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_247getDetectorchainInfo = {"getDetectorchainInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_247getDetectorchainInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_246getDetectorchainInfo};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_247getDetectorchainInfo(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getDetectorchainInfo (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getDetectorchainInfo", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getDetectorchainInfo", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_246getDetectorchainInfo(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_246getDetectorchainInfo(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<std::string>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<std::string>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getDetectorchainInfo", 0);

  /* "src/pygcgopt/decomposition.pxi":1238
 *         :return: detectorchain info vector
 *         """
 *         cdef vector[string] result = self.thisptr.getDetectorchainInfo()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetectorchainInfo();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1238, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1239
 *         """
 *         cdef vector[string] result = self.thisptr.getDetectorchainInfo()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def shouldCompletedByConsToMaster(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_std_3a__3a_string(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1233
 *         return result
 * 
 *     def getDetectorchainInfo(self):             # <<<<<<<<<<<<<<
 *         """gets the detectorchain info vector
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getDetectorchainInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1241
 *         return result
 * 
 *     def shouldCompletedByConsToMaster(self):             # <<<<<<<<<<<<<<
 *         """checks whether this partialdec is a userpartialdec that should be completed
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_249shouldCompletedByConsToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_248shouldCompletedByConsToMaster, "PartialDecomposition.shouldCompletedByConsToMaster(self)\n\nchecks whether this partialdec is a userpartialdec that should be completed\n\nthe completion should be done by setting unspecified constraints to master\n:return: True iff this partialdec is a userpartialdec that should be completed");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_249shouldCompletedByConsToMaster = {"shouldCompletedByConsToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_249shouldCompletedByConsToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_248shouldCompletedByConsToMaster};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_249shouldCompletedByConsToMaster(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shouldCompletedByConsToMaster (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("shouldCompletedByConsToMaster", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("shouldCompletedByConsToMaster", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_248shouldCompletedByConsToMaster(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_248shouldCompletedByConsToMaster(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  unsigned int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  unsigned int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("shouldCompletedByConsToMaster", 0);

  /* "src/pygcgopt/decomposition.pxi":1247
 *         :return: True iff this partialdec is a userpartialdec that should be completed
 *         """
 *         cdef unsigned int result = self.thisptr.shouldCompletedByConsToMaster()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->shouldCompletedByConsToMaster();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1247, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1248
 *         """
 *         cdef unsigned int result = self.thisptr.shouldCompletedByConsToMaster()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def setFinishedByFinisher(self, bool finished):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_unsigned_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1241
 *         return result
 * 
 *     def shouldCompletedByConsToMaster(self):             # <<<<<<<<<<<<<<
 *         """checks whether this partialdec is a userpartialdec that should be completed
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.shouldCompletedByConsToMaster", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1250
 *         return result
 * 
 *     def setFinishedByFinisher(self, bool finished):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec was finished by a finishing detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_251setFinishedByFinisher(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_250setFinishedByFinisher, "PartialDecomposition.setFinishedByFinisher(self, bool finished)\n\nsets whether this partialdec was finished by a finishing detector\n\n:param finished: is this partialdecs finished by a finishing detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_251setFinishedByFinisher = {"setFinishedByFinisher", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_251setFinishedByFinisher, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_250setFinishedByFinisher};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_251setFinishedByFinisher(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  bool __pyx_v_finished;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setFinishedByFinisher (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_finished,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1250, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1250, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setFinishedByFinisher", 0) < (0)) __PYX_ERR(8, 1250, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setFinishedByFinisher", 1, 1, 1, i); __PYX_ERR(8, 1250, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1250, __pyx_L3_error)
    }
    __pyx_v_finished = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_finished == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(8, 1250, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setFinishedByFinisher", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1250, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setFinishedByFinisher", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_250setFinishedByFinisher(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_finished);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_250setFinishedByFinisher(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_finished) {
  bool __pyx_v_cpp_finished;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setFinishedByFinisher", 0);

  /* "src/pygcgopt/decomposition.pxi":1255
 *         :param finished: is this partialdecs finished by a finishing detector
 *         """
 *         cdef bool cpp_finished = finished             # <<<<<<<<<<<<<<
 *         self.thisptr.setFinishedByFinisher(cpp_finished)
 * 
*/
  __pyx_v_cpp_finished = __pyx_v_finished;

  /* "src/pygcgopt/decomposition.pxi":1256
 *         """
 *         cdef bool cpp_finished = finished
 *         self.thisptr.setFinishedByFinisher(cpp_finished)             # <<<<<<<<<<<<<<
 * 
 *     def calcAggregationInformation(self, bool ignoreDetectionLimits):
*/
  try {
    __pyx_v_self->thisptr->setFinishedByFinisher(__pyx_v_cpp_finished);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1256, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1250
 *         return result
 * 
 *     def setFinishedByFinisher(self, bool finished):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec was finished by a finishing detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setFinishedByFinisher", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1258
 *         self.thisptr.setFinishedByFinisher(cpp_finished)
 * 
 *     def calcAggregationInformation(self, bool ignoreDetectionLimits):             # <<<<<<<<<<<<<<
 *         """computes if aggregation of sub problems is possible
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_253calcAggregationInformation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_252calcAggregationInformation, "PartialDecomposition.calcAggregationInformation(self, bool ignoreDetectionLimits)\n\ncomputes if aggregation of sub problems is possible\n\nchecks if aggregation of sub problems is possible and stores the corresponding aggregation information\n\n:param ignoreDetectionLimits: Set to True if computation should ignore detection limits\n\nThis parameter is ignored if the patched bliss version is not present.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_253calcAggregationInformation = {"calcAggregationInformation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_253calcAggregationInformation, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_252calcAggregationInformation};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_253calcAggregationInformation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  bool __pyx_v_ignoreDetectionLimits;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("calcAggregationInformation (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_ignoreDetectionLimits,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1258, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1258, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "calcAggregationInformation", 0) < (0)) __PYX_ERR(8, 1258, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("calcAggregationInformation", 1, 1, 1, i); __PYX_ERR(8, 1258, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1258, __pyx_L3_error)
    }
    __pyx_v_ignoreDetectionLimits = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_ignoreDetectionLimits == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(8, 1258, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("calcAggregationInformation", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1258, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.calcAggregationInformation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_252calcAggregationInformation(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_ignoreDetectionLimits);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_252calcAggregationInformation(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_ignoreDetectionLimits) {
  bool __pyx_v_cpp_ignoreDetectionLimits;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("calcAggregationInformation", 0);

  /* "src/pygcgopt/decomposition.pxi":1267
 *         This parameter is ignored if the patched bliss version is not present.
 *         """
 *         cdef bool cpp_ignoreDetectionLimits = ignoreDetectionLimits             # <<<<<<<<<<<<<<
 *         self.thisptr.calcAggregationInformation(cpp_ignoreDetectionLimits)
 * 
*/
  __pyx_v_cpp_ignoreDetectionLimits = __pyx_v_ignoreDetectionLimits;

  /* "src/pygcgopt/decomposition.pxi":1268
 *         """
 *         cdef bool cpp_ignoreDetectionLimits = ignoreDetectionLimits
 *         self.thisptr.calcAggregationInformation(cpp_ignoreDetectionLimits)             # <<<<<<<<<<<<<<
 * 
 *     def setDetectorPropagated(self, Detector detector):
*/
  try {
    __pyx_v_self->thisptr->calcAggregationInformation(__pyx_v_cpp_ignoreDetectionLimits);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1268, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1258
 *         self.thisptr.setFinishedByFinisher(cpp_finished)
 * 
 *     def calcAggregationInformation(self, bool ignoreDetectionLimits):             # <<<<<<<<<<<<<<
 *         """computes if aggregation of sub problems is possible
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.calcAggregationInformation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1270
 *         self.thisptr.calcAggregationInformation(cpp_ignoreDetectionLimits)
 * 
 *     def setDetectorPropagated(self, Detector detector):             # <<<<<<<<<<<<<<
 *         """sets partialdec to be propagated by a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_255setDetectorPropagated(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_254setDetectorPropagated, "PartialDecomposition.setDetectorPropagated(self, Detector detector)\n\nsets partialdec to be propagated by a detector\n\n:param detector: detector that is registered for this partialdec");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_255setDetectorPropagated = {"setDetectorPropagated", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_255setDetectorPropagated, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_254setDetectorPropagated};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_255setDetectorPropagated(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setDetectorPropagated (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1270, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1270, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setDetectorPropagated", 0) < (0)) __PYX_ERR(8, 1270, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setDetectorPropagated", 1, 1, 1, i); __PYX_ERR(8, 1270, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1270, __pyx_L3_error)
    }
    __pyx_v_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setDetectorPropagated", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1270, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setDetectorPropagated", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_detector), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, 1, "detector", 0))) __PYX_ERR(8, 1270, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_254setDetectorPropagated(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detector);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_254setDetectorPropagated(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector) {
  GCG_DETECTOR *__pyx_v_dec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setDetectorPropagated", 0);

  /* "src/pygcgopt/decomposition.pxi":1275
 *         :param detector: detector that is registered for this partialdec
 *         """
 *         cdef GCG_DETECTOR* dec = <GCG_DETECTOR*>detector             # <<<<<<<<<<<<<<
 *         self.thisptr.setDetectorPropagated(dec)
 * 
*/
  __pyx_v_dec = ((GCG_DETECTOR *)__pyx_v_detector);

  /* "src/pygcgopt/decomposition.pxi":1276
 *         """
 *         cdef GCG_DETECTOR* dec = <GCG_DETECTOR*>detector
 *         self.thisptr.setDetectorPropagated(dec)             # <<<<<<<<<<<<<<
 * 
 *     def setDetectorFinished(self, Detector detector):
*/
  try {
    __pyx_v_self->thisptr->setDetectorPropagated(__pyx_v_dec);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1276, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1270
 *         self.thisptr.calcAggregationInformation(cpp_ignoreDetectionLimits)
 * 
 *     def setDetectorPropagated(self, Detector detector):             # <<<<<<<<<<<<<<
 *         """sets partialdec to be propagated by a detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setDetectorPropagated", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1278
 *         self.thisptr.setDetectorPropagated(dec)
 * 
 *     def setDetectorFinished(self, Detector detector):             # <<<<<<<<<<<<<<
 *         """sets detector that finished the partialdec
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_257setDetectorFinished(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_256setDetectorFinished, "PartialDecomposition.setDetectorFinished(self, Detector detector)\n\nsets detector that finished the partialdec\n\n:param detector: detector that has finished this partialdecs");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_257setDetectorFinished = {"setDetectorFinished", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_257setDetectorFinished, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_256setDetectorFinished};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_257setDetectorFinished(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setDetectorFinished (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1278, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1278, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setDetectorFinished", 0) < (0)) __PYX_ERR(8, 1278, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setDetectorFinished", 1, 1, 1, i); __PYX_ERR(8, 1278, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1278, __pyx_L3_error)
    }
    __pyx_v_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setDetectorFinished", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1278, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setDetectorFinished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_detector), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, 1, "detector", 0))) __PYX_ERR(8, 1278, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_256setDetectorFinished(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detector);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_256setDetectorFinished(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector) {
  GCG_DETECTOR *__pyx_v_dec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setDetectorFinished", 0);

  /* "src/pygcgopt/decomposition.pxi":1283
 *         :param detector: detector that has finished this partialdecs
 *         """
 *         cdef GCG_DETECTOR* dec = <GCG_DETECTOR*>detector             # <<<<<<<<<<<<<<
 *         self.thisptr.setDetectorFinished(dec)
 * 
*/
  __pyx_v_dec = ((GCG_DETECTOR *)__pyx_v_detector);

  /* "src/pygcgopt/decomposition.pxi":1284
 *         """
 *         cdef GCG_DETECTOR* dec = <GCG_DETECTOR*>detector
 *         self.thisptr.setDetectorFinished(dec)             # <<<<<<<<<<<<<<
 * 
 *     def setDetectorFinishedOrig(self):
*/
  try {
    __pyx_v_self->thisptr->setDetectorFinished(__pyx_v_dec);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1284, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1278
 *         self.thisptr.setDetectorPropagated(dec)
 * 
 *     def setDetectorFinished(self, Detector detector):             # <<<<<<<<<<<<<<
 *         """sets detector that finished the partialdec
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setDetectorFinished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1286
 *         self.thisptr.setDetectorFinished(dec)
 * 
 *     def setDetectorFinishedOrig(self):             # <<<<<<<<<<<<<<
 *         """sets detector that finished the partialdec in the original problem
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_259setDetectorFinishedOrig(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_258setDetectorFinishedOrig, "PartialDecomposition.setDetectorFinishedOrig(self)\n\nsets detector that finished the partialdec in the original problem\n\n:param detector: detector that has finished this partialdecs\n:note: does not add the detector to the detectorchain and does not modify partition statistics");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_259setDetectorFinishedOrig = {"setDetectorFinishedOrig", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_259setDetectorFinishedOrig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_258setDetectorFinishedOrig};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_259setDetectorFinishedOrig(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setDetectorFinishedOrig (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("setDetectorFinishedOrig", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("setDetectorFinishedOrig", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_258setDetectorFinishedOrig(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_258setDetectorFinishedOrig(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setDetectorFinishedOrig", 0);

  /* "src/pygcgopt/decomposition.pxi":1292
 *         :note: does not add the detector to the detectorchain and does not modify partition statistics
 *         """
 *         self.thisptr.setDetectorFinishedOrig()             # <<<<<<<<<<<<<<
 * 
 *     def setPctConssToBlockVector(self, object newvector):
*/
  try {
    __pyx_v_self->thisptr->setDetectorFinishedOrig();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1292, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1286
 *         self.thisptr.setDetectorFinished(dec)
 * 
 *     def setDetectorFinishedOrig(self):             # <<<<<<<<<<<<<<
 *         """sets detector that finished the partialdec in the original problem
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setDetectorFinishedOrig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1294
 *         self.thisptr.setDetectorFinishedOrig()
 * 
 *     def setPctConssToBlockVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints set to blocks per involved detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_261setPctConssToBlockVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_260setPctConssToBlockVector, "PartialDecomposition.setPctConssToBlockVector(self, newvector)\n\nset statistical vector of fractions of constraints set to blocks per involved detector\n\n:param newvector: vector of fractions of constraints set to blocks per involved detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_261setPctConssToBlockVector = {"setPctConssToBlockVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_261setPctConssToBlockVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_260setPctConssToBlockVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_261setPctConssToBlockVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_newvector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPctConssToBlockVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_newvector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1294, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1294, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPctConssToBlockVector", 0) < (0)) __PYX_ERR(8, 1294, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPctConssToBlockVector", 1, 1, 1, i); __PYX_ERR(8, 1294, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1294, __pyx_L3_error)
    }
    __pyx_v_newvector = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPctConssToBlockVector", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1294, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctConssToBlockVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_260setPctConssToBlockVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_newvector);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_260setPctConssToBlockVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector) {
  std::vector<double>  __pyx_v_cpp_newvector;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPctConssToBlockVector", 0);

  /* "src/pygcgopt/decomposition.pxi":1299
 *         :param newvector: vector of fractions of constraints set to blocks per involved detector
 *         """
 *         cdef vector[double] cpp_newvector = newvector             # <<<<<<<<<<<<<<
 *         self.thisptr.setPctConssToBlockVector(cpp_newvector)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_double(__pyx_v_newvector); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1299, __pyx_L1_error)
  __pyx_v_cpp_newvector = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1300
 *         """
 *         cdef vector[double] cpp_newvector = newvector
 *         self.thisptr.setPctConssToBlockVector(cpp_newvector)             # <<<<<<<<<<<<<<
 * 
 *     def setPctConssFromFreeVector(self, object newvector):
*/
  try {
    __pyx_v_self->thisptr->setPctConssToBlockVector(__pyx_v_cpp_newvector);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1300, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1294
 *         self.thisptr.setDetectorFinishedOrig()
 * 
 *     def setPctConssToBlockVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints set to blocks per involved detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctConssToBlockVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1302
 *         self.thisptr.setPctConssToBlockVector(cpp_newvector)
 * 
 *     def setPctConssFromFreeVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints that are not longer open per involved detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_263setPctConssFromFreeVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_262setPctConssFromFreeVector, "PartialDecomposition.setPctConssFromFreeVector(self, newvector)\n\nset statistical vector of fractions of constraints that are not longer open per involved detector\n\n:param newvector: vector of fractions of constraints that are not longer open per involved detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_263setPctConssFromFreeVector = {"setPctConssFromFreeVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_263setPctConssFromFreeVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_262setPctConssFromFreeVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_263setPctConssFromFreeVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_newvector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPctConssFromFreeVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_newvector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1302, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1302, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPctConssFromFreeVector", 0) < (0)) __PYX_ERR(8, 1302, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPctConssFromFreeVector", 1, 1, 1, i); __PYX_ERR(8, 1302, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1302, __pyx_L3_error)
    }
    __pyx_v_newvector = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPctConssFromFreeVector", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1302, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctConssFromFreeVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_262setPctConssFromFreeVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_newvector);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_262setPctConssFromFreeVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector) {
  std::vector<double>  __pyx_v_cpp_newvector;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPctConssFromFreeVector", 0);

  /* "src/pygcgopt/decomposition.pxi":1307
 *         :param newvector: vector of fractions of constraints that are not longer open per involved detector
 *         """
 *         cdef vector[double] cpp_newvector = newvector             # <<<<<<<<<<<<<<
 *         self.thisptr.setPctConssFromFreeVector(cpp_newvector)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_double(__pyx_v_newvector); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1307, __pyx_L1_error)
  __pyx_v_cpp_newvector = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1308
 *         """
 *         cdef vector[double] cpp_newvector = newvector
 *         self.thisptr.setPctConssFromFreeVector(cpp_newvector)             # <<<<<<<<<<<<<<
 * 
 *     def setPctConssToBorderVector(self, object newvector):
*/
  try {
    __pyx_v_self->thisptr->setPctConssFromFreeVector(__pyx_v_cpp_newvector);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1308, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1302
 *         self.thisptr.setPctConssToBlockVector(cpp_newvector)
 * 
 *     def setPctConssFromFreeVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints that are not longer open per involved detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctConssFromFreeVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1310
 *         self.thisptr.setPctConssFromFreeVector(cpp_newvector)
 * 
 *     def setPctConssToBorderVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints assigned to the border per involved detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_265setPctConssToBorderVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_264setPctConssToBorderVector, "PartialDecomposition.setPctConssToBorderVector(self, newvector)\n\nset statistical vector of fractions of constraints assigned to the border per involved detector\n\n:param newvector: vector of fractions of constraints assigned to the border per involved detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_265setPctConssToBorderVector = {"setPctConssToBorderVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_265setPctConssToBorderVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_264setPctConssToBorderVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_265setPctConssToBorderVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_newvector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPctConssToBorderVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_newvector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1310, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1310, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPctConssToBorderVector", 0) < (0)) __PYX_ERR(8, 1310, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPctConssToBorderVector", 1, 1, 1, i); __PYX_ERR(8, 1310, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1310, __pyx_L3_error)
    }
    __pyx_v_newvector = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPctConssToBorderVector", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1310, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctConssToBorderVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_264setPctConssToBorderVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_newvector);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_264setPctConssToBorderVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector) {
  std::vector<double>  __pyx_v_cpp_newvector;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPctConssToBorderVector", 0);

  /* "src/pygcgopt/decomposition.pxi":1315
 *         :param newvector: vector of fractions of constraints assigned to the border per involved detector
 *         """
 *         cdef vector[double] cpp_newvector = newvector             # <<<<<<<<<<<<<<
 *         self.thisptr.setPctConssToBorderVector(cpp_newvector)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_double(__pyx_v_newvector); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1315, __pyx_L1_error)
  __pyx_v_cpp_newvector = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1316
 *         """
 *         cdef vector[double] cpp_newvector = newvector
 *         self.thisptr.setPctConssToBorderVector(cpp_newvector)             # <<<<<<<<<<<<<<
 * 
 *     def setPctVarsToBorderVector(self, object newvector):
*/
  try {
    __pyx_v_self->thisptr->setPctConssToBorderVector(__pyx_v_cpp_newvector);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1316, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1310
 *         self.thisptr.setPctConssFromFreeVector(cpp_newvector)
 * 
 *     def setPctConssToBorderVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints assigned to the border per involved detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctConssToBorderVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1318
 *         self.thisptr.setPctConssToBorderVector(cpp_newvector)
 * 
 *     def setPctVarsToBorderVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fraction of variables assigned to the border per involved detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_267setPctVarsToBorderVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_266setPctVarsToBorderVector, "PartialDecomposition.setPctVarsToBorderVector(self, newvector)\n\nset statistical vector of fraction of variables assigned to the border per involved detector\n\n:param newvector: vector of fractions of variables assigned to the border per involved detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_267setPctVarsToBorderVector = {"setPctVarsToBorderVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_267setPctVarsToBorderVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_266setPctVarsToBorderVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_267setPctVarsToBorderVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_newvector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPctVarsToBorderVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_newvector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1318, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1318, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPctVarsToBorderVector", 0) < (0)) __PYX_ERR(8, 1318, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPctVarsToBorderVector", 1, 1, 1, i); __PYX_ERR(8, 1318, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1318, __pyx_L3_error)
    }
    __pyx_v_newvector = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPctVarsToBorderVector", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1318, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctVarsToBorderVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_266setPctVarsToBorderVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_newvector);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_266setPctVarsToBorderVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector) {
  std::vector<double>  __pyx_v_cpp_newvector;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPctVarsToBorderVector", 0);

  /* "src/pygcgopt/decomposition.pxi":1323
 *         :param newvector: vector of fractions of variables assigned to the border per involved detector
 *         """
 *         cdef vector[double] cpp_newvector = newvector             # <<<<<<<<<<<<<<
 *         self.thisptr.setPctVarsToBorderVector(cpp_newvector)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_double(__pyx_v_newvector); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1323, __pyx_L1_error)
  __pyx_v_cpp_newvector = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1324
 *         """
 *         cdef vector[double] cpp_newvector = newvector
 *         self.thisptr.setPctVarsToBorderVector(cpp_newvector)             # <<<<<<<<<<<<<<
 * 
 *     def setPctVarsToBlockVector(self, object newvector):
*/
  try {
    __pyx_v_self->thisptr->setPctVarsToBorderVector(__pyx_v_cpp_newvector);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1324, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1318
 *         self.thisptr.setPctConssToBorderVector(cpp_newvector)
 * 
 *     def setPctVarsToBorderVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fraction of variables assigned to the border per involved detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctVarsToBorderVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1326
 *         self.thisptr.setPctVarsToBorderVector(cpp_newvector)
 * 
 *     def setPctVarsToBlockVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of variables assigned to a block per involved detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_269setPctVarsToBlockVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_268setPctVarsToBlockVector, "PartialDecomposition.setPctVarsToBlockVector(self, newvector)\n\nset statistical vector of fractions of variables assigned to a block per involved detector\n\n:param newvector: vector of fractions of variables assigned to a block per involved detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_269setPctVarsToBlockVector = {"setPctVarsToBlockVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_269setPctVarsToBlockVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_268setPctVarsToBlockVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_269setPctVarsToBlockVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_newvector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPctVarsToBlockVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_newvector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1326, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1326, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPctVarsToBlockVector", 0) < (0)) __PYX_ERR(8, 1326, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPctVarsToBlockVector", 1, 1, 1, i); __PYX_ERR(8, 1326, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1326, __pyx_L3_error)
    }
    __pyx_v_newvector = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPctVarsToBlockVector", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1326, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctVarsToBlockVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_268setPctVarsToBlockVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_newvector);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_268setPctVarsToBlockVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector) {
  std::vector<double>  __pyx_v_cpp_newvector;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPctVarsToBlockVector", 0);

  /* "src/pygcgopt/decomposition.pxi":1331
 *         :param newvector: vector of fractions of variables assigned to a block per involved detector
 *         """
 *         cdef vector[double] cpp_newvector = newvector             # <<<<<<<<<<<<<<
 *         self.thisptr.setPctVarsToBlockVector(cpp_newvector)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_double(__pyx_v_newvector); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1331, __pyx_L1_error)
  __pyx_v_cpp_newvector = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1332
 *         """
 *         cdef vector[double] cpp_newvector = newvector
 *         self.thisptr.setPctVarsToBlockVector(cpp_newvector)             # <<<<<<<<<<<<<<
 * 
 *     def setPctVarsFromFreeVector(self, object newvector):
*/
  try {
    __pyx_v_self->thisptr->setPctVarsToBlockVector(__pyx_v_cpp_newvector);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1332, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1326
 *         self.thisptr.setPctVarsToBorderVector(cpp_newvector)
 * 
 *     def setPctVarsToBlockVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of variables assigned to a block per involved detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctVarsToBlockVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1334
 *         self.thisptr.setPctVarsToBlockVector(cpp_newvector)
 * 
 *     def setPctVarsFromFreeVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of variables that are not longer open per involved detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_271setPctVarsFromFreeVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_270setPctVarsFromFreeVector, "PartialDecomposition.setPctVarsFromFreeVector(self, newvector)\n\nset statistical vector of variables that are not longer open per involved detector\n\n:param newvector: vector of fractions of variables that are not longer open per involved detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_271setPctVarsFromFreeVector = {"setPctVarsFromFreeVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_271setPctVarsFromFreeVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_270setPctVarsFromFreeVector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_271setPctVarsFromFreeVector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_newvector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPctVarsFromFreeVector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_newvector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1334, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1334, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPctVarsFromFreeVector", 0) < (0)) __PYX_ERR(8, 1334, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPctVarsFromFreeVector", 1, 1, 1, i); __PYX_ERR(8, 1334, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1334, __pyx_L3_error)
    }
    __pyx_v_newvector = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPctVarsFromFreeVector", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1334, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctVarsFromFreeVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_270setPctVarsFromFreeVector(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_newvector);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_270setPctVarsFromFreeVector(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector) {
  std::vector<double>  __pyx_v_cpp_newvector;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPctVarsFromFreeVector", 0);

  /* "src/pygcgopt/decomposition.pxi":1339
 *         :param newvector: vector of fractions of variables that are not longer open per involved detector
 *         """
 *         cdef vector[double] cpp_newvector = newvector             # <<<<<<<<<<<<<<
 *         self.thisptr.setPctVarsFromFreeVector(cpp_newvector)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_double(__pyx_v_newvector); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1339, __pyx_L1_error)
  __pyx_v_cpp_newvector = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1340
 *         """
 *         cdef vector[double] cpp_newvector = newvector
 *         self.thisptr.setPctVarsFromFreeVector(cpp_newvector)             # <<<<<<<<<<<<<<
 * 
 *     def setDetectorClockTimes(self, object newvector):
*/
  try {
    __pyx_v_self->thisptr->setPctVarsFromFreeVector(__pyx_v_cpp_newvector);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1340, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1334
 *         self.thisptr.setPctVarsToBlockVector(cpp_newvector)
 * 
 *     def setPctVarsFromFreeVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of variables that are not longer open per involved detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setPctVarsFromFreeVector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1342
 *         self.thisptr.setPctVarsFromFreeVector(cpp_newvector)
 * 
 *     def setDetectorClockTimes(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of the times that the detectors needed for detecting per involved detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_273setDetectorClockTimes(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_272setDetectorClockTimes, "PartialDecomposition.setDetectorClockTimes(self, newvector)\n\nset statistical vector of the times that the detectors needed for detecting per involved detector\n\n:param newvector: vector of the times that the detectors needed for detecting per involved detector");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_273setDetectorClockTimes = {"setDetectorClockTimes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_273setDetectorClockTimes, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_272setDetectorClockTimes};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_273setDetectorClockTimes(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_newvector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setDetectorClockTimes (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_newvector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1342, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1342, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setDetectorClockTimes", 0) < (0)) __PYX_ERR(8, 1342, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setDetectorClockTimes", 1, 1, 1, i); __PYX_ERR(8, 1342, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1342, __pyx_L3_error)
    }
    __pyx_v_newvector = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setDetectorClockTimes", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1342, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setDetectorClockTimes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_272setDetectorClockTimes(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_newvector);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_272setDetectorClockTimes(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newvector) {
  std::vector<double>  __pyx_v_cpp_newvector;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setDetectorClockTimes", 0);

  /* "src/pygcgopt/decomposition.pxi":1347
 *         :param newvector: vector of the times that the detectors needed for detecting per involved detector
 *         """
 *         cdef vector[double] cpp_newvector = newvector             # <<<<<<<<<<<<<<
 *         self.thisptr.setDetectorClockTimes(cpp_newvector)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_double(__pyx_v_newvector); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1347, __pyx_L1_error)
  __pyx_v_cpp_newvector = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1348
 *         """
 *         cdef vector[double] cpp_newvector = newvector
 *         self.thisptr.setDetectorClockTimes(cpp_newvector)             # <<<<<<<<<<<<<<
 * 
 *     def setFinishedByFinisherOrig(self, bool finished):
*/
  try {
    __pyx_v_self->thisptr->setDetectorClockTimes(__pyx_v_cpp_newvector);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1348, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1342
 *         self.thisptr.setPctVarsFromFreeVector(cpp_newvector)
 * 
 *     def setDetectorClockTimes(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of the times that the detectors needed for detecting per involved detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setDetectorClockTimes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1350
 *         self.thisptr.setDetectorClockTimes(cpp_newvector)
 * 
 *     def setFinishedByFinisherOrig(self, bool finished):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec was finished by a finishing detector in the original problem (in case this partialdec was translated)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_275setFinishedByFinisherOrig(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_274setFinishedByFinisherOrig, "PartialDecomposition.setFinishedByFinisherOrig(self, bool finished)\n\nsets whether this partialdec was finished by a finishing detector in the original problem (in case this partialdec was translated)\n\n:param finished: was this partialdecs finished by a finishing detector in orig");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_275setFinishedByFinisherOrig = {"setFinishedByFinisherOrig", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_275setFinishedByFinisherOrig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_274setFinishedByFinisherOrig};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_275setFinishedByFinisherOrig(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  bool __pyx_v_finished;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setFinishedByFinisherOrig (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_finished,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1350, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1350, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setFinishedByFinisherOrig", 0) < (0)) __PYX_ERR(8, 1350, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setFinishedByFinisherOrig", 1, 1, 1, i); __PYX_ERR(8, 1350, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1350, __pyx_L3_error)
    }
    __pyx_v_finished = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_finished == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(8, 1350, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setFinishedByFinisherOrig", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1350, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setFinishedByFinisherOrig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_274setFinishedByFinisherOrig(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_finished);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_274setFinishedByFinisherOrig(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_finished) {
  bool __pyx_v_cpp_finished;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setFinishedByFinisherOrig", 0);

  /* "src/pygcgopt/decomposition.pxi":1355
 *         :param finished: was this partialdecs finished by a finishing detector in orig
 *         """
 *         cdef bool cpp_finished = finished             # <<<<<<<<<<<<<<
 *         self.thisptr.setFinishedByFinisherOrig(cpp_finished)
 * 
*/
  __pyx_v_cpp_finished = __pyx_v_finished;

  /* "src/pygcgopt/decomposition.pxi":1356
 *         """
 *         cdef bool cpp_finished = finished
 *         self.thisptr.setFinishedByFinisherOrig(cpp_finished)             # <<<<<<<<<<<<<<
 * 
 *     def setStemsFromOrig(self, bool fromorig):
*/
  try {
    __pyx_v_self->thisptr->setFinishedByFinisherOrig(__pyx_v_cpp_finished);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1356, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1350
 *         self.thisptr.setDetectorClockTimes(cpp_newvector)
 * 
 *     def setFinishedByFinisherOrig(self, bool finished):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec was finished by a finishing detector in the original problem (in case this partialdec was translated)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setFinishedByFinisherOrig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1358
 *         self.thisptr.setFinishedByFinisherOrig(cpp_finished)
 * 
 *     def setStemsFromOrig(self, bool fromorig):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec stems from an orig problem partialdec
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_277setStemsFromOrig(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_276setStemsFromOrig, "PartialDecomposition.setStemsFromOrig(self, bool fromorig)\n\nsets whether this partialdec stems from an orig problem partialdec\n\n:param fromorig: has this partialdec ancestors from the orig problem");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_277setStemsFromOrig = {"setStemsFromOrig", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_277setStemsFromOrig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_276setStemsFromOrig};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_277setStemsFromOrig(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  bool __pyx_v_fromorig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setStemsFromOrig (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_fromorig,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1358, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1358, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setStemsFromOrig", 0) < (0)) __PYX_ERR(8, 1358, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setStemsFromOrig", 1, 1, 1, i); __PYX_ERR(8, 1358, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1358, __pyx_L3_error)
    }
    __pyx_v_fromorig = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_fromorig == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(8, 1358, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setStemsFromOrig", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1358, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setStemsFromOrig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_276setStemsFromOrig(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_fromorig);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_276setStemsFromOrig(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, bool __pyx_v_fromorig) {
  bool __pyx_v_cpp_fromorig;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setStemsFromOrig", 0);

  /* "src/pygcgopt/decomposition.pxi":1363
 *         :param fromorig: has this partialdec ancestors from the orig problem
 *         """
 *         cdef bool cpp_fromorig = fromorig             # <<<<<<<<<<<<<<
 *         self.thisptr.setStemsFromOrig(cpp_fromorig)
 * 
*/
  __pyx_v_cpp_fromorig = __pyx_v_fromorig;

  /* "src/pygcgopt/decomposition.pxi":1364
 *         """
 *         cdef bool cpp_fromorig = fromorig
 *         self.thisptr.setStemsFromOrig(cpp_fromorig)             # <<<<<<<<<<<<<<
 * 
 *     def getDetectorClockTime(self, int detectorchain_id):
*/
  try {
    __pyx_v_self->thisptr->setStemsFromOrig(__pyx_v_cpp_fromorig);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1364, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1358
 *         self.thisptr.setFinishedByFinisherOrig(cpp_finished)
 * 
 *     def setStemsFromOrig(self, bool fromorig):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec stems from an orig problem partialdec
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setStemsFromOrig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1366
 *         self.thisptr.setStemsFromOrig(cpp_fromorig)
 * 
 *     def getDetectorClockTime(self, int detectorchain_id):             # <<<<<<<<<<<<<<
 *         """returns the time that the detector related to the given detectorchainindex needed for detecting
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_279getDetectorClockTime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_278getDetectorClockTime, "PartialDecomposition.getDetectorClockTime(self, int detectorchain_id)\n\nreturns the time that the detector related to the given detectorchainindex needed for detecting\n\n:return: the clock time for the corresponding detector in the chain");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_279getDetectorClockTime = {"getDetectorClockTime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_279getDetectorClockTime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_278getDetectorClockTime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_279getDetectorClockTime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchain_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getDetectorClockTime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchain_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1366, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1366, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getDetectorClockTime", 0) < (0)) __PYX_ERR(8, 1366, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getDetectorClockTime", 1, 1, 1, i); __PYX_ERR(8, 1366, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1366, __pyx_L3_error)
    }
    __pyx_v_detectorchain_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchain_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1366, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getDetectorClockTime", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1366, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getDetectorClockTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_278getDetectorClockTime(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchain_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_278getDetectorClockTime(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchain_id) {
  int __pyx_v_cpp_detectorchain_id;
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getDetectorClockTime", 0);

  /* "src/pygcgopt/decomposition.pxi":1371
 *         :return: the clock time for the corresponding detector in the chain
 *         """
 *         cdef int cpp_detectorchain_id = detectorchain_id             # <<<<<<<<<<<<<<
 *         cdef double result = self.thisptr.getDetectorClockTime(cpp_detectorchain_id)
 *         return result
*/
  __pyx_v_cpp_detectorchain_id = __pyx_v_detectorchain_id;

  /* "src/pygcgopt/decomposition.pxi":1372
 *         """
 *         cdef int cpp_detectorchain_id = detectorchain_id
 *         cdef double result = self.thisptr.getDetectorClockTime(cpp_detectorchain_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetectorClockTime(__pyx_v_cpp_detectorchain_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1372, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1373
 *         cdef int cpp_detectorchain_id = detectorchain_id
 *         cdef double result = self.thisptr.getDetectorClockTime(cpp_detectorchain_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getEqClassForBlock(self, int block_id):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1366
 *         self.thisptr.setStemsFromOrig(cpp_fromorig)
 * 
 *     def getDetectorClockTime(self, int detectorchain_id):             # <<<<<<<<<<<<<<
 *         """returns the time that the detector related to the given detectorchainindex needed for detecting
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getDetectorClockTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1375
 *         return result
 * 
 *     def getEqClassForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets index of the representative block for a block, this might be block_id itself
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_281getEqClassForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_280getEqClassForBlock, "PartialDecomposition.getEqClassForBlock(self, int block_id)\n\ngets index of the representative block for a block, this might be block_id itself\n\n:param block_id: id of the block the representative is asked for\n:return: index of the representative block for a block, this might be block_id itself");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_281getEqClassForBlock = {"getEqClassForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_281getEqClassForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_280getEqClassForBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_281getEqClassForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_block_id;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getEqClassForBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_block_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1375, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1375, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getEqClassForBlock", 0) < (0)) __PYX_ERR(8, 1375, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getEqClassForBlock", 1, 1, 1, i); __PYX_ERR(8, 1375, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1375, __pyx_L3_error)
    }
    __pyx_v_block_id = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_block_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1375, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getEqClassForBlock", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1375, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getEqClassForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_280getEqClassForBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_block_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_280getEqClassForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_block_id) {
  int __pyx_v_cpp_block_id;
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getEqClassForBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":1381
 *         :return: index of the representative block for a block, this might be block_id itself
 *         """
 *         cdef int cpp_block_id = block_id             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getEqClassForBlock(cpp_block_id)
 *         return result
*/
  __pyx_v_cpp_block_id = __pyx_v_block_id;

  /* "src/pygcgopt/decomposition.pxi":1382
 *         """
 *         cdef int cpp_block_id = block_id
 *         cdef int result = self.thisptr.getEqClassForBlock(cpp_block_id)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getEqClassForBlock(__pyx_v_cpp_block_id);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1382, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1383
 *         cdef int cpp_block_id = block_id
 *         cdef int result = self.thisptr.getEqClassForBlock(cpp_block_id)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def showVisualization(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1375
 *         return result
 * 
 *     def getEqClassForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets index of the representative block for a block, this might be block_id itself
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getEqClassForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1385
 *         return result
 * 
 *     def showVisualization(self):             # <<<<<<<<<<<<<<
 *         """generates and opens a gp visualization of the partialdec
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_283showVisualization(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_282showVisualization, "PartialDecomposition.showVisualization(self)\n\ngenerates and opens a gp visualization of the partialdec\n\n.. note:: linux only");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_283showVisualization = {"showVisualization", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_283showVisualization, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_282showVisualization};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_283showVisualization(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("showVisualization (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("showVisualization", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("showVisualization", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_282showVisualization(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_282showVisualization(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("showVisualization", 0);

  /* "src/pygcgopt/decomposition.pxi":1390
 *         .. note:: linux only
 *         """
 *         self.thisptr.showVisualization()             # <<<<<<<<<<<<<<
 * 
 *     def _repr_svg_(self):
*/
  try {
    __pyx_v_self->thisptr->showVisualization();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1390, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1385
 *         return result
 * 
 *     def showVisualization(self):             # <<<<<<<<<<<<<<
 *         """generates and opens a gp visualization of the partialdec
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.showVisualization", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1392
 *         self.thisptr.showVisualization()
 * 
 *     def _repr_svg_(self):             # <<<<<<<<<<<<<<
 *         return self.__generate_visualization("svg")
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_285_repr_svg_(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_284_repr_svg_, "PartialDecomposition._repr_svg_(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_285_repr_svg_ = {"_repr_svg_", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_285_repr_svg_, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_284_repr_svg_};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_285_repr_svg_(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_repr_svg_ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("_repr_svg_", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("_repr_svg_", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_284_repr_svg_(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_284_repr_svg_(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_8pygcgopt_3gcg_20PartialDecomposition___generate_visualization __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_repr_svg_", 0);

  /* "src/pygcgopt/decomposition.pxi":1393
 * 
 *     def _repr_svg_(self):
 *         return self.__generate_visualization("svg")             # <<<<<<<<<<<<<<
 * 
 *     def _repr_png_(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.format = __pyx_mstate_global->__pyx_n_u_svg;
  __pyx_t_1 = ((struct __pyx_vtabstruct_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self->__pyx_vtab)->_PartialDecomposition__generate_visualization(__pyx_v_self, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1392
 *         self.thisptr.showVisualization()
 * 
 *     def _repr_svg_(self):             # <<<<<<<<<<<<<<
 *         return self.__generate_visualization("svg")
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition._repr_svg_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1395
 *         return self.__generate_visualization("svg")
 * 
 *     def _repr_png_(self):             # <<<<<<<<<<<<<<
 *         return self.__generate_visualization("png")
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_287_repr_png_(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_286_repr_png_, "PartialDecomposition._repr_png_(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_287_repr_png_ = {"_repr_png_", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_287_repr_png_, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_286_repr_png_};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_287_repr_png_(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_repr_png_ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("_repr_png_", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("_repr_png_", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_286_repr_png_(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_286_repr_png_(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_8pygcgopt_3gcg_20PartialDecomposition___generate_visualization __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_repr_png_", 0);

  /* "src/pygcgopt/decomposition.pxi":1396
 * 
 *     def _repr_png_(self):
 *         return self.__generate_visualization("png")             # <<<<<<<<<<<<<<
 * 
 *     cdef __generate_visualization(self, format="svg"):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.format = __pyx_mstate_global->__pyx_n_u_png;
  __pyx_t_1 = ((struct __pyx_vtabstruct_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self->__pyx_vtab)->_PartialDecomposition__generate_visualization(__pyx_v_self, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1395
 *         return self.__generate_visualization("svg")
 * 
 *     def _repr_png_(self):             # <<<<<<<<<<<<<<
 *         return self.__generate_visualization("png")
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition._repr_png_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1398
 *         return self.__generate_visualization("png")
 * 
 *     cdef __generate_visualization(self, format="svg"):             # <<<<<<<<<<<<<<
 *         format = format.lower()
 *         if format not in ["svg", "png"]:
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_20PartialDecomposition__PartialDecomposition__generate_visualization(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, struct __pyx_opt_args_8pygcgopt_3gcg_20PartialDecomposition___generate_visualization *__pyx_optional_args) {
  PyObject *__pyx_v_format = ((PyObject *)__pyx_mstate_global->__pyx_n_u_svg);
  PyObject *__pyx_v_td = NULL;
  PyObject *__pyx_v_temp_path = NULL;
  PyObject *__pyx_v_gp_filename = NULL;
  PyObject *__pyx_v_outfile = NULL;
  PyObject *__pyx_v_c_gp_filename = NULL;
  PyObject *__pyx_v_c_outfile = NULL;
  GP_OUTPUT_FORMAT __pyx_v_c_output_format;
  PyObject *__pyx_v_data = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7[3];
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  char *__pyx_t_14;
  char *__pyx_t_15;
  PyObject *__pyx_t_16 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_PartialDecomposition__generate_visualization", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_format = __pyx_optional_args->format;
    }
  }
  __Pyx_INCREF(__pyx_v_format);

  /* "src/pygcgopt/decomposition.pxi":1399
 * 
 *     cdef __generate_visualization(self, format="svg"):
 *         format = format.lower()             # <<<<<<<<<<<<<<
 *         if format not in ["svg", "png"]:
 *             raise ValueError(f"Format {format} is not supported. Only \"svg\" and \"png\" are supported.")
*/
  __pyx_t_2 = __pyx_v_format;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_lower, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1399, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/decomposition.pxi":1400
 *     cdef __generate_visualization(self, format="svg"):
 *         format = format.lower()
 *         if format not in ["svg", "png"]:             # <<<<<<<<<<<<<<
 *             raise ValueError(f"Format {format} is not supported. Only \"svg\" and \"png\" are supported.")
 * 
*/
  __Pyx_INCREF(__pyx_v_format);
  __pyx_t_1 = __pyx_v_format;
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_svg, Py_NE)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(8, 1400, __pyx_L1_error)
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_png, Py_NE)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(8, 1400, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __pyx_t_4;
  if (unlikely(__pyx_t_5)) {

    /* "src/pygcgopt/decomposition.pxi":1401
 *         format = format.lower()
 *         if format not in ["svg", "png"]:
 *             raise ValueError(f"Format {format} is not supported. Only \"svg\" and \"png\" are supported.")             # <<<<<<<<<<<<<<
 * 
 *         if format not in self._visualizations:
*/
    __pyx_t_2 = NULL;
    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_format, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 1401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Format;
    __pyx_t_7[1] = __pyx_t_6;
    __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_is_not_supported_Only_svg_and_p;
    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 54, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
    if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 1401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_3 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_8};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1401, __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(8, 1401, __pyx_L1_error)

    /* "src/pygcgopt/decomposition.pxi":1400
 *     cdef __generate_visualization(self, format="svg"):
 *         format = format.lower()
 *         if format not in ["svg", "png"]:             # <<<<<<<<<<<<<<
 *             raise ValueError(f"Format {format} is not supported. Only \"svg\" and \"png\" are supported.")
 * 
*/
  }

  /* "src/pygcgopt/decomposition.pxi":1403
 *             raise ValueError(f"Format {format} is not supported. Only \"svg\" and \"png\" are supported.")
 * 
 *         if format not in self._visualizations:             # <<<<<<<<<<<<<<
 *             with tempfile.TemporaryDirectory() as td:
 *                 temp_path = Path(td)
*/
  if (unlikely(__pyx_v_self->_visualizations == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(8, 1403, __pyx_L1_error)
  }
  __pyx_t_5 = (__Pyx_PyDict_ContainsTF(__pyx_v_format, __pyx_v_self->_visualizations, Py_NE)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(8, 1403, __pyx_L1_error)
  if (__pyx_t_5) {

    /* "src/pygcgopt/decomposition.pxi":1404
 * 
 *         if format not in self._visualizations:
 *             with tempfile.TemporaryDirectory() as td:             # <<<<<<<<<<<<<<
 *                 temp_path = Path(td)
 * 
*/
    /*with:*/ {
      __pyx_t_8 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tempfile); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_TemporaryDirectory); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 1404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_3 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_3 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __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(8, 1404, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 1404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = NULL;
      __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1404, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
        __pyx_t_3 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
        __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 1404, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_2 = __pyx_t_6;
      __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      /*try:*/ {
        {
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_12);
          /*try:*/ {
            __pyx_v_td = __pyx_t_2;
            __pyx_t_2 = 0;

            /* "src/pygcgopt/decomposition.pxi":1405
 *         if format not in self._visualizations:
 *             with tempfile.TemporaryDirectory() as td:
 *                 temp_path = Path(td)             # <<<<<<<<<<<<<<
 * 
 *                 gp_filename = temp_path.joinpath("vis.gp")
*/
            __pyx_t_1 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_Path); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 1405, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_3 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_6))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
              assert(__pyx_t_1);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
              __pyx_t_3 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_td};
              __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1405, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __pyx_v_temp_path = __pyx_t_2;
            __pyx_t_2 = 0;

            /* "src/pygcgopt/decomposition.pxi":1407
 *                 temp_path = Path(td)
 * 
 *                 gp_filename = temp_path.joinpath("vis.gp")             # <<<<<<<<<<<<<<
 *                 outfile = temp_path.joinpath("vis").with_suffix(f".{format}")
 * 
*/
            __pyx_t_6 = __pyx_v_temp_path;
            __Pyx_INCREF(__pyx_t_6);
            __pyx_t_3 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_vis_gp};
              __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_joinpath, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1407, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __pyx_v_gp_filename = __pyx_t_2;
            __pyx_t_2 = 0;

            /* "src/pygcgopt/decomposition.pxi":1408
 * 
 *                 gp_filename = temp_path.joinpath("vis.gp")
 *                 outfile = temp_path.joinpath("vis").with_suffix(f".{format}")             # <<<<<<<<<<<<<<
 * 
 *                 c_gp_filename = str_conversion(str(gp_filename))
*/
            __pyx_t_8 = __pyx_v_temp_path;
            __Pyx_INCREF(__pyx_t_8);
            __pyx_t_3 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_vis};
              __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_joinpath, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1408, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_1);
            }
            __pyx_t_6 = __pyx_t_1;
            __Pyx_INCREF(__pyx_t_6);
            __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_format, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 1408, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_13 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u__2, __pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(8, 1408, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_3 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_13};
              __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_suffix, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1408, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __pyx_v_outfile = __pyx_t_2;
            __pyx_t_2 = 0;

            /* "src/pygcgopt/decomposition.pxi":1410
 *                 outfile = temp_path.joinpath("vis").with_suffix(f".{format}")
 * 
 *                 c_gp_filename = str_conversion(str(gp_filename))             # <<<<<<<<<<<<<<
 *                 c_outfile = str_conversion(str(outfile))
 * 
*/
            __pyx_t_1 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_13)) __PYX_ERR(8, 1410, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_13);
            __pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_gp_filename); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 1410, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_3 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_13))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
              assert(__pyx_t_1);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_13, __pyx__function);
              __pyx_t_3 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_6};
              __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1410, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __pyx_v_c_gp_filename = __pyx_t_2;
            __pyx_t_2 = 0;

            /* "src/pygcgopt/decomposition.pxi":1411
 * 
 *                 c_gp_filename = str_conversion(str(gp_filename))
 *                 c_outfile = str_conversion(str(outfile))             # <<<<<<<<<<<<<<
 * 
 *                 if format == "svg":
*/
            __pyx_t_13 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 1411, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_outfile); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1411, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_3 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_6))) {
              __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_6);
              assert(__pyx_t_13);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_13);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
              __pyx_t_3 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_1};
              __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1411, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __pyx_v_c_outfile = __pyx_t_2;
            __pyx_t_2 = 0;

            /* "src/pygcgopt/decomposition.pxi":1413
 *                 c_outfile = str_conversion(str(outfile))
 * 
 *                 if format == "svg":             # <<<<<<<<<<<<<<
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG
 *                 elif format == "png":
*/
            __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_format, __pyx_mstate_global->__pyx_n_u_svg, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(8, 1413, __pyx_L11_error)
            if (__pyx_t_5) {

              /* "src/pygcgopt/decomposition.pxi":1414
 * 
 *                 if format == "svg":
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG             # <<<<<<<<<<<<<<
 *                 elif format == "png":
 *                     c_output_format = GP_OUTPUT_FORMAT_PNG
*/
              __pyx_v_c_output_format = GP_OUTPUT_FORMAT_SVG;

              /* "src/pygcgopt/decomposition.pxi":1413
 *                 c_outfile = str_conversion(str(outfile))
 * 
 *                 if format == "svg":             # <<<<<<<<<<<<<<
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG
 *                 elif format == "png":
*/
              goto __pyx_L17;
            }

            /* "src/pygcgopt/decomposition.pxi":1415
 *                 if format == "svg":
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG
 *                 elif format == "png":             # <<<<<<<<<<<<<<
 *                     c_output_format = GP_OUTPUT_FORMAT_PNG
 *                 else:
*/
            __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_format, __pyx_mstate_global->__pyx_n_u_png, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(8, 1415, __pyx_L11_error)
            if (__pyx_t_5) {

              /* "src/pygcgopt/decomposition.pxi":1416
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG
 *                 elif format == "png":
 *                     c_output_format = GP_OUTPUT_FORMAT_PNG             # <<<<<<<<<<<<<<
 *                 else:
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG #as default output format
*/
              __pyx_v_c_output_format = GP_OUTPUT_FORMAT_PNG;

              /* "src/pygcgopt/decomposition.pxi":1415
 *                 if format == "svg":
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG
 *                 elif format == "png":             # <<<<<<<<<<<<<<
 *                     c_output_format = GP_OUTPUT_FORMAT_PNG
 *                 else:
*/
              goto __pyx_L17;
            }

            /* "src/pygcgopt/decomposition.pxi":1418
 *                     c_output_format = GP_OUTPUT_FORMAT_PNG
 *                 else:
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG #as default output format             # <<<<<<<<<<<<<<
 * 
 *                 self.thisptr.generateVisualization(c_gp_filename, c_outfile, c_output_format)
*/
            /*else*/ {
              __pyx_v_c_output_format = GP_OUTPUT_FORMAT_SVG;
            }
            __pyx_L17:;

            /* "src/pygcgopt/decomposition.pxi":1420
 *                     c_output_format = GP_OUTPUT_FORMAT_SVG #as default output format
 * 
 *                 self.thisptr.generateVisualization(c_gp_filename, c_outfile, c_output_format)             # <<<<<<<<<<<<<<
 * 
 *                 if format == "svg":
*/
            __pyx_t_14 = __Pyx_PyObject_AsWritableString(__pyx_v_c_gp_filename); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) __PYX_ERR(8, 1420, __pyx_L11_error)
            __pyx_t_15 = __Pyx_PyObject_AsWritableString(__pyx_v_c_outfile); if (unlikely((!__pyx_t_15) && PyErr_Occurred())) __PYX_ERR(8, 1420, __pyx_L11_error)
            try {
              __pyx_v_self->thisptr->generateVisualization(__pyx_t_14, __pyx_t_15, __pyx_v_c_output_format);
            } catch(...) {
              __Pyx_CppExn2PyErr();
              __PYX_ERR(8, 1420, __pyx_L11_error)
            }

            /* "src/pygcgopt/decomposition.pxi":1422
 *                 self.thisptr.generateVisualization(c_gp_filename, c_outfile, c_output_format)
 * 
 *                 if format == "svg":             # <<<<<<<<<<<<<<
 *                     data = outfile.read_text()
 *                 elif format == "png":
*/
            __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_format, __pyx_mstate_global->__pyx_n_u_svg, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(8, 1422, __pyx_L11_error)
            if (__pyx_t_5) {

              /* "src/pygcgopt/decomposition.pxi":1423
 * 
 *                 if format == "svg":
 *                     data = outfile.read_text()             # <<<<<<<<<<<<<<
 *                 elif format == "png":
 *                     data = outfile.read_bytes()
*/
              __pyx_t_6 = __pyx_v_outfile;
              __Pyx_INCREF(__pyx_t_6);
              __pyx_t_3 = 0;
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
                __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_read_text, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1423, __pyx_L11_error)
                __Pyx_GOTREF(__pyx_t_2);
              }
              __pyx_v_data = __pyx_t_2;
              __pyx_t_2 = 0;

              /* "src/pygcgopt/decomposition.pxi":1422
 *                 self.thisptr.generateVisualization(c_gp_filename, c_outfile, c_output_format)
 * 
 *                 if format == "svg":             # <<<<<<<<<<<<<<
 *                     data = outfile.read_text()
 *                 elif format == "png":
*/
              goto __pyx_L18;
            }

            /* "src/pygcgopt/decomposition.pxi":1424
 *                 if format == "svg":
 *                     data = outfile.read_text()
 *                 elif format == "png":             # <<<<<<<<<<<<<<
 *                     data = outfile.read_bytes()
 *                 self._visualizations[format] = data
*/
            __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_format, __pyx_mstate_global->__pyx_n_u_png, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(8, 1424, __pyx_L11_error)
            if (__pyx_t_5) {

              /* "src/pygcgopt/decomposition.pxi":1425
 *                     data = outfile.read_text()
 *                 elif format == "png":
 *                     data = outfile.read_bytes()             # <<<<<<<<<<<<<<
 *                 self._visualizations[format] = data
 * 
*/
              __pyx_t_6 = __pyx_v_outfile;
              __Pyx_INCREF(__pyx_t_6);
              __pyx_t_3 = 0;
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
                __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_read_bytes, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1425, __pyx_L11_error)
                __Pyx_GOTREF(__pyx_t_2);
              }
              __pyx_v_data = __pyx_t_2;
              __pyx_t_2 = 0;

              /* "src/pygcgopt/decomposition.pxi":1424
 *                 if format == "svg":
 *                     data = outfile.read_text()
 *                 elif format == "png":             # <<<<<<<<<<<<<<
 *                     data = outfile.read_bytes()
 *                 self._visualizations[format] = data
*/
            }
            __pyx_L18:;

            /* "src/pygcgopt/decomposition.pxi":1426
 *                 elif format == "png":
 *                     data = outfile.read_bytes()
 *                 self._visualizations[format] = data             # <<<<<<<<<<<<<<
 * 
 *         return self._visualizations[format]
*/
            if (unlikely(!__pyx_v_data)) { __Pyx_RaiseUnboundLocalError("data"); __PYX_ERR(8, 1426, __pyx_L11_error) }
            if (unlikely(__pyx_v_self->_visualizations == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(8, 1426, __pyx_L11_error)
            }
            if (unlikely((PyDict_SetItem(__pyx_v_self->_visualizations, __pyx_v_format, __pyx_v_data) < 0))) __PYX_ERR(8, 1426, __pyx_L11_error)

            /* "src/pygcgopt/decomposition.pxi":1404
 * 
 *         if format not in self._visualizations:
 *             with tempfile.TemporaryDirectory() as td:             # <<<<<<<<<<<<<<
 *                 temp_path = Path(td)
 * 
*/
          }
          __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_L16_try_end;
          __pyx_L11_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition._PartialDecomposition__generate_visualization", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(8, 1404, __pyx_L13_except_error)
            __Pyx_XGOTREF(__pyx_t_2);
            __Pyx_XGOTREF(__pyx_t_6);
            __Pyx_XGOTREF(__pyx_t_1);
            __pyx_t_13 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(8, 1404, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_13);
            __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            if (unlikely(!__pyx_t_16)) __PYX_ERR(8, 1404, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (__pyx_t_5 < (0)) __PYX_ERR(8, 1404, __pyx_L13_except_error)
            __pyx_t_4 = (!__pyx_t_5);
            if (unlikely(__pyx_t_4)) {
              __Pyx_GIVEREF(__pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_6);
              __Pyx_XGIVEREF(__pyx_t_1);
              __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_6, __pyx_t_1);
              __pyx_t_2 = 0;  __pyx_t_6 = 0;  __pyx_t_1 = 0; 
              __PYX_ERR(8, 1404, __pyx_L13_except_error)
            }
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            goto __pyx_L12_exception_handled;
          }
          __pyx_L13_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_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_L16_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_9) {
            __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[4], NULL);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (unlikely(!__pyx_t_12)) __PYX_ERR(8, 1404, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          }
          goto __pyx_L10;
        }
        __pyx_L10:;
      }
      goto __pyx_L22;
      __pyx_L7_error:;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L1_error;
      __pyx_L22:;
    }

    /* "src/pygcgopt/decomposition.pxi":1403
 *             raise ValueError(f"Format {format} is not supported. Only \"svg\" and \"png\" are supported.")
 * 
 *         if format not in self._visualizations:             # <<<<<<<<<<<<<<
 *             with tempfile.TemporaryDirectory() as td:
 *                 temp_path = Path(td)
*/
  }

  /* "src/pygcgopt/decomposition.pxi":1428
 *                 self._visualizations[format] = data
 * 
 *         return self._visualizations[format]             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
*/
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(__pyx_v_self->_visualizations == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(8, 1428, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_self->_visualizations, __pyx_v_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1398
 *         return self.__generate_visualization("png")
 * 
 *     cdef __generate_visualization(self, format="svg"):             # <<<<<<<<<<<<<<
 *         format = format.lower()
 *         if format not in ["svg", "png"]:
*/

  /* 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_8);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition._PartialDecomposition__generate_visualization", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_td);
  __Pyx_XDECREF(__pyx_v_temp_path);
  __Pyx_XDECREF(__pyx_v_gp_filename);
  __Pyx_XDECREF(__pyx_v_outfile);
  __Pyx_XDECREF(__pyx_v_c_gp_filename);
  __Pyx_XDECREF(__pyx_v_c_outfile);
  __Pyx_XDECREF(__pyx_v_data);
  __Pyx_XDECREF(__pyx_v_format);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1430
 *         return self._visualizations[format]
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return f"<PartialDecomposition: nBlocks={self.getNBlocks()}, nMasterConss={self.getNMasterconss()}, nMasterVars={self.getNMastervars()}, nLinkingVars={self.getNLinkingvars()}, maxForWhiteScore={self.maxForWhiteScore}>"
 * 
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_288__repr__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7[11];
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "src/pygcgopt/decomposition.pxi":1431
 * 
 *     def __repr__(self):
 *         return f"<PartialDecomposition: nBlocks={self.getNBlocks()}, nMasterConss={self.getNMasterconss()}, nMasterVars={self.getNMastervars()}, nLinkingVars={self.getNLinkingvars()}, maxForWhiteScore={self.maxForWhiteScore}>"             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_getNBlocks); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_getNMasterconss); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_getNMastervars); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_getNLinkingvars); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_maxForWhiteScore_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_PartialDecomposition_nBlocks;
  __pyx_t_7[1] = __pyx_t_1;
  __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_nMasterConss;
  __pyx_t_7[3] = __pyx_t_2;
  __pyx_t_7[4] = __pyx_mstate_global->__pyx_kp_u_nMasterVars;
  __pyx_t_7[5] = __pyx_t_3;
  __pyx_t_7[6] = __pyx_mstate_global->__pyx_kp_u_nLinkingVars;
  __pyx_t_7[7] = __pyx_t_4;
  __pyx_t_7[8] = __pyx_mstate_global->__pyx_kp_u_maxForWhiteScore;
  __pyx_t_7[9] = __pyx_t_6;
  __pyx_t_7[10] = __pyx_mstate_global->__pyx_kp_u__3;
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_7, 11, 31 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 15 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 14 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 19 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
  if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __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_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1430
 *         return self._visualizations[format]
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return f"<PartialDecomposition: nBlocks={self.getNBlocks()}, nMasterConss={self.getNMasterconss()}, nMasterVars={self.getNMastervars()}, nLinkingVars={self.getNLinkingvars()}, maxForWhiteScore={self.maxForWhiteScore}>"
 * 
*/

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

/* "src/pygcgopt/decomposition.pxi":1448
 * 
 *     # BEGIN AUTOGENERATED BLOCK
 *     def setAncestorList(PartialDecomposition self, object newlist):             # <<<<<<<<<<<<<<
 *         """set ancestor list directly
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_291setAncestorList(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_290setAncestorList, "PartialDecomposition.setAncestorList(self, newlist)\n\nset ancestor list directly\n\n:param newlist: new list of ancestor ids.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_291setAncestorList = {"setAncestorList", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_291setAncestorList, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_290setAncestorList};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_291setAncestorList(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_newlist = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setAncestorList (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_newlist,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1448, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1448, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setAncestorList", 0) < (0)) __PYX_ERR(8, 1448, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setAncestorList", 1, 1, 1, i); __PYX_ERR(8, 1448, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1448, __pyx_L3_error)
    }
    __pyx_v_newlist = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setAncestorList", 1, 1, 1, __pyx_nargs); __PYX_ERR(8, 1448, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setAncestorList", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_290setAncestorList(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_newlist);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_290setAncestorList(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, PyObject *__pyx_v_newlist) {
  std::vector<int>  __pyx_v_cpp_newlist;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setAncestorList", 0);

  /* "src/pygcgopt/decomposition.pxi":1453
 *         :param newlist: new list of ancestor ids.
 *         """
 *         cdef vector[int] cpp_newlist = newlist             # <<<<<<<<<<<<<<
 *         self.thisptr.setAncestorList(cpp_newlist)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_int(__pyx_v_newlist); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1453, __pyx_L1_error)
  __pyx_v_cpp_newlist = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1454
 *         """
 *         cdef vector[int] cpp_newlist = newlist
 *         self.thisptr.setAncestorList(cpp_newlist)             # <<<<<<<<<<<<<<
 * 
 *     def getDetectorClockTimes(PartialDecomposition self):
*/
  try {
    __pyx_v_self->thisptr->setAncestorList(__pyx_v_cpp_newlist);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1454, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1448
 * 
 *     # BEGIN AUTOGENERATED BLOCK
 *     def setAncestorList(PartialDecomposition self, object newlist):             # <<<<<<<<<<<<<<
 *         """set ancestor list directly
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setAncestorList", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1456
 *         self.thisptr.setAncestorList(cpp_newlist)
 * 
 *     def getDetectorClockTimes(PartialDecomposition self):             # <<<<<<<<<<<<<<
 *         """returns a vector of the clock times that each detector needed that was involved in this partialdec
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_293getDetectorClockTimes(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_292getDetectorClockTimes, "PartialDecomposition.getDetectorClockTimes(self)\n\nreturns a vector of the clock times that each detector needed that was involved in this partialdec\n\n:return: vector of the clock times.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_293getDetectorClockTimes = {"getDetectorClockTimes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_293getDetectorClockTimes, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_292getDetectorClockTimes};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_293getDetectorClockTimes(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getDetectorClockTimes (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getDetectorClockTimes", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getDetectorClockTimes", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_292getDetectorClockTimes(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_292getDetectorClockTimes(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self) {
  std::vector<double>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<double>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getDetectorClockTimes", 0);

  /* "src/pygcgopt/decomposition.pxi":1461
 *         :return: vector of the clock times.
 *         """
 *         cdef vector[double] result = self.thisptr.getDetectorClockTimes()             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getDetectorClockTimes();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1461, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1462
 *         """
 *         cdef vector[double] result = self.thisptr.getDetectorClockTimes()
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     # def getDetectorchain(PartialDecomposition self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_double(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1462, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1456
 *         self.thisptr.setAncestorList(cpp_newlist)
 * 
 *     def getDetectorClockTimes(PartialDecomposition self):             # <<<<<<<<<<<<<<
 *         """returns a vector of the clock times that each detector needed that was involved in this partialdec
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getDetectorClockTimes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1472
 *     #     return result
 * 
 *     def getRepVarmap(PartialDecomposition self, int repid, int blockrepid):             # <<<<<<<<<<<<<<
 *         """Gets the represenation varmap
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_295getRepVarmap(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_294getRepVarmap, "PartialDecomposition.getRepVarmap(self, int repid, int blockrepid)\n\nGets the represenation varmap\n\nVar map is vector for represenative repid and the blockrepid-th block that is represented by repid\n\n:param repid: id of representative\n:param blockrepid: id of block\n:return: the represenation varmap as vector for represenative repid and the blockrepid-th block that is represented by repid.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_295getRepVarmap = {"getRepVarmap", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_295getRepVarmap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_294getRepVarmap};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_295getRepVarmap(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_repid;
  int __pyx_v_blockrepid;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getRepVarmap (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_repid,&__pyx_mstate_global->__pyx_n_u_blockrepid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1472, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 1472, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1472, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getRepVarmap", 0) < (0)) __PYX_ERR(8, 1472, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getRepVarmap", 1, 2, 2, i); __PYX_ERR(8, 1472, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1472, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 1472, __pyx_L3_error)
    }
    __pyx_v_repid = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_repid == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1472, __pyx_L3_error)
    __pyx_v_blockrepid = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_blockrepid == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1472, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getRepVarmap", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 1472, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getRepVarmap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_294getRepVarmap(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_repid, __pyx_v_blockrepid);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_294getRepVarmap(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_repid, int __pyx_v_blockrepid) {
  int __pyx_v_cpp_repid;
  int __pyx_v_cpp_blockrepid;
  std::vector<int>  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getRepVarmap", 0);

  /* "src/pygcgopt/decomposition.pxi":1481
 *         :return: the represenation varmap as vector for represenative repid and the blockrepid-th block that is represented by repid.
 *         """
 *         cdef int cpp_repid = repid             # <<<<<<<<<<<<<<
 *         cdef int cpp_blockrepid = blockrepid
 *         cdef vector[int] result = self.thisptr.getRepVarmap(cpp_repid, cpp_blockrepid)
*/
  __pyx_v_cpp_repid = __pyx_v_repid;

  /* "src/pygcgopt/decomposition.pxi":1482
 *         """
 *         cdef int cpp_repid = repid
 *         cdef int cpp_blockrepid = blockrepid             # <<<<<<<<<<<<<<
 *         cdef vector[int] result = self.thisptr.getRepVarmap(cpp_repid, cpp_blockrepid)
 *         return result
*/
  __pyx_v_cpp_blockrepid = __pyx_v_blockrepid;

  /* "src/pygcgopt/decomposition.pxi":1483
 *         cdef int cpp_repid = repid
 *         cdef int cpp_blockrepid = blockrepid
 *         cdef vector[int] result = self.thisptr.getRepVarmap(cpp_repid, cpp_blockrepid)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getRepVarmap(__pyx_v_cpp_repid, __pyx_v_cpp_blockrepid);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1483, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/decomposition.pxi":1484
 *         cdef int cpp_blockrepid = blockrepid
 *         cdef vector[int] result = self.thisptr.getRepVarmap(cpp_repid, cpp_blockrepid)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def getVarProbindexForBlock(PartialDecomposition self, int varid, int block):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1472
 *     #     return result
 * 
 *     def getRepVarmap(PartialDecomposition self, int repid, int blockrepid):             # <<<<<<<<<<<<<<
 *         """Gets the represenation varmap
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getRepVarmap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1486
 *         return result
 * 
 *     def getVarProbindexForBlock(PartialDecomposition self, int varid, int block):             # <<<<<<<<<<<<<<
 *         """Gets index in variables array of a block for a variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_297getVarProbindexForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_296getVarProbindexForBlock, "PartialDecomposition.getVarProbindexForBlock(self, int varid, int block)\n\nGets index in variables array of a block for a variable\n\n:param varid: the id of the variable the index\n:param block: the corresponding block id\n:return:  returns index in variables array of a block for a variable.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_297getVarProbindexForBlock = {"getVarProbindexForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_297getVarProbindexForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_296getVarProbindexForBlock};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_297getVarProbindexForBlock(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_varid;
  int __pyx_v_block;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getVarProbindexForBlock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_varid,&__pyx_mstate_global->__pyx_n_u_block,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1486, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 1486, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1486, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getVarProbindexForBlock", 0) < (0)) __PYX_ERR(8, 1486, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getVarProbindexForBlock", 1, 2, 2, i); __PYX_ERR(8, 1486, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1486, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 1486, __pyx_L3_error)
    }
    __pyx_v_varid = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_varid == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1486, __pyx_L3_error)
    __pyx_v_block = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_block == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1486, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getVarProbindexForBlock", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 1486, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getVarProbindexForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_296getVarProbindexForBlock(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_varid, __pyx_v_block);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_296getVarProbindexForBlock(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_varid, int __pyx_v_block) {
  int __pyx_v_cpp_varid;
  int __pyx_v_cpp_block;
  int __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getVarProbindexForBlock", 0);

  /* "src/pygcgopt/decomposition.pxi":1493
 *         :return:  returns index in variables array of a block for a variable.
 *         """
 *         cdef int cpp_varid = varid             # <<<<<<<<<<<<<<
 *         cdef int cpp_block = block
 *         cdef int result = self.thisptr.getVarProbindexForBlock(cpp_varid, cpp_block)
*/
  __pyx_v_cpp_varid = __pyx_v_varid;

  /* "src/pygcgopt/decomposition.pxi":1494
 *         """
 *         cdef int cpp_varid = varid
 *         cdef int cpp_block = block             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getVarProbindexForBlock(cpp_varid, cpp_block)
 *         return result
*/
  __pyx_v_cpp_block = __pyx_v_block;

  /* "src/pygcgopt/decomposition.pxi":1495
 *         cdef int cpp_varid = varid
 *         cdef int cpp_block = block
 *         cdef int result = self.thisptr.getVarProbindexForBlock(cpp_varid, cpp_block)             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getVarProbindexForBlock(__pyx_v_cpp_varid, __pyx_v_cpp_block);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1495, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1496
 *         cdef int cpp_block = block
 *         cdef int result = self.thisptr.getVarProbindexForBlock(cpp_varid, cpp_block)
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     # def isEqual(PartialDecomposition self, PartialDecomposition otherpartialdec, unsigned int * isequal, bool sortpartialdecs):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/decomposition.pxi":1486
 *         return result
 * 
 *     def getVarProbindexForBlock(PartialDecomposition self, int varid, int block):             # <<<<<<<<<<<<<<
 *         """Gets index in variables array of a block for a variable
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.getVarProbindexForBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1515
 *     #     raise NotImplementedError()
 * 
 *     def setConsPartitionStatistics(PartialDecomposition self, int detectorchainindex, ConsPart partition, object consclassesmaster):             # <<<<<<<<<<<<<<
 *         """registers statistics for a used conspartition.
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_299setConsPartitionStatistics(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_298setConsPartitionStatistics, "PartialDecomposition.setConsPartitionStatistics(self, int detectorchainindex, ConsPart partition, consclassesmaster)\n\nregisters statistics for a used conspartition.\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_299setConsPartitionStatistics = {"setConsPartitionStatistics", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_299setConsPartitionStatistics, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_298setConsPartitionStatistics};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_299setConsPartitionStatistics(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchainindex;
  struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_partition = 0;
  PyObject *__pyx_v_consclassesmaster = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setConsPartitionStatistics (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchainindex,&__pyx_mstate_global->__pyx_n_u_partition,&__pyx_mstate_global->__pyx_n_u_consclassesmaster,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1515, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(8, 1515, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 1515, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1515, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setConsPartitionStatistics", 0) < (0)) __PYX_ERR(8, 1515, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setConsPartitionStatistics", 1, 3, 3, i); __PYX_ERR(8, 1515, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1515, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 1515, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(8, 1515, __pyx_L3_error)
    }
    __pyx_v_detectorchainindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchainindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1515, __pyx_L3_error)
    __pyx_v_partition = ((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)values[1]);
    __pyx_v_consclassesmaster = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setConsPartitionStatistics", 1, 3, 3, __pyx_nargs); __PYX_ERR(8, 1515, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setConsPartitionStatistics", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partition), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, 1, "partition", 0))) __PYX_ERR(8, 1515, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_298setConsPartitionStatistics(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchainindex, __pyx_v_partition, __pyx_v_consclassesmaster);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_298setConsPartitionStatistics(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex, struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_partition, PyObject *__pyx_v_consclassesmaster) {
  int __pyx_v_cpp_detectorchainindex;
  gcg::ConsPartition *__pyx_v_cpp_partition;
  std::vector<int>  __pyx_v_cpp_consclassesmaster;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::ConsPartition *__pyx_t_1;
  std::vector<int>  __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setConsPartitionStatistics", 0);

  /* "src/pygcgopt/decomposition.pxi":1518
 *         """registers statistics for a used conspartition.
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex             # <<<<<<<<<<<<<<
 *         cdef ConsPartition* cpp_partition = partition.consPartition
 *         cdef vector[int] cpp_consclassesmaster = consclassesmaster
*/
  __pyx_v_cpp_detectorchainindex = __pyx_v_detectorchainindex;

  /* "src/pygcgopt/decomposition.pxi":1519
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef ConsPartition* cpp_partition = partition.consPartition             # <<<<<<<<<<<<<<
 *         cdef vector[int] cpp_consclassesmaster = consclassesmaster
 *         self.thisptr.setConsPartitionStatistics(cpp_detectorchainindex, cpp_partition, cpp_consclassesmaster)
*/
  __pyx_t_1 = __pyx_v_partition->consPartition;
  __pyx_v_cpp_partition = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1520
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef ConsPartition* cpp_partition = partition.consPartition
 *         cdef vector[int] cpp_consclassesmaster = consclassesmaster             # <<<<<<<<<<<<<<
 *         self.thisptr.setConsPartitionStatistics(cpp_detectorchainindex, cpp_partition, cpp_consclassesmaster)
 * 
*/
  __pyx_t_2 = __pyx_convert_vector_from_py_int(__pyx_v_consclassesmaster); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1520, __pyx_L1_error)
  __pyx_v_cpp_consclassesmaster = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_2);

  /* "src/pygcgopt/decomposition.pxi":1521
 *         cdef ConsPartition* cpp_partition = partition.consPartition
 *         cdef vector[int] cpp_consclassesmaster = consclassesmaster
 *         self.thisptr.setConsPartitionStatistics(cpp_detectorchainindex, cpp_partition, cpp_consclassesmaster)             # <<<<<<<<<<<<<<
 * 
 *     #def setDetectorchain(PartialDecomposition self, object givenDetectorChain):
*/
  try {
    __pyx_v_self->thisptr->setConsPartitionStatistics(__pyx_v_cpp_detectorchainindex, __pyx_v_cpp_partition, __pyx_v_cpp_consclassesmaster);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1521, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1515
 *     #     raise NotImplementedError()
 * 
 *     def setConsPartitionStatistics(PartialDecomposition self, int detectorchainindex, ConsPart partition, object consclassesmaster):             # <<<<<<<<<<<<<<
 *         """registers statistics for a used conspartition.
 *         """
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setConsPartitionStatistics", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":1531
 *     #     self.thisptr.setDetectorchain(cpp_givenDetectorChain)
 * 
 *     def setVarPartitionStatistics(PartialDecomposition self, int detectorchainindex, VarPart partition, object varclasseslinking, object varclassesmaster):             # <<<<<<<<<<<<<<
 *         """registers statistics for a used varpartition.
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_301setVarPartitionStatistics(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_300setVarPartitionStatistics, "PartialDecomposition.setVarPartitionStatistics(self, int detectorchainindex, VarPart partition, varclasseslinking, varclassesmaster)\n\nregisters statistics for a used varpartition.\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_301setVarPartitionStatistics = {"setVarPartitionStatistics", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_301setVarPartitionStatistics, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_300setVarPartitionStatistics};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_301setVarPartitionStatistics(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_detectorchainindex;
  struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_partition = 0;
  PyObject *__pyx_v_varclasseslinking = 0;
  PyObject *__pyx_v_varclassesmaster = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setVarPartitionStatistics (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detectorchainindex,&__pyx_mstate_global->__pyx_n_u_partition,&__pyx_mstate_global->__pyx_n_u_varclasseslinking,&__pyx_mstate_global->__pyx_n_u_varclassesmaster,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 1531, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(8, 1531, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(8, 1531, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 1531, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1531, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setVarPartitionStatistics", 0) < (0)) __PYX_ERR(8, 1531, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setVarPartitionStatistics", 1, 4, 4, i); __PYX_ERR(8, 1531, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 1531, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 1531, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(8, 1531, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(8, 1531, __pyx_L3_error)
    }
    __pyx_v_detectorchainindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_detectorchainindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 1531, __pyx_L3_error)
    __pyx_v_partition = ((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)values[1]);
    __pyx_v_varclasseslinking = values[2];
    __pyx_v_varclassesmaster = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setVarPartitionStatistics", 1, 4, 4, __pyx_nargs); __PYX_ERR(8, 1531, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarPartitionStatistics", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partition), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, 1, "partition", 0))) __PYX_ERR(8, 1531, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_300setVarPartitionStatistics(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v_detectorchainindex, __pyx_v_partition, __pyx_v_varclasseslinking, __pyx_v_varclassesmaster);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_300setVarPartitionStatistics(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_self, int __pyx_v_detectorchainindex, struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_partition, PyObject *__pyx_v_varclasseslinking, PyObject *__pyx_v_varclassesmaster) {
  int __pyx_v_cpp_detectorchainindex;
  gcg::VarPartition *__pyx_v_cpp_partition;
  std::vector<int>  __pyx_v_cpp_varclasseslinking;
  std::vector<int>  __pyx_v_cpp_varclassesmaster;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::VarPartition *__pyx_t_1;
  std::vector<int>  __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setVarPartitionStatistics", 0);

  /* "src/pygcgopt/decomposition.pxi":1534
 *         """registers statistics for a used varpartition.
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex             # <<<<<<<<<<<<<<
 *         cdef VarPartition * cpp_partition = partition.varPartition
 *         cdef vector[int] cpp_varclasseslinking = varclasseslinking
*/
  __pyx_v_cpp_detectorchainindex = __pyx_v_detectorchainindex;

  /* "src/pygcgopt/decomposition.pxi":1535
 *         """
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef VarPartition * cpp_partition = partition.varPartition             # <<<<<<<<<<<<<<
 *         cdef vector[int] cpp_varclasseslinking = varclasseslinking
 *         cdef vector[int] cpp_varclassesmaster = varclassesmaster
*/
  __pyx_t_1 = __pyx_v_partition->varPartition;
  __pyx_v_cpp_partition = __pyx_t_1;

  /* "src/pygcgopt/decomposition.pxi":1536
 *         cdef int cpp_detectorchainindex = detectorchainindex
 *         cdef VarPartition * cpp_partition = partition.varPartition
 *         cdef vector[int] cpp_varclasseslinking = varclasseslinking             # <<<<<<<<<<<<<<
 *         cdef vector[int] cpp_varclassesmaster = varclassesmaster
 *         self.thisptr.setVarPartitionStatistics(cpp_detectorchainindex, cpp_partition, cpp_varclasseslinking, cpp_varclassesmaster)
*/
  __pyx_t_2 = __pyx_convert_vector_from_py_int(__pyx_v_varclasseslinking); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1536, __pyx_L1_error)
  __pyx_v_cpp_varclasseslinking = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_2);

  /* "src/pygcgopt/decomposition.pxi":1537
 *         cdef VarPartition * cpp_partition = partition.varPartition
 *         cdef vector[int] cpp_varclasseslinking = varclasseslinking
 *         cdef vector[int] cpp_varclassesmaster = varclassesmaster             # <<<<<<<<<<<<<<
 *         self.thisptr.setVarPartitionStatistics(cpp_detectorchainindex, cpp_partition, cpp_varclasseslinking, cpp_varclassesmaster)
*/
  __pyx_t_2 = __pyx_convert_vector_from_py_int(__pyx_v_varclassesmaster); if (unlikely(PyErr_Occurred())) __PYX_ERR(8, 1537, __pyx_L1_error)
  __pyx_v_cpp_varclassesmaster = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_2);

  /* "src/pygcgopt/decomposition.pxi":1538
 *         cdef vector[int] cpp_varclasseslinking = varclasseslinking
 *         cdef vector[int] cpp_varclassesmaster = varclassesmaster
 *         self.thisptr.setVarPartitionStatistics(cpp_detectorchainindex, cpp_partition, cpp_varclasseslinking, cpp_varclassesmaster)             # <<<<<<<<<<<<<<
*/
  try {
    __pyx_v_self->thisptr->setVarPartitionStatistics(__pyx_v_cpp_detectorchainindex, __pyx_v_cpp_partition, __pyx_v_cpp_varclasseslinking, __pyx_v_cpp_varclassesmaster);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(8, 1538, __pyx_L1_error)
  }

  /* "src/pygcgopt/decomposition.pxi":1531
 *     #     self.thisptr.setDetectorchain(cpp_givenDetectorChain)
 * 
 *     def setVarPartitionStatistics(PartialDecomposition self, int detectorchainindex, VarPart partition, object varclasseslinking, object varclassesmaster):             # <<<<<<<<<<<<<<
 *         """registers statistics for a used varpartition.
 *         """
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.setVarPartitionStatistics", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/decomposition.pxi":10
 *     cdef bool delete_thisptr
 * 
 *     cdef public dict _visualizations             # <<<<<<<<<<<<<<
 * 
 *     # Stores the objects used by the user for referencing the decomposition blocks.
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_2__set__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(8, 10, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_visualizations);
  __Pyx_DECREF(__pyx_v_self->_visualizations);
  __pyx_v_self->_visualizations = ((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("pygcgopt.gcg.PartialDecomposition._visualizations.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_4__del__(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__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->_visualizations);
  __Pyx_DECREF(__pyx_v_self->_visualizations);
  __pyx_v_self->_visualizations = ((PyObject*)Py_None);

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_303__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_302__reduce_cython__, "PartialDecomposition.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_303__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_303__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_302__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_303__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_302__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self));

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

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

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(2, 2, __pyx_L1_error)

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

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_305__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_304__setstate_cython__, "PartialDecomposition.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_305__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_305__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_304__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_305__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PartialDecomposition.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PartialDecomposition_304__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(2, 4, __pyx_L1_error)

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

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

/* "src/pygcgopt/detprobdata.pxi":4
 *     """Base class holding a pointer to corresponding DETPROBDATA"""
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(DETPROBDATA* thisptr):
 *         if thisptr == NULL:
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_11DetProbData_create(gcg::DETPROBDATA *__pyx_v_thisptr) {
  struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_new_DetProbData = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "src/pygcgopt/detprobdata.pxi":6
 *     @staticmethod
 *     cdef create(DETPROBDATA* thisptr):
 *         if thisptr == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create DetProbData with DETPROBDATA* == NULL")
 *         new_DetProbData = DetProbData()
*/
  __pyx_t_1 = (__pyx_v_thisptr == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/pygcgopt/detprobdata.pxi":7
 *     cdef create(DETPROBDATA* thisptr):
 *         if thisptr == NULL:
 *             raise Warning("cannot create DetProbData with DETPROBDATA* == NULL")             # <<<<<<<<<<<<<<
 *         new_DetProbData = DetProbData()
 *         new_DetProbData.thisptr = thisptr
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_cannot_create_DetProbData_with_D};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_Warning)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 7, __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(9, 7, __pyx_L1_error)

    /* "src/pygcgopt/detprobdata.pxi":6
 *     @staticmethod
 *     cdef create(DETPROBDATA* thisptr):
 *         if thisptr == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create DetProbData with DETPROBDATA* == NULL")
 *         new_DetProbData = DetProbData()
*/
  }

  /* "src/pygcgopt/detprobdata.pxi":8
 *         if thisptr == NULL:
 *             raise Warning("cannot create DetProbData with DETPROBDATA* == NULL")
 *         new_DetProbData = DetProbData()             # <<<<<<<<<<<<<<
 *         new_DetProbData.thisptr = thisptr
 *         return new_DetProbData
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 8, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __pyx_v_new_DetProbData = ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":9
 *             raise Warning("cannot create DetProbData with DETPROBDATA* == NULL")
 *         new_DetProbData = DetProbData()
 *         new_DetProbData.thisptr = thisptr             # <<<<<<<<<<<<<<
 *         return new_DetProbData
 * 
*/
  __pyx_v_new_DetProbData->thisptr = __pyx_v_thisptr;

  /* "src/pygcgopt/detprobdata.pxi":10
 *         new_DetProbData = DetProbData()
 *         new_DetProbData.thisptr = thisptr
 *         return new_DetProbData             # <<<<<<<<<<<<<<
 * 
 *     def createConsPart(self, name, nclasses, ncons):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_new_DetProbData);
  __pyx_r = ((PyObject *)__pyx_v_new_DetProbData);
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":4
 *     """Base class holding a pointer to corresponding DETPROBDATA"""
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(DETPROBDATA* thisptr):
 *         if thisptr == NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_new_DetProbData);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":12
 *         return new_DetProbData
 * 
 *     def createConsPart(self, name, nclasses, ncons):             # <<<<<<<<<<<<<<
 *         """returns a ConsPart object
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_1createConsPart(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_createConsPart, "DetProbData.createConsPart(self, name, nclasses, ncons)\n\nreturns a ConsPart object\n\n:param name: name of the constraint partition\n:type name: str\n:param nclasses: number of classes\n:type nclasses: int\n:param ncons: number of constraints\n:type ncons: int\n:return: constraint partition object\n:rtype: :class:`ConsPart`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_1createConsPart = {"createConsPart", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_1createConsPart, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_createConsPart};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_1createConsPart(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_nclasses = 0;
  PyObject *__pyx_v_ncons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("createConsPart (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_name,&__pyx_mstate_global->__pyx_n_u_nclasses,&__pyx_mstate_global->__pyx_n_u_ncons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 12, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(9, 12, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 12, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 12, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "createConsPart", 0) < (0)) __PYX_ERR(9, 12, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("createConsPart", 1, 3, 3, i); __PYX_ERR(9, 12, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 12, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 12, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(9, 12, __pyx_L3_error)
    }
    __pyx_v_name = values[0];
    __pyx_v_nclasses = values[1];
    __pyx_v_ncons = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("createConsPart", 1, 3, 3, __pyx_nargs); __PYX_ERR(9, 12, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.createConsPart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_createConsPart(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_name, __pyx_v_nclasses, __pyx_v_ncons);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_createConsPart(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_nclasses, PyObject *__pyx_v_ncons) {
  GCG *__pyx_v_gcg;
  PyObject *__pyx_v_c_name = NULL;
  gcg::ConsPartition *__pyx_v_conspatitionptr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char const *__pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  gcg::ConsPartition *__pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("createConsPart", 0);

  /* "src/pygcgopt/detprobdata.pxi":24
 *         :rtype: :class:`ConsPart`
 *         """
 *         cdef GCG* gcg = self.thisptr.getGcg()             # <<<<<<<<<<<<<<
 *         c_name = str_conversion(name)
 *         cdef ConsPartition* conspatitionptr = new ConsPartition(gcg, c_name, nclasses, ncons)
*/
  __pyx_v_gcg = __pyx_v_self->thisptr->getGcg();

  /* "src/pygcgopt/detprobdata.pxi":25
 *         """
 *         cdef GCG* gcg = self.thisptr.getGcg()
 *         c_name = str_conversion(name)             # <<<<<<<<<<<<<<
 *         cdef ConsPartition* conspatitionptr = new ConsPartition(gcg, c_name, nclasses, ncons)
 *         return ConsPart.create(conspatitionptr, self)
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_name};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_name = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detprobdata.pxi":26
 *         cdef GCG* gcg = self.thisptr.getGcg()
 *         c_name = str_conversion(name)
 *         cdef ConsPartition* conspatitionptr = new ConsPartition(gcg, c_name, nclasses, ncons)             # <<<<<<<<<<<<<<
 *         return ConsPart.create(conspatitionptr, self)
 * 
*/
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_c_name); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(9, 26, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_nclasses); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 26, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_As_int(__pyx_v_ncons); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 26, __pyx_L1_error)
  try {
    __pyx_t_8 = new gcg::ConsPartition(__pyx_v_gcg, __pyx_t_5, __pyx_t_6, __pyx_t_7);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 26, __pyx_L1_error)
  }
  __pyx_v_conspatitionptr = __pyx_t_8;

  /* "src/pygcgopt/detprobdata.pxi":27
 *         c_name = str_conversion(name)
 *         cdef ConsPartition* conspatitionptr = new ConsPartition(gcg, c_name, nclasses, ncons)
 *         return ConsPart.create(conspatitionptr, self)             # <<<<<<<<<<<<<<
 * 
 *     def createVarPart(self, name, nclasses, nvars):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_8ConsPart_create(__pyx_v_conspatitionptr, __pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":12
 *         return new_DetProbData
 * 
 *     def createConsPart(self, name, nclasses, ncons):             # <<<<<<<<<<<<<<
 *         """returns a ConsPart object
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.createConsPart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":29
 *         return ConsPart.create(conspatitionptr, self)
 * 
 *     def createVarPart(self, name, nclasses, nvars):             # <<<<<<<<<<<<<<
 *         """returns a VarPart object
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_3createVarPart(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_2createVarPart, "DetProbData.createVarPart(self, name, nclasses, nvars)\n\nreturns a VarPart object\n\n:param name: name of the variable partition\n:type name: str\n:param nclasses: number of classes\n:type nclasses: int\n:param nvars: number of variables\n:type nvars: int\n:return: variable partition object\n:rtype: :class:`VarPart`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_3createVarPart = {"createVarPart", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_3createVarPart, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_2createVarPart};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_3createVarPart(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_nclasses = 0;
  PyObject *__pyx_v_nvars = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("createVarPart (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_name,&__pyx_mstate_global->__pyx_n_u_nclasses,&__pyx_mstate_global->__pyx_n_u_nvars,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 29, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(9, 29, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 29, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 29, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "createVarPart", 0) < (0)) __PYX_ERR(9, 29, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("createVarPart", 1, 3, 3, i); __PYX_ERR(9, 29, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 29, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 29, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(9, 29, __pyx_L3_error)
    }
    __pyx_v_name = values[0];
    __pyx_v_nclasses = values[1];
    __pyx_v_nvars = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("createVarPart", 1, 3, 3, __pyx_nargs); __PYX_ERR(9, 29, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.createVarPart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_2createVarPart(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_name, __pyx_v_nclasses, __pyx_v_nvars);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_2createVarPart(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_nclasses, PyObject *__pyx_v_nvars) {
  GCG *__pyx_v_gcg;
  PyObject *__pyx_v_c_name = NULL;
  gcg::VarPartition *__pyx_v_varpatitionptr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char const *__pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  gcg::VarPartition *__pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("createVarPart", 0);

  /* "src/pygcgopt/detprobdata.pxi":41
 *         :rtype: :class:`VarPart`
 *         """
 *         cdef GCG* gcg = self.thisptr.getGcg()             # <<<<<<<<<<<<<<
 *         c_name = str_conversion(name)
 *         cdef VarPartition* varpatitionptr = new VarPartition(gcg, c_name, nclasses, nvars)
*/
  __pyx_v_gcg = __pyx_v_self->thisptr->getGcg();

  /* "src/pygcgopt/detprobdata.pxi":42
 *         """
 *         cdef GCG* gcg = self.thisptr.getGcg()
 *         c_name = str_conversion(name)             # <<<<<<<<<<<<<<
 *         cdef VarPartition* varpatitionptr = new VarPartition(gcg, c_name, nclasses, nvars)
 *         return VarPart.create(varpatitionptr, self)
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_name};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 42, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_name = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/detprobdata.pxi":43
 *         cdef GCG* gcg = self.thisptr.getGcg()
 *         c_name = str_conversion(name)
 *         cdef VarPartition* varpatitionptr = new VarPartition(gcg, c_name, nclasses, nvars)             # <<<<<<<<<<<<<<
 *         return VarPart.create(varpatitionptr, self)
 * 
*/
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_c_name); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(9, 43, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_nclasses); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 43, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_As_int(__pyx_v_nvars); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 43, __pyx_L1_error)
  try {
    __pyx_t_8 = new gcg::VarPartition(__pyx_v_gcg, __pyx_t_5, __pyx_t_6, __pyx_t_7);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 43, __pyx_L1_error)
  }
  __pyx_v_varpatitionptr = __pyx_t_8;

  /* "src/pygcgopt/detprobdata.pxi":44
 *         c_name = str_conversion(name)
 *         cdef VarPartition* varpatitionptr = new VarPartition(gcg, c_name, nclasses, nvars)
 *         return VarPart.create(varpatitionptr, self)             # <<<<<<<<<<<<<<
 * 
 *     def candidatesNBlocks(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_7VarPart_create(__pyx_v_varpatitionptr, __pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":29
 *         return ConsPart.create(conspatitionptr, self)
 * 
 *     def createVarPart(self, name, nclasses, nvars):             # <<<<<<<<<<<<<<
 *         """returns a VarPart object
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.createVarPart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":46
 *         return VarPart.create(varpatitionptr, self)
 * 
 *     def candidatesNBlocks(self):             # <<<<<<<<<<<<<<
 *         """candidate for the number of blocks, second int indicates how often a candidate was added
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_5candidatesNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_4candidatesNBlocks, "DetProbData.candidatesNBlocks(self)\n\ncandidate for the number of blocks, second int indicates how often a candidate was added\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_5candidatesNBlocks = {"candidatesNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_5candidatesNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_4candidatesNBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_5candidatesNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("candidatesNBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("candidatesNBlocks", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("candidatesNBlocks", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_4candidatesNBlocks(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_4candidatesNBlocks(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<std::pair<int,int> >  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<std::pair<int,int> >  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("candidatesNBlocks", 0);

  /* "src/pygcgopt/detprobdata.pxi":49
 *         """candidate for the number of blocks, second int indicates how often a candidate was added
 *         """
 *         cdef vector[pair[int, int]] result = self.thisptr.candidatesNBlocks             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  __pyx_t_1 = __pyx_v_self->thisptr->candidatesNBlocks;
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":50
 *         """
 *         cdef vector[pair[int, int]] result = self.thisptr.candidatesNBlocks
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def candidatesNBlocks(self, object candidatesNBlocks):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_convert_vector_to_py_std_3a__3a_pair_3c_int_2c_int_3e___(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":46
 *         return VarPart.create(varpatitionptr, self)
 * 
 *     def candidatesNBlocks(self):             # <<<<<<<<<<<<<<
 *         """candidate for the number of blocks, second int indicates how often a candidate was added
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.candidatesNBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":52
 *         return result
 * 
 *     def candidatesNBlocks(self, object candidatesNBlocks):             # <<<<<<<<<<<<<<
 *         cdef vector[pair[int, int]] cpp_candidatesNBlocks = candidatesNBlocks
 *         self.thisptr.candidatesNBlocks = cpp_candidatesNBlocks
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_7candidatesNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_6candidatesNBlocks, "DetProbData.candidatesNBlocks(self, candidatesNBlocks)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_7candidatesNBlocks = {"candidatesNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_7candidatesNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_6candidatesNBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_7candidatesNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_candidatesNBlocks = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("candidatesNBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_candidatesNBlocks,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 52, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 52, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "candidatesNBlocks", 0) < (0)) __PYX_ERR(9, 52, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("candidatesNBlocks", 1, 1, 1, i); __PYX_ERR(9, 52, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 52, __pyx_L3_error)
    }
    __pyx_v_candidatesNBlocks = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("candidatesNBlocks", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 52, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.candidatesNBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_6candidatesNBlocks(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_candidatesNBlocks);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_6candidatesNBlocks(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_candidatesNBlocks) {
  std::vector<std::pair<int,int> >  __pyx_v_cpp_candidatesNBlocks;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<std::pair<int,int> >  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("candidatesNBlocks", 0);

  /* "src/pygcgopt/detprobdata.pxi":53
 * 
 *     def candidatesNBlocks(self, object candidatesNBlocks):
 *         cdef vector[pair[int, int]] cpp_candidatesNBlocks = candidatesNBlocks             # <<<<<<<<<<<<<<
 *         self.thisptr.candidatesNBlocks = cpp_candidatesNBlocks
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_std_3a__3a_pair_3c_int_2c_int_3e___(__pyx_v_candidatesNBlocks); if (unlikely(PyErr_Occurred())) __PYX_ERR(9, 53, __pyx_L1_error)
  __pyx_v_cpp_candidatesNBlocks = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":54
 *     def candidatesNBlocks(self, object candidatesNBlocks):
 *         cdef vector[pair[int, int]] cpp_candidatesNBlocks = candidatesNBlocks
 *         self.thisptr.candidatesNBlocks = cpp_candidatesNBlocks             # <<<<<<<<<<<<<<
 * 
 *     def conspartitioncollection(self):
*/
  __pyx_v_self->thisptr->candidatesNBlocks = __pyx_v_cpp_candidatesNBlocks;

  /* "src/pygcgopt/detprobdata.pxi":52
 *         return result
 * 
 *     def candidatesNBlocks(self, object candidatesNBlocks):             # <<<<<<<<<<<<<<
 *         cdef vector[pair[int, int]] cpp_candidatesNBlocks = candidatesNBlocks
 *         self.thisptr.candidatesNBlocks = cpp_candidatesNBlocks
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.candidatesNBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":56
 *         self.thisptr.candidatesNBlocks = cpp_candidatesNBlocks
 * 
 *     def conspartitioncollection(self):             # <<<<<<<<<<<<<<
 *         """collection of different constraint class distributions.
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_9conspartitioncollection(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_8conspartitioncollection, "DetProbData.conspartitioncollection(self)\n\ncollection of different constraint class distributions.\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_9conspartitioncollection = {"conspartitioncollection", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_9conspartitioncollection, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_8conspartitioncollection};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_9conspartitioncollection(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("conspartitioncollection (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("conspartitioncollection", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("conspartitioncollection", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_8conspartitioncollection(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_8conspartitioncollection(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<gcg::ConsPartition *>  __pyx_v_result;
  gcg::ConsPartition *__pyx_8genexpr9__pyx_v_r;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<gcg::ConsPartition *>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<gcg::ConsPartition *> ::iterator __pyx_t_3;
  gcg::ConsPartition *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  size_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("conspartitioncollection", 0);

  /* "src/pygcgopt/detprobdata.pxi":59
 *         """collection of different constraint class distributions.
 *         """
 *         cdef vector[ConsPartition *] result = self.thisptr.conspartitioncollection             # <<<<<<<<<<<<<<
 *         return [ConsPart.create(r, <DetProbData>weakref.proxy(self)) for r in result]
 * 
*/
  __pyx_t_1 = __pyx_v_self->thisptr->conspartitioncollection;
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":60
 *         """
 *         cdef vector[ConsPartition *] result = self.thisptr.conspartitioncollection
 *         return [ConsPart.create(r, <DetProbData>weakref.proxy(self)) for r in result]             # <<<<<<<<<<<<<<
 * 
 *     def conspartitioncollection(self, object conspartitioncollection):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 60, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_result.begin();
    for (; __pyx_t_3 != __pyx_v_result.end(); ++__pyx_t_3) {
      __pyx_t_4 = *__pyx_t_3;
      __pyx_8genexpr9__pyx_v_r = __pyx_t_4;
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_weakref); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 60, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_proxy); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 60, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, ((PyObject *)__pyx_v_self)};
        __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 60, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_8 = __pyx_f_8pygcgopt_3gcg_8ConsPart_create(__pyx_8genexpr9__pyx_v_r, ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 60, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_8))) __PYX_ERR(9, 60, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":56
 *         self.thisptr.candidatesNBlocks = cpp_candidatesNBlocks
 * 
 *     def conspartitioncollection(self):             # <<<<<<<<<<<<<<
 *         """collection of different constraint class distributions.
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.conspartitioncollection", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":62
 *         return [ConsPart.create(r, <DetProbData>weakref.proxy(self)) for r in result]
 * 
 *     def conspartitioncollection(self, object conspartitioncollection):             # <<<<<<<<<<<<<<
 *         # this seems to be possible only when we use C++11 (-std=c++11)
 *         # maybe it will be fixed in a future version of Cython
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_11conspartitioncollection(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_10conspartitioncollection, "DetProbData.conspartitioncollection(self, conspartitioncollection)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_11conspartitioncollection = {"conspartitioncollection", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_11conspartitioncollection, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_10conspartitioncollection};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_11conspartitioncollection(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_conspartitioncollection = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("conspartitioncollection (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_conspartitioncollection,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 62, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 62, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "conspartitioncollection", 0) < (0)) __PYX_ERR(9, 62, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("conspartitioncollection", 1, 1, 1, i); __PYX_ERR(9, 62, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 62, __pyx_L3_error)
    }
    __pyx_v_conspartitioncollection = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("conspartitioncollection", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 62, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.conspartitioncollection", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_10conspartitioncollection(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_conspartitioncollection);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_10conspartitioncollection(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_conspartitioncollection) {
  std::vector<gcg::ConsPartition *>  __pyx_v_cpp_conspartitioncollection;
  gcg::ConsPartition *__pyx_v_conspartitioncollection_ptr;
  struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_conspartitioncollection_element = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("conspartitioncollection", 0);

  /* "src/pygcgopt/detprobdata.pxi":66
 *         # maybe it will be fixed in a future version of Cython
 *         cdef vector[ConsPartition *] cpp_conspartitioncollection
 *         cdef ConsPartition * conspartitioncollection_ptr = NULL             # <<<<<<<<<<<<<<
 *         cdef ConsPart conspartitioncollection_element
 *         for conspartitioncollection_element in conspartitioncollection:
*/
  __pyx_v_conspartitioncollection_ptr = NULL;

  /* "src/pygcgopt/detprobdata.pxi":68
 *         cdef ConsPartition * conspartitioncollection_ptr = NULL
 *         cdef ConsPart conspartitioncollection_element
 *         for conspartitioncollection_element in conspartitioncollection:             # <<<<<<<<<<<<<<
 *             conspartitioncollection_ptr = <ConsPartition*> conspartitioncollection_element.consPartition
 *             cpp_conspartitioncollection.push_back(conspartitioncollection_ptr)
*/
  if (likely(PyList_CheckExact(__pyx_v_conspartitioncollection)) || PyTuple_CheckExact(__pyx_v_conspartitioncollection)) {
    __pyx_t_1 = __pyx_v_conspartitioncollection; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_conspartitioncollection); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 68, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 68, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(9, 68, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_2;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(9, 68, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
        #endif
        ++__pyx_t_2;
      }
      if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 68, __pyx_L1_error)
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(9, 68, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart))))) __PYX_ERR(9, 68, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_conspartitioncollection_element, ((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "src/pygcgopt/detprobdata.pxi":69
 *         cdef ConsPart conspartitioncollection_element
 *         for conspartitioncollection_element in conspartitioncollection:
 *             conspartitioncollection_ptr = <ConsPartition*> conspartitioncollection_element.consPartition             # <<<<<<<<<<<<<<
 *             cpp_conspartitioncollection.push_back(conspartitioncollection_ptr)
 *         self.thisptr.conspartitioncollection = cpp_conspartitioncollection
*/
    __pyx_v_conspartitioncollection_ptr = ((gcg::ConsPartition *)__pyx_v_conspartitioncollection_element->consPartition);

    /* "src/pygcgopt/detprobdata.pxi":70
 *         for conspartitioncollection_element in conspartitioncollection:
 *             conspartitioncollection_ptr = <ConsPartition*> conspartitioncollection_element.consPartition
 *             cpp_conspartitioncollection.push_back(conspartitioncollection_ptr)             # <<<<<<<<<<<<<<
 *         self.thisptr.conspartitioncollection = cpp_conspartitioncollection
 * 
*/
    try {
      __pyx_v_cpp_conspartitioncollection.push_back(__pyx_v_conspartitioncollection_ptr);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(9, 70, __pyx_L1_error)
    }

    /* "src/pygcgopt/detprobdata.pxi":68
 *         cdef ConsPartition * conspartitioncollection_ptr = NULL
 *         cdef ConsPart conspartitioncollection_element
 *         for conspartitioncollection_element in conspartitioncollection:             # <<<<<<<<<<<<<<
 *             conspartitioncollection_ptr = <ConsPartition*> conspartitioncollection_element.consPartition
 *             cpp_conspartitioncollection.push_back(conspartitioncollection_ptr)
*/
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/detprobdata.pxi":71
 *             conspartitioncollection_ptr = <ConsPartition*> conspartitioncollection_element.consPartition
 *             cpp_conspartitioncollection.push_back(conspartitioncollection_ptr)
 *         self.thisptr.conspartitioncollection = cpp_conspartitioncollection             # <<<<<<<<<<<<<<
 * 
 *     def varpartitioncollection(self):
*/
  __pyx_v_self->thisptr->conspartitioncollection = __pyx_v_cpp_conspartitioncollection;

  /* "src/pygcgopt/detprobdata.pxi":62
 *         return [ConsPart.create(r, <DetProbData>weakref.proxy(self)) for r in result]
 * 
 *     def conspartitioncollection(self, object conspartitioncollection):             # <<<<<<<<<<<<<<
 *         # this seems to be possible only when we use C++11 (-std=c++11)
 *         # maybe it will be fixed in a future version of Cython
*/

  /* 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("pygcgopt.gcg.DetProbData.conspartitioncollection", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_conspartitioncollection_element);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":73
 *         self.thisptr.conspartitioncollection = cpp_conspartitioncollection
 * 
 *     def varpartitioncollection(self):             # <<<<<<<<<<<<<<
 *         """collection of different variable class distributions.
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_13varpartitioncollection(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_12varpartitioncollection, "DetProbData.varpartitioncollection(self)\n\ncollection of different variable class distributions.\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_13varpartitioncollection = {"varpartitioncollection", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_13varpartitioncollection, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_12varpartitioncollection};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_13varpartitioncollection(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("varpartitioncollection (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("varpartitioncollection", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("varpartitioncollection", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_12varpartitioncollection(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_12varpartitioncollection(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<gcg::VarPartition *>  __pyx_v_result;
  gcg::VarPartition *__pyx_9genexpr10__pyx_v_r;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<gcg::VarPartition *>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<gcg::VarPartition *> ::iterator __pyx_t_3;
  gcg::VarPartition *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("varpartitioncollection", 0);

  /* "src/pygcgopt/detprobdata.pxi":76
 *         """collection of different variable class distributions.
 *         """
 *         cdef vector[VarPartition *] result = self.thisptr.varpartitioncollection             # <<<<<<<<<<<<<<
 *         return [VarPart.create(r, self) for r in result]
 * 
*/
  __pyx_t_1 = __pyx_v_self->thisptr->varpartitioncollection;
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":77
 *         """
 *         cdef vector[VarPartition *] result = self.thisptr.varpartitioncollection
 *         return [VarPart.create(r, self) for r in result]             # <<<<<<<<<<<<<<
 * 
 *     def varpartitioncollection(self, object varpartitioncollection):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_result.begin();
    for (; __pyx_t_3 != __pyx_v_result.end(); ++__pyx_t_3) {
      __pyx_t_4 = *__pyx_t_3;
      __pyx_9genexpr10__pyx_v_r = __pyx_t_4;
      __pyx_t_5 = __pyx_f_8pygcgopt_3gcg_7VarPart_create(__pyx_9genexpr10__pyx_v_r, __pyx_v_self); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 77, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 77, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":73
 *         self.thisptr.conspartitioncollection = cpp_conspartitioncollection
 * 
 *     def varpartitioncollection(self):             # <<<<<<<<<<<<<<
 *         """collection of different variable class distributions.
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.varpartitioncollection", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":79
 *         return [VarPart.create(r, self) for r in result]
 * 
 *     def varpartitioncollection(self, object varpartitioncollection):             # <<<<<<<<<<<<<<
 *         # this seems to be possible only when we use C++11 (-std=c++11)
 *         # maybe it will be fixed in a future version of Cython
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_15varpartitioncollection(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_14varpartitioncollection, "DetProbData.varpartitioncollection(self, varpartitioncollection)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_15varpartitioncollection = {"varpartitioncollection", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_15varpartitioncollection, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_14varpartitioncollection};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_15varpartitioncollection(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_varpartitioncollection = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("varpartitioncollection (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_varpartitioncollection,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 79, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "varpartitioncollection", 0) < (0)) __PYX_ERR(9, 79, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("varpartitioncollection", 1, 1, 1, i); __PYX_ERR(9, 79, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 79, __pyx_L3_error)
    }
    __pyx_v_varpartitioncollection = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("varpartitioncollection", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 79, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.varpartitioncollection", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_14varpartitioncollection(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_varpartitioncollection);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_14varpartitioncollection(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_varpartitioncollection) {
  std::vector<gcg::VarPartition *>  __pyx_v_cpp_varpartitioncollection;
  gcg::VarPartition *__pyx_v_varpartitioncollection_ptr;
  struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_varpartitioncollection_element = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("varpartitioncollection", 0);

  /* "src/pygcgopt/detprobdata.pxi":83
 *         # maybe it will be fixed in a future version of Cython
 *         cdef vector[VarPartition *] cpp_varpartitioncollection
 *         cdef VarPartition * varpartitioncollection_ptr = NULL             # <<<<<<<<<<<<<<
 *         cdef VarPart varpartitioncollection_element
 *         for varpartitioncollection_element in varpartitioncollection:
*/
  __pyx_v_varpartitioncollection_ptr = NULL;

  /* "src/pygcgopt/detprobdata.pxi":85
 *         cdef VarPartition * varpartitioncollection_ptr = NULL
 *         cdef VarPart varpartitioncollection_element
 *         for varpartitioncollection_element in varpartitioncollection:             # <<<<<<<<<<<<<<
 *             varpartitioncollection_ptr = <VarPartition*> varpartitioncollection_element.varPartition
 *             cpp_varpartitioncollection.push_back(varpartitioncollection_ptr)
*/
  if (likely(PyList_CheckExact(__pyx_v_varpartitioncollection)) || PyTuple_CheckExact(__pyx_v_varpartitioncollection)) {
    __pyx_t_1 = __pyx_v_varpartitioncollection; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_varpartitioncollection); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 85, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 85, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(9, 85, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_2;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(9, 85, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
        #endif
        ++__pyx_t_2;
      }
      if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 85, __pyx_L1_error)
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(9, 85, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart))))) __PYX_ERR(9, 85, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_varpartitioncollection_element, ((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "src/pygcgopt/detprobdata.pxi":86
 *         cdef VarPart varpartitioncollection_element
 *         for varpartitioncollection_element in varpartitioncollection:
 *             varpartitioncollection_ptr = <VarPartition*> varpartitioncollection_element.varPartition             # <<<<<<<<<<<<<<
 *             cpp_varpartitioncollection.push_back(varpartitioncollection_ptr)
 *         self.thisptr.varpartitioncollection = cpp_varpartitioncollection
*/
    __pyx_v_varpartitioncollection_ptr = ((gcg::VarPartition *)__pyx_v_varpartitioncollection_element->varPartition);

    /* "src/pygcgopt/detprobdata.pxi":87
 *         for varpartitioncollection_element in varpartitioncollection:
 *             varpartitioncollection_ptr = <VarPartition*> varpartitioncollection_element.varPartition
 *             cpp_varpartitioncollection.push_back(varpartitioncollection_ptr)             # <<<<<<<<<<<<<<
 *         self.thisptr.varpartitioncollection = cpp_varpartitioncollection
 * 
*/
    try {
      __pyx_v_cpp_varpartitioncollection.push_back(__pyx_v_varpartitioncollection_ptr);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(9, 87, __pyx_L1_error)
    }

    /* "src/pygcgopt/detprobdata.pxi":85
 *         cdef VarPartition * varpartitioncollection_ptr = NULL
 *         cdef VarPart varpartitioncollection_element
 *         for varpartitioncollection_element in varpartitioncollection:             # <<<<<<<<<<<<<<
 *             varpartitioncollection_ptr = <VarPartition*> varpartitioncollection_element.varPartition
 *             cpp_varpartitioncollection.push_back(varpartitioncollection_ptr)
*/
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/detprobdata.pxi":88
 *             varpartitioncollection_ptr = <VarPartition*> varpartitioncollection_element.varPartition
 *             cpp_varpartitioncollection.push_back(varpartitioncollection_ptr)
 *         self.thisptr.varpartitioncollection = cpp_varpartitioncollection             # <<<<<<<<<<<<<<
 * 
 *     def classificationtime(self):
*/
  __pyx_v_self->thisptr->varpartitioncollection = __pyx_v_cpp_varpartitioncollection;

  /* "src/pygcgopt/detprobdata.pxi":79
 *         return [VarPart.create(r, self) for r in result]
 * 
 *     def varpartitioncollection(self, object varpartitioncollection):             # <<<<<<<<<<<<<<
 *         # this seems to be possible only when we use C++11 (-std=c++11)
 *         # maybe it will be fixed in a future version of Cython
*/

  /* 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("pygcgopt.gcg.DetProbData.varpartitioncollection", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_varpartitioncollection_element);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":90
 *         self.thisptr.varpartitioncollection = cpp_varpartitioncollection
 * 
 *     def classificationtime(self):             # <<<<<<<<<<<<<<
 *         """time that was consumed by the classification of the constraint and variables classifiers.
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_17classificationtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_16classificationtime, "DetProbData.classificationtime(self)\n\ntime that was consumed by the classification of the constraint and variables classifiers.\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_17classificationtime = {"classificationtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_17classificationtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_16classificationtime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_17classificationtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("classificationtime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("classificationtime", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("classificationtime", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_16classificationtime(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_16classificationtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("classificationtime", 0);

  /* "src/pygcgopt/detprobdata.pxi":93
 *         """time that was consumed by the classification of the constraint and variables classifiers.
 *         """
 *         cdef double result = self.thisptr.classificationtime             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  __pyx_t_1 = __pyx_v_self->thisptr->classificationtime;
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":94
 *         """
 *         cdef double result = self.thisptr.classificationtime
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def classificationtime(self, double classificationtime):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":90
 *         self.thisptr.varpartitioncollection = cpp_varpartitioncollection
 * 
 *     def classificationtime(self):             # <<<<<<<<<<<<<<
 *         """time that was consumed by the classification of the constraint and variables classifiers.
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.classificationtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":96
 *         return result
 * 
 *     def classificationtime(self, double classificationtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_classificationtime = classificationtime
 *         self.thisptr.classificationtime = cpp_classificationtime
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_19classificationtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_18classificationtime, "DetProbData.classificationtime(self, double classificationtime)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_19classificationtime = {"classificationtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_19classificationtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_18classificationtime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_19classificationtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_classificationtime;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("classificationtime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_classificationtime,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 96, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 96, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "classificationtime", 0) < (0)) __PYX_ERR(9, 96, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("classificationtime", 1, 1, 1, i); __PYX_ERR(9, 96, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 96, __pyx_L3_error)
    }
    __pyx_v_classificationtime = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_classificationtime == (double)-1) && PyErr_Occurred())) __PYX_ERR(9, 96, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("classificationtime", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 96, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.classificationtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_18classificationtime(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_classificationtime);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_18classificationtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, double __pyx_v_classificationtime) {
  double __pyx_v_cpp_classificationtime;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("classificationtime", 0);

  /* "src/pygcgopt/detprobdata.pxi":97
 * 
 *     def classificationtime(self, double classificationtime):
 *         cdef double cpp_classificationtime = classificationtime             # <<<<<<<<<<<<<<
 *         self.thisptr.classificationtime = cpp_classificationtime
 * 
*/
  __pyx_v_cpp_classificationtime = __pyx_v_classificationtime;

  /* "src/pygcgopt/detprobdata.pxi":98
 *     def classificationtime(self, double classificationtime):
 *         cdef double cpp_classificationtime = classificationtime
 *         self.thisptr.classificationtime = cpp_classificationtime             # <<<<<<<<<<<<<<
 * 
 *     def nblockscandidatescalctime(self):
*/
  __pyx_v_self->thisptr->classificationtime = __pyx_v_cpp_classificationtime;

  /* "src/pygcgopt/detprobdata.pxi":96
 *         return result
 * 
 *     def classificationtime(self, double classificationtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_classificationtime = classificationtime
 *         self.thisptr.classificationtime = cpp_classificationtime
*/

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

/* "src/pygcgopt/detprobdata.pxi":100
 *         self.thisptr.classificationtime = cpp_classificationtime
 * 
 *     def nblockscandidatescalctime(self):             # <<<<<<<<<<<<<<
 *         """time that was used to calulate the candidates of te block number.
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_21nblockscandidatescalctime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_20nblockscandidatescalctime, "DetProbData.nblockscandidatescalctime(self)\n\ntime that was used to calulate the candidates of te block number.\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_21nblockscandidatescalctime = {"nblockscandidatescalctime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_21nblockscandidatescalctime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_20nblockscandidatescalctime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_21nblockscandidatescalctime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nblockscandidatescalctime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("nblockscandidatescalctime", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("nblockscandidatescalctime", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_20nblockscandidatescalctime(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_20nblockscandidatescalctime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("nblockscandidatescalctime", 0);

  /* "src/pygcgopt/detprobdata.pxi":103
 *         """time that was used to calulate the candidates of te block number.
 *         """
 *         cdef double result = self.thisptr.nblockscandidatescalctime             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  __pyx_t_1 = __pyx_v_self->thisptr->nblockscandidatescalctime;
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":104
 *         """
 *         cdef double result = self.thisptr.nblockscandidatescalctime
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def nblockscandidatescalctime(DetProbData self, double nblockscandidatescalctime):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":100
 *         self.thisptr.classificationtime = cpp_classificationtime
 * 
 *     def nblockscandidatescalctime(self):             # <<<<<<<<<<<<<<
 *         """time that was used to calulate the candidates of te block number.
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.nblockscandidatescalctime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":106
 *         return result
 * 
 *     def nblockscandidatescalctime(DetProbData self, double nblockscandidatescalctime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_nblockscandidatescalctime = nblockscandidatescalctime
 *         self.thisptr.nblockscandidatescalctime = cpp_nblockscandidatescalctime
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_23nblockscandidatescalctime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_22nblockscandidatescalctime, "DetProbData.nblockscandidatescalctime(self, double nblockscandidatescalctime)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_23nblockscandidatescalctime = {"nblockscandidatescalctime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_23nblockscandidatescalctime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_22nblockscandidatescalctime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_23nblockscandidatescalctime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_nblockscandidatescalctime;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nblockscandidatescalctime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_nblockscandidatescalctime,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 106, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 106, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "nblockscandidatescalctime", 0) < (0)) __PYX_ERR(9, 106, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("nblockscandidatescalctime", 1, 1, 1, i); __PYX_ERR(9, 106, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 106, __pyx_L3_error)
    }
    __pyx_v_nblockscandidatescalctime = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_nblockscandidatescalctime == (double)-1) && PyErr_Occurred())) __PYX_ERR(9, 106, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("nblockscandidatescalctime", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 106, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.nblockscandidatescalctime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_22nblockscandidatescalctime(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_nblockscandidatescalctime);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_22nblockscandidatescalctime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, double __pyx_v_nblockscandidatescalctime) {
  double __pyx_v_cpp_nblockscandidatescalctime;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nblockscandidatescalctime", 0);

  /* "src/pygcgopt/detprobdata.pxi":107
 * 
 *     def nblockscandidatescalctime(DetProbData self, double nblockscandidatescalctime):
 *         cdef double cpp_nblockscandidatescalctime = nblockscandidatescalctime             # <<<<<<<<<<<<<<
 *         self.thisptr.nblockscandidatescalctime = cpp_nblockscandidatescalctime
 * 
*/
  __pyx_v_cpp_nblockscandidatescalctime = __pyx_v_nblockscandidatescalctime;

  /* "src/pygcgopt/detprobdata.pxi":108
 *     def nblockscandidatescalctime(DetProbData self, double nblockscandidatescalctime):
 *         cdef double cpp_nblockscandidatescalctime = nblockscandidatescalctime
 *         self.thisptr.nblockscandidatescalctime = cpp_nblockscandidatescalctime             # <<<<<<<<<<<<<<
 * 
 *     def postprocessingtime(self):
*/
  __pyx_v_self->thisptr->nblockscandidatescalctime = __pyx_v_cpp_nblockscandidatescalctime;

  /* "src/pygcgopt/detprobdata.pxi":106
 *         return result
 * 
 *     def nblockscandidatescalctime(DetProbData self, double nblockscandidatescalctime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_nblockscandidatescalctime = nblockscandidatescalctime
 *         self.thisptr.nblockscandidatescalctime = cpp_nblockscandidatescalctime
*/

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

/* "src/pygcgopt/detprobdata.pxi":110
 *         self.thisptr.nblockscandidatescalctime = cpp_nblockscandidatescalctime
 * 
 *     def postprocessingtime(self):             # <<<<<<<<<<<<<<
 *         """time that was spent in postproceesing decomposigtions.
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_25postprocessingtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_24postprocessingtime, "DetProbData.postprocessingtime(self)\n\ntime that was spent in postproceesing decomposigtions.\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_25postprocessingtime = {"postprocessingtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_25postprocessingtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_24postprocessingtime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_25postprocessingtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("postprocessingtime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("postprocessingtime", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("postprocessingtime", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_24postprocessingtime(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_24postprocessingtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("postprocessingtime", 0);

  /* "src/pygcgopt/detprobdata.pxi":113
 *         """time that was spent in postproceesing decomposigtions.
 *         """
 *         cdef double result = self.thisptr.postprocessingtime             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  __pyx_t_1 = __pyx_v_self->thisptr->postprocessingtime;
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":114
 *         """
 *         cdef double result = self.thisptr.postprocessingtime
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def postprocessingtime(self, double postprocessingtime):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":110
 *         self.thisptr.nblockscandidatescalctime = cpp_nblockscandidatescalctime
 * 
 *     def postprocessingtime(self):             # <<<<<<<<<<<<<<
 *         """time that was spent in postproceesing decomposigtions.
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.postprocessingtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":116
 *         return result
 * 
 *     def postprocessingtime(self, double postprocessingtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_postprocessingtime = postprocessingtime
 *         self.thisptr.postprocessingtime = cpp_postprocessingtime
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_27postprocessingtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_26postprocessingtime, "DetProbData.postprocessingtime(self, double postprocessingtime)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_27postprocessingtime = {"postprocessingtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_27postprocessingtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_26postprocessingtime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_27postprocessingtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_postprocessingtime;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("postprocessingtime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_postprocessingtime,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 116, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 116, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "postprocessingtime", 0) < (0)) __PYX_ERR(9, 116, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("postprocessingtime", 1, 1, 1, i); __PYX_ERR(9, 116, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 116, __pyx_L3_error)
    }
    __pyx_v_postprocessingtime = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_postprocessingtime == (double)-1) && PyErr_Occurred())) __PYX_ERR(9, 116, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("postprocessingtime", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 116, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.postprocessingtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_26postprocessingtime(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_postprocessingtime);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_26postprocessingtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, double __pyx_v_postprocessingtime) {
  double __pyx_v_cpp_postprocessingtime;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("postprocessingtime", 0);

  /* "src/pygcgopt/detprobdata.pxi":117
 * 
 *     def postprocessingtime(self, double postprocessingtime):
 *         cdef double cpp_postprocessingtime = postprocessingtime             # <<<<<<<<<<<<<<
 *         self.thisptr.postprocessingtime = cpp_postprocessingtime
 * 
*/
  __pyx_v_cpp_postprocessingtime = __pyx_v_postprocessingtime;

  /* "src/pygcgopt/detprobdata.pxi":118
 *     def postprocessingtime(self, double postprocessingtime):
 *         cdef double cpp_postprocessingtime = postprocessingtime
 *         self.thisptr.postprocessingtime = cpp_postprocessingtime             # <<<<<<<<<<<<<<
 * 
 *     def translatingtime(self):
*/
  __pyx_v_self->thisptr->postprocessingtime = __pyx_v_cpp_postprocessingtime;

  /* "src/pygcgopt/detprobdata.pxi":116
 *         return result
 * 
 *     def postprocessingtime(self, double postprocessingtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_postprocessingtime = postprocessingtime
 *         self.thisptr.postprocessingtime = cpp_postprocessingtime
*/

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

/* "src/pygcgopt/detprobdata.pxi":120
 *         self.thisptr.postprocessingtime = cpp_postprocessingtime
 * 
 *     def translatingtime(self):             # <<<<<<<<<<<<<<
 *         """time that was spent by transforming partialdecs between presolved and orig problem.
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_29translatingtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_28translatingtime, "DetProbData.translatingtime(self)\n\ntime that was spent by transforming partialdecs between presolved and orig problem.\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_29translatingtime = {"translatingtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_29translatingtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_28translatingtime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_29translatingtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("translatingtime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("translatingtime", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("translatingtime", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_28translatingtime(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_28translatingtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  double __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("translatingtime", 0);

  /* "src/pygcgopt/detprobdata.pxi":123
 *         """time that was spent by transforming partialdecs between presolved and orig problem.
 *         """
 *         cdef double result = self.thisptr.translatingtime             # <<<<<<<<<<<<<<
 *         return result
 * 
*/
  __pyx_t_1 = __pyx_v_self->thisptr->translatingtime;
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":124
 *         """
 *         cdef double result = self.thisptr.translatingtime
 *         return result             # <<<<<<<<<<<<<<
 * 
 *     def translatingtime(self, double translatingtime):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":120
 *         self.thisptr.postprocessingtime = cpp_postprocessingtime
 * 
 *     def translatingtime(self):             # <<<<<<<<<<<<<<
 *         """time that was spent by transforming partialdecs between presolved and orig problem.
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.translatingtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":126
 *         return result
 * 
 *     def translatingtime(self, double translatingtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_translatingtime = translatingtime
 *         self.thisptr.translatingtime = cpp_translatingtime
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_31translatingtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_30translatingtime, "DetProbData.translatingtime(self, double translatingtime)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_31translatingtime = {"translatingtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_31translatingtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_30translatingtime};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_31translatingtime(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_translatingtime;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("translatingtime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_translatingtime,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 126, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 126, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "translatingtime", 0) < (0)) __PYX_ERR(9, 126, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("translatingtime", 1, 1, 1, i); __PYX_ERR(9, 126, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 126, __pyx_L3_error)
    }
    __pyx_v_translatingtime = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_translatingtime == (double)-1) && PyErr_Occurred())) __PYX_ERR(9, 126, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("translatingtime", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 126, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.translatingtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_30translatingtime(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_translatingtime);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_30translatingtime(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, double __pyx_v_translatingtime) {
  double __pyx_v_cpp_translatingtime;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("translatingtime", 0);

  /* "src/pygcgopt/detprobdata.pxi":127
 * 
 *     def translatingtime(self, double translatingtime):
 *         cdef double cpp_translatingtime = translatingtime             # <<<<<<<<<<<<<<
 *         self.thisptr.translatingtime = cpp_translatingtime
 * 
*/
  __pyx_v_cpp_translatingtime = __pyx_v_translatingtime;

  /* "src/pygcgopt/detprobdata.pxi":128
 *     def translatingtime(self, double translatingtime):
 *         cdef double cpp_translatingtime = translatingtime
 *         self.thisptr.translatingtime = cpp_translatingtime             # <<<<<<<<<<<<<<
 * 
 *     def addConsPartition(self, ConsPart partition):
*/
  __pyx_v_self->thisptr->translatingtime = __pyx_v_cpp_translatingtime;

  /* "src/pygcgopt/detprobdata.pxi":126
 *         return result
 * 
 *     def translatingtime(self, double translatingtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_translatingtime = translatingtime
 *         self.thisptr.translatingtime = cpp_translatingtime
*/

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

/* "src/pygcgopt/detprobdata.pxi":130
 *         self.thisptr.translatingtime = cpp_translatingtime
 * 
 *     def addConsPartition(self, ConsPart partition):             # <<<<<<<<<<<<<<
 *         """adds a constraint partition if it is no duplicate of an existing constraint partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_33addConsPartition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_32addConsPartition, "DetProbData.addConsPartition(self, ConsPart partition)\n\nadds a constraint partition if it is no duplicate of an existing constraint partition\n\n:param partition: constraint partition object\n:type partition: :class:`ConsPart`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_33addConsPartition = {"addConsPartition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_33addConsPartition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_32addConsPartition};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_33addConsPartition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_partition = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addConsPartition (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partition,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 130, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 130, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addConsPartition", 0) < (0)) __PYX_ERR(9, 130, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addConsPartition", 1, 1, 1, i); __PYX_ERR(9, 130, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 130, __pyx_L3_error)
    }
    __pyx_v_partition = ((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addConsPartition", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 130, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addConsPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partition), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, 1, "partition", 0))) __PYX_ERR(9, 130, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_32addConsPartition(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partition);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_32addConsPartition(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_ConsPart *__pyx_v_partition) {
  gcg::ConsPartition *__pyx_v_cpp_partition;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::ConsPartition *__pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addConsPartition", 0);

  /* "src/pygcgopt/detprobdata.pxi":136
 *         :type partition: :class:`ConsPart`
 *         """
 *         cdef ConsPartition* cpp_partition = partition.consPartition             # <<<<<<<<<<<<<<
 *         self.thisptr.addConsPartition(cpp_partition)
 * 
*/
  __pyx_t_1 = __pyx_v_partition->consPartition;
  __pyx_v_cpp_partition = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":137
 *         """
 *         cdef ConsPartition* cpp_partition = partition.consPartition
 *         self.thisptr.addConsPartition(cpp_partition)             # <<<<<<<<<<<<<<
 * 
 *     def addCandidatesNBlocksNVotes(self, int candidate, int nvotes):
*/
  try {
    __pyx_v_self->thisptr->addConsPartition(__pyx_v_cpp_partition);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 137, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":130
 *         self.thisptr.translatingtime = cpp_translatingtime
 * 
 *     def addConsPartition(self, ConsPart partition):             # <<<<<<<<<<<<<<
 *         """adds a constraint partition if it is no duplicate of an existing constraint partition
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addConsPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":139
 *         self.thisptr.addConsPartition(cpp_partition)
 * 
 *     def addCandidatesNBlocksNVotes(self, int candidate, int nvotes):             # <<<<<<<<<<<<<<
 *         """adds a candidate for block number and counts how often a candidate is added
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_35addCandidatesNBlocksNVotes(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_34addCandidatesNBlocksNVotes, "DetProbData.addCandidatesNBlocksNVotes(self, int candidate, int nvotes)\n\nadds a candidate for block number and counts how often a candidate is added\n\n:param candidate: candidate for block size\n:type candidate: int\n:param nvotes: number of votes this candidates will get\n:type nvotes: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_35addCandidatesNBlocksNVotes = {"addCandidatesNBlocksNVotes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_35addCandidatesNBlocksNVotes, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_34addCandidatesNBlocksNVotes};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_35addCandidatesNBlocksNVotes(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_candidate;
  int __pyx_v_nvotes;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addCandidatesNBlocksNVotes (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_candidate,&__pyx_mstate_global->__pyx_n_u_nvotes,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 139, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 139, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 139, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addCandidatesNBlocksNVotes", 0) < (0)) __PYX_ERR(9, 139, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addCandidatesNBlocksNVotes", 1, 2, 2, i); __PYX_ERR(9, 139, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 139, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 139, __pyx_L3_error)
    }
    __pyx_v_candidate = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_candidate == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 139, __pyx_L3_error)
    __pyx_v_nvotes = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_nvotes == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 139, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addCandidatesNBlocksNVotes", 1, 2, 2, __pyx_nargs); __PYX_ERR(9, 139, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addCandidatesNBlocksNVotes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_34addCandidatesNBlocksNVotes(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_candidate, __pyx_v_nvotes);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_34addCandidatesNBlocksNVotes(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, int __pyx_v_candidate, int __pyx_v_nvotes) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addCandidatesNBlocksNVotes", 0);

  /* "src/pygcgopt/detprobdata.pxi":147
 *         :type nvotes: int
 *         """
 *         self.thisptr.addCandidatesNBlocksNVotes(candidate, nvotes)             # <<<<<<<<<<<<<<
 * 
 *     def addPartialdecToAncestor(self, PartialDecomposition partialdec):
*/
  try {
    __pyx_v_self->thisptr->addCandidatesNBlocksNVotes(__pyx_v_candidate, __pyx_v_nvotes);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 147, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":139
 *         self.thisptr.addConsPartition(cpp_partition)
 * 
 *     def addCandidatesNBlocksNVotes(self, int candidate, int nvotes):             # <<<<<<<<<<<<<<
 *         """adds a candidate for block number and counts how often a candidate is added
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addCandidatesNBlocksNVotes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":149
 *         self.thisptr.addCandidatesNBlocksNVotes(candidate, nvotes)
 * 
 *     def addPartialdecToAncestor(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to ancestor partialdecs
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_37addPartialdecToAncestor(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_36addPartialdecToAncestor, "DetProbData.addPartialdecToAncestor(self, PartialDecomposition partialdec)\n\nadds a partialdec to ancestor partialdecs\n\n:param partialdec: partialdec that is added to the ancestor partialdecs\n:type partialdec: :class:`PartialDecomposition`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_37addPartialdecToAncestor = {"addPartialdecToAncestor", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_37addPartialdecToAncestor, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_36addPartialdecToAncestor};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_37addPartialdecToAncestor(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPartialdecToAncestor (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 149, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 149, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPartialdecToAncestor", 0) < (0)) __PYX_ERR(9, 149, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPartialdecToAncestor", 1, 1, 1, i); __PYX_ERR(9, 149, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 149, __pyx_L3_error)
    }
    __pyx_v_partialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPartialdecToAncestor", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 149, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addPartialdecToAncestor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "partialdec", 0))) __PYX_ERR(9, 149, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_36addPartialdecToAncestor(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partialdec);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_36addPartialdecToAncestor(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec) {
  gcg::PARTIALDECOMP *__pyx_v_cpp_partialdec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPartialdecToAncestor", 0);

  /* "src/pygcgopt/detprobdata.pxi":155
 *         :type partialdec: :class:`PartialDecomposition`
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr             # <<<<<<<<<<<<<<
 *         self.thisptr.addPartialdecToAncestor(cpp_partialdec)
 * 
*/
  __pyx_t_1 = __pyx_v_partialdec->thisptr;
  __pyx_v_cpp_partialdec = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":156
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr
 *         self.thisptr.addPartialdecToAncestor(cpp_partialdec)             # <<<<<<<<<<<<<<
 * 
 *     def addPartialdecToOpen(self, PartialDecomposition partialdec):
*/
  try {
    __pyx_v_self->thisptr->addPartialdecToAncestor(__pyx_v_cpp_partialdec);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 156, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":149
 *         self.thisptr.addCandidatesNBlocksNVotes(candidate, nvotes)
 * 
 *     def addPartialdecToAncestor(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to ancestor partialdecs
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addPartialdecToAncestor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":158
 *         self.thisptr.addPartialdecToAncestor(cpp_partialdec)
 * 
 *     def addPartialdecToOpen(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to current partialdecs (data structure for partialdecs that are going to processed in the propagation rounds)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_39addPartialdecToOpen(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_38addPartialdecToOpen, "DetProbData.addPartialdecToOpen(self, PartialDecomposition partialdec)\n\nadds a partialdec to current partialdecs (data structure for partialdecs that are going to processed in the propagation rounds)\n\n:param partialdec: pointer of partialdec to be added\n:type partialdec: :class:`PartialDecomposition`\n:return: True if the partialdecs was successfully added (i.e. it is no duplicate of a known partialdec)\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_39addPartialdecToOpen = {"addPartialdecToOpen", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_39addPartialdecToOpen, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_38addPartialdecToOpen};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_39addPartialdecToOpen(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPartialdecToOpen (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 158, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 158, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPartialdecToOpen", 0) < (0)) __PYX_ERR(9, 158, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPartialdecToOpen", 1, 1, 1, i); __PYX_ERR(9, 158, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 158, __pyx_L3_error)
    }
    __pyx_v_partialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPartialdecToOpen", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 158, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addPartialdecToOpen", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "partialdec", 0))) __PYX_ERR(9, 158, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_38addPartialdecToOpen(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partialdec);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_38addPartialdecToOpen(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec) {
  gcg::PARTIALDECOMP *__pyx_v_cpp_partialdec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  bool __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPartialdecToOpen", 0);

  /* "src/pygcgopt/detprobdata.pxi":166
 *         :rtype: bool
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr             # <<<<<<<<<<<<<<
 *         return self.thisptr.addPartialdecToOpen(cpp_partialdec)
 * 
*/
  __pyx_t_1 = __pyx_v_partialdec->thisptr;
  __pyx_v_cpp_partialdec = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":167
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr
 *         return self.thisptr.addPartialdecToOpen(cpp_partialdec)             # <<<<<<<<<<<<<<
 * 
 *     def addPartialdecToFinished(self, PartialDecomposition partialdec):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->addPartialdecToOpen(__pyx_v_cpp_partialdec);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 167, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":158
 *         self.thisptr.addPartialdecToAncestor(cpp_partialdec)
 * 
 *     def addPartialdecToOpen(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to current partialdecs (data structure for partialdecs that are going to processed in the propagation rounds)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addPartialdecToOpen", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":169
 *         return self.thisptr.addPartialdecToOpen(cpp_partialdec)
 * 
 *     def addPartialdecToFinished(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to finished partialdecs
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_41addPartialdecToFinished(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_40addPartialdecToFinished, "DetProbData.addPartialdecToFinished(self, PartialDecomposition partialdec)\n\nadds a partialdec to finished partialdecs\n\n.. seealso:: * :meth:`addPartialdecToFinishedUnchecked()`\n\n:param partialdec: pointer of partialdec that is going to be added to the finished partialdecs (data structure to carry finished decompositions)\n:type partialdec: :class:`PartialDecomposition`\n:return: True if the partialdecs was successfully added (i.e. it is no duplicate of a known partialdec)\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_41addPartialdecToFinished = {"addPartialdecToFinished", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_41addPartialdecToFinished, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_40addPartialdecToFinished};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_41addPartialdecToFinished(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPartialdecToFinished (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 169, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 169, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPartialdecToFinished", 0) < (0)) __PYX_ERR(9, 169, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPartialdecToFinished", 1, 1, 1, i); __PYX_ERR(9, 169, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 169, __pyx_L3_error)
    }
    __pyx_v_partialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPartialdecToFinished", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 169, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addPartialdecToFinished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "partialdec", 0))) __PYX_ERR(9, 169, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_40addPartialdecToFinished(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partialdec);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_40addPartialdecToFinished(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec) {
  gcg::PARTIALDECOMP *__pyx_v_cpp_partialdec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  bool __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPartialdecToFinished", 0);

  /* "src/pygcgopt/detprobdata.pxi":179
 *         :rtype: bool
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr             # <<<<<<<<<<<<<<
 *         return self.thisptr.addPartialdecToFinished(cpp_partialdec)
 * 
*/
  __pyx_t_1 = __pyx_v_partialdec->thisptr;
  __pyx_v_cpp_partialdec = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":180
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr
 *         return self.thisptr.addPartialdecToFinished(cpp_partialdec)             # <<<<<<<<<<<<<<
 * 
 *     def addPartialdecToFinishedUnchecked(self, PartialDecomposition partialdec):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->addPartialdecToFinished(__pyx_v_cpp_partialdec);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 180, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":169
 *         return self.thisptr.addPartialdecToOpen(cpp_partialdec)
 * 
 *     def addPartialdecToFinished(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to finished partialdecs
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addPartialdecToFinished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":182
 *         return self.thisptr.addPartialdecToFinished(cpp_partialdec)
 * 
 *     def addPartialdecToFinishedUnchecked(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to finished partialdecs without checking for duplicates, dev has to check this on his own
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_43addPartialdecToFinishedUnchecked(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_42addPartialdecToFinishedUnchecked, "DetProbData.addPartialdecToFinishedUnchecked(self, PartialDecomposition partialdec)\n\nadds a partialdec to finished partialdecs without checking for duplicates, dev has to check this on his own\n\n.. seealso:: * :meth:`addPartialdecToFinished()`\n\n:param partialdec: pointer of partialdec that is going to be added unchecked to the finished partialdecs (data structure to carry finished decompositions)\n:type partialdec: :class:`PartialDecomposition`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_43addPartialdecToFinishedUnchecked = {"addPartialdecToFinishedUnchecked", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_43addPartialdecToFinishedUnchecked, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_42addPartialdecToFinishedUnchecked};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_43addPartialdecToFinishedUnchecked(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPartialdecToFinishedUnchecked (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 182, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 182, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPartialdecToFinishedUnchecked", 0) < (0)) __PYX_ERR(9, 182, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPartialdecToFinishedUnchecked", 1, 1, 1, i); __PYX_ERR(9, 182, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 182, __pyx_L3_error)
    }
    __pyx_v_partialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPartialdecToFinishedUnchecked", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 182, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addPartialdecToFinishedUnchecked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "partialdec", 0))) __PYX_ERR(9, 182, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_42addPartialdecToFinishedUnchecked(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partialdec);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_42addPartialdecToFinishedUnchecked(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec) {
  gcg::PARTIALDECOMP *__pyx_v_cpp_partialdec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPartialdecToFinishedUnchecked", 0);

  /* "src/pygcgopt/detprobdata.pxi":190
 *         :type partialdec: :class:`PartialDecomposition`
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr             # <<<<<<<<<<<<<<
 *         self.thisptr.addPartialdecToFinishedUnchecked(cpp_partialdec)
 * 
*/
  __pyx_t_1 = __pyx_v_partialdec->thisptr;
  __pyx_v_cpp_partialdec = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":191
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr
 *         self.thisptr.addPartialdecToFinishedUnchecked(cpp_partialdec)             # <<<<<<<<<<<<<<
 * 
 *     def addVarPartition(self, VarPart partition):
*/
  try {
    __pyx_v_self->thisptr->addPartialdecToFinishedUnchecked(__pyx_v_cpp_partialdec);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 191, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":182
 *         return self.thisptr.addPartialdecToFinished(cpp_partialdec)
 * 
 *     def addPartialdecToFinishedUnchecked(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to finished partialdecs without checking for duplicates, dev has to check this on his own
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addPartialdecToFinishedUnchecked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":193
 *         self.thisptr.addPartialdecToFinishedUnchecked(cpp_partialdec)
 * 
 *     def addVarPartition(self, VarPart partition):             # <<<<<<<<<<<<<<
 *         """adds a variable partition if it is no duplicate of an existing variable partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_45addVarPartition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_44addVarPartition, "DetProbData.addVarPartition(self, VarPart partition)\n\nadds a variable partition if it is no duplicate of an existing variable partition\n\n:param partition: variable partition object\n:type partition: :class:`VarPart`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_45addVarPartition = {"addVarPartition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_45addVarPartition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_44addVarPartition};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_45addVarPartition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_partition = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addVarPartition (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partition,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 193, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 193, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addVarPartition", 0) < (0)) __PYX_ERR(9, 193, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addVarPartition", 1, 1, 1, i); __PYX_ERR(9, 193, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 193, __pyx_L3_error)
    }
    __pyx_v_partition = ((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addVarPartition", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 193, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addVarPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partition), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, 1, "partition", 0))) __PYX_ERR(9, 193, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_44addVarPartition(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partition);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_44addVarPartition(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_VarPart *__pyx_v_partition) {
  gcg::VarPartition *__pyx_v_cpp_partition;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::VarPartition *__pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addVarPartition", 0);

  /* "src/pygcgopt/detprobdata.pxi":199
 *         :type partition: :class:`VarPart`
 *         """
 *         cdef VarPartition* cpp_partition = partition.varPartition             # <<<<<<<<<<<<<<
 *         self.thisptr.addVarPartition(cpp_partition)
 * 
*/
  __pyx_t_1 = __pyx_v_partition->varPartition;
  __pyx_v_cpp_partition = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":200
 *         """
 *         cdef VarPartition* cpp_partition = partition.varPartition
 *         self.thisptr.addVarPartition(cpp_partition)             # <<<<<<<<<<<<<<
 * 
 *     def clearAncestorPartialdecs(self):
*/
  try {
    __pyx_v_self->thisptr->addVarPartition(__pyx_v_cpp_partition);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 200, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":193
 *         self.thisptr.addPartialdecToFinishedUnchecked(cpp_partialdec)
 * 
 *     def addVarPartition(self, VarPart partition):             # <<<<<<<<<<<<<<
 *         """adds a variable partition if it is no duplicate of an existing variable partition
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.addVarPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":202
 *         self.thisptr.addVarPartition(cpp_partition)
 * 
 *     def clearAncestorPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears ancestor partialdec data structure
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_47clearAncestorPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_46clearAncestorPartialdecs, "DetProbData.clearAncestorPartialdecs(self)\n\nclears ancestor partialdec data structure\n\n.. note:: does not free the partialdecs themselves");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_47clearAncestorPartialdecs = {"clearAncestorPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_47clearAncestorPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_46clearAncestorPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_47clearAncestorPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clearAncestorPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clearAncestorPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clearAncestorPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_46clearAncestorPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_46clearAncestorPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("clearAncestorPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":207
 *         .. note:: does not free the partialdecs themselves
 *         """
 *         self.thisptr.clearAncestorPartialdecs()             # <<<<<<<<<<<<<<
 * 
 *     def clearCurrentPartialdecs(self):
*/
  try {
    __pyx_v_self->thisptr->clearAncestorPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 207, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":202
 *         self.thisptr.addVarPartition(cpp_partition)
 * 
 *     def clearAncestorPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears ancestor partialdec data structure
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.clearAncestorPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":209
 *         self.thisptr.clearAncestorPartialdecs()
 * 
 *     def clearCurrentPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears current partialdec data structure
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_49clearCurrentPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_48clearCurrentPartialdecs, "DetProbData.clearCurrentPartialdecs(self)\n\nclears current partialdec data structure\n\n.. note:: does not free the partialdecs themselves.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_49clearCurrentPartialdecs = {"clearCurrentPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_49clearCurrentPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_48clearCurrentPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_49clearCurrentPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clearCurrentPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clearCurrentPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clearCurrentPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_48clearCurrentPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_48clearCurrentPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("clearCurrentPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":214
 *         .. note:: does not free the partialdecs themselves.
 *         """
 *         self.thisptr.clearCurrentPartialdecs()             # <<<<<<<<<<<<<<
 * 
 *     def clearFinishedPartialdecs(self):
*/
  try {
    __pyx_v_self->thisptr->clearCurrentPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 214, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":209
 *         self.thisptr.clearAncestorPartialdecs()
 * 
 *     def clearCurrentPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears current partialdec data structure
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.clearCurrentPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":216
 *         self.thisptr.clearCurrentPartialdecs()
 * 
 *     def clearFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears finished partialdec data structure
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_51clearFinishedPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_50clearFinishedPartialdecs, "DetProbData.clearFinishedPartialdecs(self)\n\nclears finished partialdec data structure\n\n.. note:: does not free the partialdecs themselves.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_51clearFinishedPartialdecs = {"clearFinishedPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_51clearFinishedPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_50clearFinishedPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_51clearFinishedPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clearFinishedPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clearFinishedPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clearFinishedPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_50clearFinishedPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_50clearFinishedPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("clearFinishedPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":221
 *         .. note:: does not free the partialdecs themselves.
 *         """
 *         self.thisptr.clearFinishedPartialdecs()             # <<<<<<<<<<<<<<
 * 
 *     def createConssAdjacency(self):
*/
  try {
    __pyx_v_self->thisptr->clearFinishedPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 221, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":216
 *         self.thisptr.clearCurrentPartialdecs()
 * 
 *     def clearFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears finished partialdec data structure
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.clearFinishedPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":223
 *         self.thisptr.clearFinishedPartialdecs()
 * 
 *     def createConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """creates the constraint adjacency datastructure that is used (if created) for some methods to faster access the constarints that have variables in common
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_53createConssAdjacency(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_52createConssAdjacency, "DetProbData.createConssAdjacency(self)\n\ncreates the constraint adjacency datastructure that is used (if created) for some methods to faster access the constarints that have variables in common\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_53createConssAdjacency = {"createConssAdjacency", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_53createConssAdjacency, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_52createConssAdjacency};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_53createConssAdjacency(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("createConssAdjacency (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("createConssAdjacency", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("createConssAdjacency", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_52createConssAdjacency(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_52createConssAdjacency(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("createConssAdjacency", 0);

  /* "src/pygcgopt/detprobdata.pxi":226
 *         """creates the constraint adjacency datastructure that is used (if created) for some methods to faster access the constarints that have variables in common
 *         """
 *         self.thisptr.createConssAdjacency()             # <<<<<<<<<<<<<<
 * 
 *     def freeTemporaryData(self):
*/
  try {
    __pyx_v_self->thisptr->createConssAdjacency();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 226, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":223
 *         self.thisptr.clearFinishedPartialdecs()
 * 
 *     def createConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """creates the constraint adjacency datastructure that is used (if created) for some methods to faster access the constarints that have variables in common
 *         """
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.createConssAdjacency", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":228
 *         self.thisptr.createConssAdjacency()
 * 
 *     def freeTemporaryData(self):             # <<<<<<<<<<<<<<
 *         """frees temporary data that is only needed during the detection process
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_55freeTemporaryData(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_54freeTemporaryData, "DetProbData.freeTemporaryData(self)\n\nfrees temporary data that is only needed during the detection process\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_55freeTemporaryData = {"freeTemporaryData", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_55freeTemporaryData, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_54freeTemporaryData};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_55freeTemporaryData(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeTemporaryData (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("freeTemporaryData", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("freeTemporaryData", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_54freeTemporaryData(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_54freeTemporaryData(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("freeTemporaryData", 0);

  /* "src/pygcgopt/detprobdata.pxi":231
 *         """frees temporary data that is only needed during the detection process
 *         """
 *         self.thisptr.freeTemporaryData()             # <<<<<<<<<<<<<<
 * 
 *     def getAncestorPartialdec(self, partialdecindex):
*/
  try {
    __pyx_v_self->thisptr->freeTemporaryData();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 231, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":228
 *         self.thisptr.createConssAdjacency()
 * 
 *     def freeTemporaryData(self):             # <<<<<<<<<<<<<<
 *         """frees temporary data that is only needed during the detection process
 *         """
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.freeTemporaryData", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":233
 *         self.thisptr.freeTemporaryData()
 * 
 *     def getAncestorPartialdec(self, partialdecindex):             # <<<<<<<<<<<<<<
 *         """returns a partialdec from ancestor partialdec data structure with given index
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_57getAncestorPartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_56getAncestorPartialdec, "DetProbData.getAncestorPartialdec(self, partialdecindex)\n\nreturns a partialdec from ancestor partialdec data structure with given index\n\n:param partialdecindex: index of the partialdec\n:type partialdecindex: int\n:return: partialdec from ancestor partialdec\n:rtype: :class:`PartialDecomposition`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_57getAncestorPartialdec = {"getAncestorPartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_57getAncestorPartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_56getAncestorPartialdec};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_57getAncestorPartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_partialdecindex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getAncestorPartialdec (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdecindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 233, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 233, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getAncestorPartialdec", 0) < (0)) __PYX_ERR(9, 233, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getAncestorPartialdec", 1, 1, 1, i); __PYX_ERR(9, 233, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 233, __pyx_L3_error)
    }
    __pyx_v_partialdecindex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getAncestorPartialdec", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 233, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getAncestorPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_56getAncestorPartialdec(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partialdecindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_56getAncestorPartialdec(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_partialdecindex) {
  gcg::PARTIALDECOMP *__pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::PARTIALDECOMP *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getAncestorPartialdec", 0);

  /* "src/pygcgopt/detprobdata.pxi":241
 *         :rtype: :class:`PartialDecomposition`
 *         """
 *         cdef PARTIALDECOMP* result = self.thisptr.getAncestorPartialdec(partialdecindex)             # <<<<<<<<<<<<<<
 *         return PartialDecomposition.create(result)
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_partialdecindex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 241, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getAncestorPartialdec(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 241, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_2;

  /* "src/pygcgopt/detprobdata.pxi":242
 *         """
 *         cdef PARTIALDECOMP* result = self.thisptr.getAncestorPartialdec(partialdecindex)
 *         return PartialDecomposition.create(result)             # <<<<<<<<<<<<<<
 * 
 *     def getConsPartition(self, partitionIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(__pyx_v_result); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":233
 *         self.thisptr.freeTemporaryData()
 * 
 *     def getAncestorPartialdec(self, partialdecindex):             # <<<<<<<<<<<<<<
 *         """returns a partialdec from ancestor partialdec data structure with given index
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getAncestorPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":244
 *         return PartialDecomposition.create(result)
 * 
 *     def getConsPartition(self, partitionIndex):             # <<<<<<<<<<<<<<
 *         """returns a constraint partition
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_59getConsPartition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_58getConsPartition, "DetProbData.getConsPartition(self, partitionIndex)\n\nreturns a constraint partition\n\n:param partitionIndex: index of a constraint partition\n:type partitionIndex: int\n:return: constraint partition object\n:rtype: :class:`ConsPart`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_59getConsPartition = {"getConsPartition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_59getConsPartition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_58getConsPartition};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_59getConsPartition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_partitionIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getConsPartition (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partitionIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 244, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 244, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getConsPartition", 0) < (0)) __PYX_ERR(9, 244, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getConsPartition", 1, 1, 1, i); __PYX_ERR(9, 244, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 244, __pyx_L3_error)
    }
    __pyx_v_partitionIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getConsPartition", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 244, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getConsPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_58getConsPartition(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partitionIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_58getConsPartition(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_partitionIndex) {
  gcg::ConsPartition *__pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::ConsPartition *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getConsPartition", 0);

  /* "src/pygcgopt/detprobdata.pxi":252
 *         :rtype: :class:`ConsPart`
 *         """
 *         cdef ConsPartition* result = self.thisptr.getConsPartition(partitionIndex)             # <<<<<<<<<<<<<<
 *         return ConsPart.create(result, <DetProbData>weakref.proxy(self))
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_partitionIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 252, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getConsPartition(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 252, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_2;

  /* "src/pygcgopt/detprobdata.pxi":253
 *         """
 *         cdef ConsPartition* result = self.thisptr.getConsPartition(partitionIndex)
 *         return ConsPart.create(result, <DetProbData>weakref.proxy(self))             # <<<<<<<<<<<<<<
 * 
 *     def getConsPartitions(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_weakref); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_proxy); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_self)};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_6 = __pyx_f_8pygcgopt_3gcg_8ConsPart_create(__pyx_v_result, ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_t_3)); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":244
 *         return PartialDecomposition.create(result)
 * 
 *     def getConsPartition(self, partitionIndex):             # <<<<<<<<<<<<<<
 *         """returns a constraint partition
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getConsPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":255
 *         return ConsPart.create(result, <DetProbData>weakref.proxy(self))
 * 
 *     def getConsPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns list to stored constraint partitions
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_61getConsPartitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_60getConsPartitions, "DetProbData.getConsPartitions(self)\n\nreturns list to stored constraint partitions\n\n:return: list to stored constraint partitions\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_61getConsPartitions = {"getConsPartitions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_61getConsPartitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_60getConsPartitions};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_61getConsPartitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getConsPartitions (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getConsPartitions", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getConsPartitions", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_60getConsPartitions(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_60getConsPartitions(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_v_nconsparts = 0;
  PyObject *__pyx_9genexpr11__pyx_v_r = 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;
  size_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  gcg::ConsPartition *__pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getConsPartitions", 0);

  /* "src/pygcgopt/detprobdata.pxi":261
 *         :rtype: list
 *         """
 *         cdef nconsparts = self.thisptr.getNConsPartitions()             # <<<<<<<<<<<<<<
 *         return [ConsPart.create(self.thisptr.getConsPartition(r), self) for r in range(nconsparts)]
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNConsPartitions();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 261, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_nconsparts = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":262
 *         """
 *         cdef nconsparts = self.thisptr.getNConsPartitions()
 *         return [ConsPart.create(self.thisptr.getConsPartition(r), self) for r in range(nconsparts)]             # <<<<<<<<<<<<<<
 * 
 *     def getCons(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 262, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_nconsparts};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 262, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 262, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 262, __pyx_L5_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      {
        __pyx_t_3 = __pyx_t_6(__pyx_t_4);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(9, 262, __pyx_L5_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_9genexpr11__pyx_v_r, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_9genexpr11__pyx_v_r); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 262, __pyx_L5_error)
      try {
        __pyx_t_7 = __pyx_v_self->thisptr->getConsPartition(__pyx_t_1);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(9, 262, __pyx_L5_error)
      }
      __pyx_t_3 = __pyx_f_8pygcgopt_3gcg_8ConsPart_create(__pyx_t_7, __pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 262, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(9, 262, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_9genexpr11__pyx_v_r); __pyx_9genexpr11__pyx_v_r = 0;
    goto __pyx_L9_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr11__pyx_v_r); __pyx_9genexpr11__pyx_v_r = 0;
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":255
 *         return ConsPart.create(result, <DetProbData>weakref.proxy(self))
 * 
 *     def getConsPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns list to stored constraint partitions
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getConsPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_nconsparts);
  __Pyx_XDECREF(__pyx_9genexpr11__pyx_v_r);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":264
 *         return [ConsPart.create(self.thisptr.getConsPartition(r), self) for r in range(nconsparts)]
 * 
 *     def getCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns constraint related to a constraint index
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_63getCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_62getCons, "DetProbData.getCons(self, consIndex)\n\nreturns constraint related to a constraint index\n\n:param consIndex: index of a constraint\n:type consIndex: int\n:return: constraint related to a constraint index\n:rtype: :class:`Constraint`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_63getCons = {"getCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_63getCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_62getCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_63getCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 264, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 264, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getCons", 0) < (0)) __PYX_ERR(9, 264, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getCons", 1, 1, 1, i); __PYX_ERR(9, 264, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 264, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 264, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_62getCons(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_62getCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  SCIP_CONS *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getCons", 0);

  /* "src/pygcgopt/detprobdata.pxi":272
 *         :rtype: :class:`Constraint`
 *         """
 *         return Constraint.create(self.thisptr.getCons(consIndex))             # <<<<<<<<<<<<<<
 * 
 *     def getConssForCons(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 272, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getCons(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 272, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_vtabptr_9pyscipopt_4scip_Constraint->create(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":264
 *         return [ConsPart.create(self.thisptr.getConsPartition(r), self) for r in range(nconsparts)]
 * 
 *     def getCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns constraint related to a constraint index
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":274
 *         return Constraint.create(self.thisptr.getCons(consIndex))
 * 
 *     def getConssForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns list of constraint indices that have a common variable with the given constraint
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_65getConssForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_64getConssForCons, "DetProbData.getConssForCons(self, consIndex)\n\nreturns list of constraint indices that have a common variable with the given constraint\n\n.. note:: constraint adjacency data structure has to initilized\n\n:param consIndex: index of constraint\n:type consIndex: int\n:return: list of constraint indices that have a common variable with the given constraint\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_65getConssForCons = {"getConssForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_65getConssForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_64getConssForCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_65getConssForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getConssForCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 274, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 274, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getConssForCons", 0) < (0)) __PYX_ERR(9, 274, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getConssForCons", 1, 1, 1, i); __PYX_ERR(9, 274, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 274, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getConssForCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 274, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getConssForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_64getConssForCons(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_64getConssForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  std::vector<int>  __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getConssForCons", 0);

  /* "src/pygcgopt/detprobdata.pxi":284
 *         :rtype: list
 *         """
 *         return self.thisptr.getConssForCons(consIndex)             # <<<<<<<<<<<<<<
 * 
 *     def getConssForVar(self, varIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 284, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getConssForCons(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 284, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_convert_vector_to_py_int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":274
 *         return Constraint.create(self.thisptr.getCons(consIndex))
 * 
 *     def getConssForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns list of constraint indices that have a common variable with the given constraint
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getConssForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":286
 *         return self.thisptr.getConssForCons(consIndex)
 * 
 *     def getConssForVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns the constraint indices of the coefficient matrix for a variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_67getConssForVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_66getConssForVar, "DetProbData.getConssForVar(self, varIndex)\n\nreturns the constraint indices of the coefficient matrix for a variable\n\n:param varIndex: index of variable\n:type varIndex: int\n:return: list of constraint indices that have a nonzero entry with this variable\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_67getConssForVar = {"getConssForVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_67getConssForVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_66getConssForVar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_67getConssForVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_varIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getConssForVar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_varIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 286, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 286, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getConssForVar", 0) < (0)) __PYX_ERR(9, 286, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getConssForVar", 1, 1, 1, i); __PYX_ERR(9, 286, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 286, __pyx_L3_error)
    }
    __pyx_v_varIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getConssForVar", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 286, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getConssForVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_66getConssForVar(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_varIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_66getConssForVar(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_varIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  std::vector<int>  __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getConssForVar", 0);

  /* "src/pygcgopt/detprobdata.pxi":294
 *         :rtype: list
 *         """
 *         return self.thisptr.getConssForVar(varIndex)             # <<<<<<<<<<<<<<
 * 
 *     def getOpenPartialdecs(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_varIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 294, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getConssForVar(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 294, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_convert_vector_to_py_int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":286
 *         return self.thisptr.getConssForCons(consIndex)
 * 
 *     def getConssForVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns the constraint indices of the coefficient matrix for a variable
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getConssForVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":296
 *         return self.thisptr.getConssForVar(varIndex)
 * 
 *     def getOpenPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """determines all partialdecs from current (open) partialdec data structure
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_69getOpenPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_68getOpenPartialdecs, "DetProbData.getOpenPartialdecs(self)\n\ndetermines all partialdecs from current (open) partialdec data structure\n\n:return: all partialdecs in current (open) partialdec data structure\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_69getOpenPartialdecs = {"getOpenPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_69getOpenPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_68getOpenPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_69getOpenPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getOpenPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getOpenPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getOpenPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_68getOpenPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_68getOpenPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<gcg::PARTIALDECOMP *>  __pyx_v_result;
  gcg::PARTIALDECOMP *__pyx_9genexpr12__pyx_v_r;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<gcg::PARTIALDECOMP *>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<gcg::PARTIALDECOMP *> ::iterator __pyx_t_3;
  gcg::PARTIALDECOMP *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getOpenPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":302
 *         :rtype: list
 *         """
 *         cdef vector[PARTIALDECOMP*] result = self.thisptr.getOpenPartialdecs()             # <<<<<<<<<<<<<<
 *         return [PartialDecomposition.create(r) for r in result]
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getOpenPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 302, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":303
 *         """
 *         cdef vector[PARTIALDECOMP*] result = self.thisptr.getOpenPartialdecs()
 *         return [PartialDecomposition.create(r) for r in result]             # <<<<<<<<<<<<<<
 * 
 *     def getFinishedPartialdec(self, int partialdecindex):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_result.begin();
    for (; __pyx_t_3 != __pyx_v_result.end(); ++__pyx_t_3) {
      __pyx_t_4 = *__pyx_t_3;
      __pyx_9genexpr12__pyx_v_r = __pyx_t_4;
      __pyx_t_5 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(__pyx_9genexpr12__pyx_v_r); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 303, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 303, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":296
 *         return self.thisptr.getConssForVar(varIndex)
 * 
 *     def getOpenPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """determines all partialdecs from current (open) partialdec data structure
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getOpenPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":305
 *         return [PartialDecomposition.create(r) for r in result]
 * 
 *     def getFinishedPartialdec(self, int partialdecindex):             # <<<<<<<<<<<<<<
 *         """returns a partialdec from finished partialdec data structure
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_71getFinishedPartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_70getFinishedPartialdec, "DetProbData.getFinishedPartialdec(self, int partialdecindex)\n\nreturns a partialdec from finished partialdec data structure\n\n:param partialdecindex: index of partialdec\n:type partialdecindex: int\n:return: partialdec from finished partialdec data structure\n:rtype: :class:`PartialDecomposition`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_71getFinishedPartialdec = {"getFinishedPartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_71getFinishedPartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_70getFinishedPartialdec};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_71getFinishedPartialdec(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_partialdecindex;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getFinishedPartialdec (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdecindex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 305, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 305, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getFinishedPartialdec", 0) < (0)) __PYX_ERR(9, 305, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getFinishedPartialdec", 1, 1, 1, i); __PYX_ERR(9, 305, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 305, __pyx_L3_error)
    }
    __pyx_v_partialdecindex = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_partialdecindex == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 305, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getFinishedPartialdec", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 305, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getFinishedPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_70getFinishedPartialdec(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partialdecindex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_70getFinishedPartialdec(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, int __pyx_v_partialdecindex) {
  gcg::PARTIALDECOMP *__pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getFinishedPartialdec", 0);

  /* "src/pygcgopt/detprobdata.pxi":313
 *         :rtype: :class:`PartialDecomposition`
 *         """
 *         cdef PARTIALDECOMP* result = self.thisptr.getFinishedPartialdec(partialdecindex)             # <<<<<<<<<<<<<<
 *         return PartialDecomposition.create(result)
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getFinishedPartialdec(__pyx_v_partialdecindex);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 313, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":314
 *         """
 *         cdef PARTIALDECOMP* result = self.thisptr.getFinishedPartialdec(partialdecindex)
 *         return PartialDecomposition.create(result)             # <<<<<<<<<<<<<<
 * 
 *     def getFinishedPartialdecs(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(__pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 314, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":305
 *         return [PartialDecomposition.create(r) for r in result]
 * 
 *     def getFinishedPartialdec(self, int partialdecindex):             # <<<<<<<<<<<<<<
 *         """returns a partialdec from finished partialdec data structure
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getFinishedPartialdec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":316
 *         return PartialDecomposition.create(result)
 * 
 *     def getFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """gets all finished partialdecs
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_73getFinishedPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_72getFinishedPartialdecs, "DetProbData.getFinishedPartialdecs(self)\n\ngets all finished partialdecs\n\n:return: all finished partialdecs\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_73getFinishedPartialdecs = {"getFinishedPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_73getFinishedPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_72getFinishedPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_73getFinishedPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getFinishedPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getFinishedPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getFinishedPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_72getFinishedPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_72getFinishedPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<gcg::PARTIALDECOMP *>  __pyx_v_result;
  gcg::PARTIALDECOMP *__pyx_9genexpr13__pyx_v_r;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<gcg::PARTIALDECOMP *>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<gcg::PARTIALDECOMP *> ::iterator __pyx_t_3;
  gcg::PARTIALDECOMP *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getFinishedPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":322
 *         :rtype: list
 *         """
 *         cdef vector[PARTIALDECOMP*] result = self.thisptr.getFinishedPartialdecs()             # <<<<<<<<<<<<<<
 *         return [PartialDecomposition.create(r) for r in result]
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getFinishedPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 322, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":323
 *         """
 *         cdef vector[PARTIALDECOMP*] result = self.thisptr.getFinishedPartialdecs()
 *         return [PartialDecomposition.create(r) for r in result]             # <<<<<<<<<<<<<<
 * 
 *     def getIndexForCons(self, Constraint cons):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_result.begin();
    for (; __pyx_t_3 != __pyx_v_result.end(); ++__pyx_t_3) {
      __pyx_t_4 = *__pyx_t_3;
      __pyx_9genexpr13__pyx_v_r = __pyx_t_4;
      __pyx_t_5 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(__pyx_9genexpr13__pyx_v_r); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 323, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 323, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":316
 *         return PartialDecomposition.create(result)
 * 
 *     def getFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """gets all finished partialdecs
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getFinishedPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":325
 *         return [PartialDecomposition.create(r) for r in result]
 * 
 *     def getIndexForCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the constraint index related to a constraint
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_75getIndexForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_74getIndexForCons, "DetProbData.getIndexForCons(self, Constraint cons)\n\nreturns the constraint index related to a constraint\n\n:param cons: constraint the index is asked for\n:type cons: :class:`Constraint`\n:return: the constraint index related to constraint\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_75getIndexForCons = {"getIndexForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_75getIndexForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_74getIndexForCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_75getIndexForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getIndexForCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cons,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 325, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getIndexForCons", 0) < (0)) __PYX_ERR(9, 325, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getIndexForCons", 1, 1, 1, i); __PYX_ERR(9, 325, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 325, __pyx_L3_error)
    }
    __pyx_v_cons = ((struct __pyx_obj_9pyscipopt_4scip_Constraint *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getIndexForCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 325, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getIndexForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cons), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Constraint, 1, "cons", 0))) __PYX_ERR(9, 325, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_74getIndexForCons(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_cons);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_74getIndexForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Constraint *__pyx_v_cons) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getIndexForCons", 0);

  /* "src/pygcgopt/detprobdata.pxi":333
 *         :rtype: int
 *         """
 *         return self.thisptr.getIndexForCons(cons.scip_cons)             # <<<<<<<<<<<<<<
 * 
 *     def getIndexForVar(self, Variable var):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getIndexForCons(__pyx_v_cons->scip_cons);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 333, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":325
 *         return [PartialDecomposition.create(r) for r in result]
 * 
 *     def getIndexForCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the constraint index related to a constraint
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getIndexForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":335
 *         return self.thisptr.getIndexForCons(cons.scip_cons)
 * 
 *     def getIndexForVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the variable index related to a variable
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_77getIndexForVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_76getIndexForVar, "DetProbData.getIndexForVar(self, Variable var)\n\nreturns the variable index related to a variable\n\n:param var: variable the index is asked for\n:type var: :class:`Variable`\n:return: the variable index related to variable\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_77getIndexForVar = {"getIndexForVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_77getIndexForVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_76getIndexForVar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_77getIndexForVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getIndexForVar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 335, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 335, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getIndexForVar", 0) < (0)) __PYX_ERR(9, 335, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getIndexForVar", 1, 1, 1, i); __PYX_ERR(9, 335, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 335, __pyx_L3_error)
    }
    __pyx_v_var = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getIndexForVar", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 335, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getIndexForVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Variable, 1, "var", 0))) __PYX_ERR(9, 335, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_76getIndexForVar(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_76getIndexForVar(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_var) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getIndexForVar", 0);

  /* "src/pygcgopt/detprobdata.pxi":343
 *         :rtype: int
 *         """
 *         return self.thisptr.getIndexForVar(var.scip_var)             # <<<<<<<<<<<<<<
 * 
 *     def getNAncestorPartialdecs(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getIndexForVar(__pyx_v_var->scip_var);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 343, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":335
 *         return self.thisptr.getIndexForCons(cons.scip_cons)
 * 
 *     def getIndexForVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the variable index related to a variable
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getIndexForVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":345
 *         return self.thisptr.getIndexForVar(var.scip_var)
 * 
 *     def getNAncestorPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns size of ancestor partialdec data structure
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_79getNAncestorPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_78getNAncestorPartialdecs, "DetProbData.getNAncestorPartialdecs(self)\n\nreturns size of ancestor partialdec data structure\n\n:return: size of ancestor partialdec data structure\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_79getNAncestorPartialdecs = {"getNAncestorPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_79getNAncestorPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_78getNAncestorPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_79getNAncestorPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNAncestorPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNAncestorPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNAncestorPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_78getNAncestorPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_78getNAncestorPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNAncestorPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":351
 *         :rtype: int
 *         """
 *         return self.thisptr.getNAncestorPartialdecs()             # <<<<<<<<<<<<<<
 * 
 *     def getNConsPartitions(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNAncestorPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 351, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":345
 *         return self.thisptr.getIndexForVar(var.scip_var)
 * 
 *     def getNAncestorPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns size of ancestor partialdec data structure
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNAncestorPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":353
 *         return self.thisptr.getNAncestorPartialdecs()
 * 
 *     def getNConsPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns number of different constraint partitions
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_81getNConsPartitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_80getNConsPartitions, "DetProbData.getNConsPartitions(self)\n\nreturns number of different constraint partitions\n\n:return: number of different constraint partitions\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_81getNConsPartitions = {"getNConsPartitions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_81getNConsPartitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_80getNConsPartitions};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_81getNConsPartitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConsPartitions (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNConsPartitions", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNConsPartitions", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_80getNConsPartitions(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_80getNConsPartitions(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNConsPartitions", 0);

  /* "src/pygcgopt/detprobdata.pxi":359
 *         :rtype: int
 *         """
 *         return self.thisptr.getNConsPartitions()             # <<<<<<<<<<<<<<
 * 
 *     def getNConss(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNConsPartitions();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 359, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":353
 *         return self.thisptr.getNAncestorPartialdecs()
 * 
 *     def getNConsPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns number of different constraint partitions
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNConsPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":361
 *         return self.thisptr.getNConsPartitions()
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """returns the number of variables considered in the detprobdata
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_83getNConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_82getNConss, "DetProbData.getNConss(self)\n\nreturns the number of variables considered in the detprobdata\n\n:return: number of variables considered in the detprobdata\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_83getNConss = {"getNConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_83getNConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_82getNConss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_83getNConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNConss", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNConss", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_82getNConss(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_82getNConss(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNConss", 0);

  /* "src/pygcgopt/detprobdata.pxi":367
 *         :rtype: int
 *         """
 *         return self.thisptr.getNConss()             # <<<<<<<<<<<<<<
 * 
 *     def getNConssForCons(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNConss();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 367, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":361
 *         return self.thisptr.getNConsPartitions()
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """returns the number of variables considered in the detprobdata
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNConss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":369
 *         return self.thisptr.getNConss()
 * 
 *     def getNConssForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints for a given constraint index
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_85getNConssForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_84getNConssForCons, "DetProbData.getNConssForCons(self, consIndex)\n\nreturns the number of constraints for a given constraint index\n\n:param consIndex: index of constraint\n:type consIndex: int\n:return: the number of constraints for a given constraint index\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_85getNConssForCons = {"getNConssForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_85getNConssForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_84getNConssForCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_85getNConssForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConssForCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 369, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 369, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getNConssForCons", 0) < (0)) __PYX_ERR(9, 369, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getNConssForCons", 1, 1, 1, i); __PYX_ERR(9, 369, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 369, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getNConssForCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 369, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNConssForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_84getNConssForCons(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_84getNConssForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNConssForCons", 0);

  /* "src/pygcgopt/detprobdata.pxi":377
 *         :rtype: int
 *         """
 *         return self.thisptr.getNConssForCons(consIndex)             # <<<<<<<<<<<<<<
 * 
 *     def getNConssForVar(self, varIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 377, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getNConssForCons(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 377, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":369
 *         return self.thisptr.getNConss()
 * 
 *     def getNConssForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints for a given constraint index
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNConssForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":379
 *         return self.thisptr.getNConssForCons(consIndex)
 * 
 *     def getNConssForVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints for a given variable index where the variable has a nonzero entry in
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_87getNConssForVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_86getNConssForVar, "DetProbData.getNConssForVar(self, varIndex)\n\nreturns the number of constraints for a given variable index where the variable has a nonzero entry in\n\n:param varIndex: index of variable\n:type varIndex: int\n:return: the number of constraints for a given variable\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_87getNConssForVar = {"getNConssForVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_87getNConssForVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_86getNConssForVar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_87getNConssForVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_varIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConssForVar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_varIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 379, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 379, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getNConssForVar", 0) < (0)) __PYX_ERR(9, 379, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getNConssForVar", 1, 1, 1, i); __PYX_ERR(9, 379, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 379, __pyx_L3_error)
    }
    __pyx_v_varIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getNConssForVar", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 379, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNConssForVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_86getNConssForVar(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_varIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_86getNConssForVar(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_varIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNConssForVar", 0);

  /* "src/pygcgopt/detprobdata.pxi":387
 *         :rtype: int
 *         """
 *         return self.thisptr.getNConssForVar(varIndex)             # <<<<<<<<<<<<<<
 * 
 *     def getNOpenPartialdecs(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_varIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 387, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getNConssForVar(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 387, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":379
 *         return self.thisptr.getNConssForCons(consIndex)
 * 
 *     def getNConssForVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints for a given variable index where the variable has a nonzero entry in
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNConssForVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":389
 *         return self.thisptr.getNConssForVar(varIndex)
 * 
 *     def getNOpenPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns size of current (open) partialdec data structure
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_89getNOpenPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_88getNOpenPartialdecs, "DetProbData.getNOpenPartialdecs(self)\n\nreturns size of current (open) partialdec data structure\n\n:return: size of current (open) partialdec data structure\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_89getNOpenPartialdecs = {"getNOpenPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_89getNOpenPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_88getNOpenPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_89getNOpenPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNOpenPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNOpenPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNOpenPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_88getNOpenPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_88getNOpenPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNOpenPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":395
 *         :rtype: int
 *         """
 *         return self.thisptr.getNOpenPartialdecs()             # <<<<<<<<<<<<<<
 * 
 *     def getNFinishedPartialdecs(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNOpenPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 395, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":389
 *         return self.thisptr.getNConssForVar(varIndex)
 * 
 *     def getNOpenPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns size of current (open) partialdec data structure
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNOpenPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":397
 *         return self.thisptr.getNOpenPartialdecs()
 * 
 *     def getNFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """size of finished partialdec data structure
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_91getNFinishedPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_90getNFinishedPartialdecs, "DetProbData.getNFinishedPartialdecs(self)\n\nsize of finished partialdec data structure\n\n:return: size of finished partialdec data structure\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_91getNFinishedPartialdecs = {"getNFinishedPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_91getNFinishedPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_90getNFinishedPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_91getNFinishedPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNFinishedPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNFinishedPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNFinishedPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_90getNFinishedPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_90getNFinishedPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNFinishedPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":403
 *         :rtype: int
 *         """
 *         return self.thisptr.getNFinishedPartialdecs()             # <<<<<<<<<<<<<<
 * 
 *     def getNPartialdecs(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNFinishedPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 403, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":397
 *         return self.thisptr.getNOpenPartialdecs()
 * 
 *     def getNFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """size of finished partialdec data structure
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNFinishedPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":405
 *         return self.thisptr.getNFinishedPartialdecs()
 * 
 *     def getNPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns the number of stored partialdecs
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_93getNPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_92getNPartialdecs, "DetProbData.getNPartialdecs(self)\n\nreturns the number of stored partialdecs\n\n:return: number of stored partialdecs\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_93getNPartialdecs = {"getNPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_93getNPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_92getNPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_93getNPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNPartialdecs", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNPartialdecs", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_92getNPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_92getNPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":411
 *         :rtype: int
 *         """
 *         return self.thisptr.getNPartialdecs()             # <<<<<<<<<<<<<<
 * 
 *     def getNNonzeros(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNPartialdecs();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 411, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":405
 *         return self.thisptr.getNFinishedPartialdecs()
 * 
 *     def getNPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns the number of stored partialdecs
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":413
 *         return self.thisptr.getNPartialdecs()
 * 
 *     def getNNonzeros(self):             # <<<<<<<<<<<<<<
 *         """returns the number of nonzero entries in the coefficient matrix
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_95getNNonzeros(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_94getNNonzeros, "DetProbData.getNNonzeros(self)\n\nreturns the number of nonzero entries in the coefficient matrix\n\n:return: the number of nonzero entries in the coefficient matrix\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_95getNNonzeros = {"getNNonzeros", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_95getNNonzeros, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_94getNNonzeros};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_95getNNonzeros(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNNonzeros (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNNonzeros", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNNonzeros", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_94getNNonzeros(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_94getNNonzeros(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNNonzeros", 0);

  /* "src/pygcgopt/detprobdata.pxi":419
 *         :rtype: int
 *         """
 *         return self.thisptr.getNNonzeros()             # <<<<<<<<<<<<<<
 * 
 *     def getNVarPartitions(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNNonzeros();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 419, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":413
 *         return self.thisptr.getNPartialdecs()
 * 
 *     def getNNonzeros(self):             # <<<<<<<<<<<<<<
 *         """returns the number of nonzero entries in the coefficient matrix
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNNonzeros", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":421
 *         return self.thisptr.getNNonzeros()
 * 
 *     def getNVarPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns number of different variable partitions
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_97getNVarPartitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_96getNVarPartitions, "DetProbData.getNVarPartitions(self)\n\nreturns number of different variable partitions\n\n:return: number of different variable partitions\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_97getNVarPartitions = {"getNVarPartitions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_97getNVarPartitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_96getNVarPartitions};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_97getNVarPartitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVarPartitions (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNVarPartitions", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNVarPartitions", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_96getNVarPartitions(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_96getNVarPartitions(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNVarPartitions", 0);

  /* "src/pygcgopt/detprobdata.pxi":427
 *         :rtype: int
 *         """
 *         return self.thisptr.getNVarPartitions()             # <<<<<<<<<<<<<<
 * 
 *     def getNVars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNVarPartitions();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 427, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":421
 *         return self.thisptr.getNNonzeros()
 * 
 *     def getNVarPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns number of different variable partitions
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNVarPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":429
 *         return self.thisptr.getNVarPartitions()
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """return the number of variables considered in the detprobdata
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_99getNVars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_98getNVars, "DetProbData.getNVars(self)\n\nreturn the number of variables considered in the detprobdata\n\n:return: the number of variables considered in the detprobdata\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_99getNVars = {"getNVars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_99getNVars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_98getNVars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_99getNVars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNVars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNVars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_98getNVars(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_98getNVars(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNVars", 0);

  /* "src/pygcgopt/detprobdata.pxi":435
 *         :rtype: int
 *         """
 *         return self.thisptr.getNVars()             # <<<<<<<<<<<<<<
 * 
 *     def getNVarsForCons(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getNVars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 435, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":429
 *         return self.thisptr.getNVarPartitions()
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """return the number of variables considered in the detprobdata
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNVars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":437
 *         return self.thisptr.getNVars()
 * 
 *     def getNVarsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of variables for a given constraint
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_101getNVarsForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_100getNVarsForCons, "DetProbData.getNVarsForCons(self, consIndex)\n\nreturns the number of variables for a given constraint\n\n:param consIndex: index of constraint\n:type consIndex: int\n:return: the number of variables for a given constraint\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_101getNVarsForCons = {"getNVarsForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_101getNVarsForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_100getNVarsForCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_101getNVarsForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVarsForCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 437, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 437, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getNVarsForCons", 0) < (0)) __PYX_ERR(9, 437, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getNVarsForCons", 1, 1, 1, i); __PYX_ERR(9, 437, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 437, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getNVarsForCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 437, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNVarsForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_100getNVarsForCons(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_100getNVarsForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getNVarsForCons", 0);

  /* "src/pygcgopt/detprobdata.pxi":445
 *         :rtype: int
 *         """
 *         return self.thisptr.getNVarsForCons(consIndex)             # <<<<<<<<<<<<<<
 * 
 *     def getOrigVarsFixedZero(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 445, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getNVarsForCons(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 445, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":437
 *         return self.thisptr.getNVars()
 * 
 *     def getNVarsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of variables for a given constraint
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getNVarsForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":447
 *         return self.thisptr.getNVarsForCons(consIndex)
 * 
 *     def getOrigVarsFixedZero(self):             # <<<<<<<<<<<<<<
 *         """returns list of all original variables that are fixed to zero
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_103getOrigVarsFixedZero(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_102getOrigVarsFixedZero, "DetProbData.getOrigVarsFixedZero(self)\n\nreturns list of all original variables that are fixed to zero\n\n:return: list of variables\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_103getOrigVarsFixedZero = {"getOrigVarsFixedZero", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_103getOrigVarsFixedZero, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_102getOrigVarsFixedZero};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_103getOrigVarsFixedZero(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getOrigVarsFixedZero (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getOrigVarsFixedZero", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getOrigVarsFixedZero", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_102getOrigVarsFixedZero(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_102getOrigVarsFixedZero(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<SCIP_VAR *>  __pyx_v_result;
  SCIP_VAR *__pyx_9genexpr14__pyx_v_v;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<SCIP_VAR *>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<SCIP_VAR *> ::iterator __pyx_t_3;
  SCIP_VAR *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getOrigVarsFixedZero", 0);

  /* "src/pygcgopt/detprobdata.pxi":453
 *         :rtype: list
 *         """
 *         cdef vector[SCIP_VAR*] result = self.thisptr.getOrigVarsFixedZero()             # <<<<<<<<<<<<<<
 *         return [Variable.create(v) for v in result]
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getOrigVarsFixedZero();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 453, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":454
 *         """
 *         cdef vector[SCIP_VAR*] result = self.thisptr.getOrigVarsFixedZero()
 *         return [Variable.create(v) for v in result]             # <<<<<<<<<<<<<<
 * 
 *     def getRelevantConss(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 454, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_result.begin();
    for (; __pyx_t_3 != __pyx_v_result.end(); ++__pyx_t_3) {
      __pyx_t_4 = *__pyx_t_3;
      __pyx_9genexpr14__pyx_v_v = __pyx_t_4;
      __pyx_t_5 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create(__pyx_9genexpr14__pyx_v_v); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 454, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 454, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":447
 *         return self.thisptr.getNVarsForCons(consIndex)
 * 
 *     def getOrigVarsFixedZero(self):             # <<<<<<<<<<<<<<
 *         """returns list of all original variables that are fixed to zero
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getOrigVarsFixedZero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":456
 *         return [Variable.create(v) for v in result]
 * 
 *     def getRelevantConss(self):             # <<<<<<<<<<<<<<
 *         """returns list of all constraints that are not marked as deleted or obsolete
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_105getRelevantConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_104getRelevantConss, "DetProbData.getRelevantConss(self)\n\nreturns list of all constraints that are not marked as deleted or obsolete\n\n:return: list of constraints\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_105getRelevantConss = {"getRelevantConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_105getRelevantConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_104getRelevantConss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_105getRelevantConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getRelevantConss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getRelevantConss", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getRelevantConss", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_104getRelevantConss(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_104getRelevantConss(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<SCIP_CONS *>  __pyx_v_result;
  SCIP_CONS *__pyx_9genexpr15__pyx_v_c;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<SCIP_CONS *>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<SCIP_CONS *> ::iterator __pyx_t_3;
  SCIP_CONS *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getRelevantConss", 0);

  /* "src/pygcgopt/detprobdata.pxi":462
 *         :rtype: list
 *         """
 *         cdef vector[SCIP_CONS*] result = self.thisptr.getRelevantConss()             # <<<<<<<<<<<<<<
 *         return [Constraint.create(c) for c in result]
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getRelevantConss();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 462, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":463
 *         """
 *         cdef vector[SCIP_CONS*] result = self.thisptr.getRelevantConss()
 *         return [Constraint.create(c) for c in result]             # <<<<<<<<<<<<<<
 * 
 *     def getRelevantVars(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 463, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_result.begin();
    for (; __pyx_t_3 != __pyx_v_result.end(); ++__pyx_t_3) {
      __pyx_t_4 = *__pyx_t_3;
      __pyx_9genexpr15__pyx_v_c = __pyx_t_4;
      __pyx_t_5 = __pyx_vtabptr_9pyscipopt_4scip_Constraint->create(__pyx_9genexpr15__pyx_v_c); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 463, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 463, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":456
 *         return [Variable.create(v) for v in result]
 * 
 *     def getRelevantConss(self):             # <<<<<<<<<<<<<<
 *         """returns list of all constraints that are not marked as deleted or obsolete
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getRelevantConss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":465
 *         return [Constraint.create(c) for c in result]
 * 
 *     def getRelevantVars(self):             # <<<<<<<<<<<<<<
 *         """returns list of all problem variables that are not fixed to 0
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_107getRelevantVars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_106getRelevantVars, "DetProbData.getRelevantVars(self)\n\nreturns list of all problem variables that are not fixed to 0\n\n:return: list of variables\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_107getRelevantVars = {"getRelevantVars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_107getRelevantVars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_106getRelevantVars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_107getRelevantVars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getRelevantVars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getRelevantVars", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getRelevantVars", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_106getRelevantVars(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_106getRelevantVars(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<SCIP_VAR *>  __pyx_v_result;
  SCIP_VAR *__pyx_9genexpr16__pyx_v_v;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<SCIP_VAR *>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<SCIP_VAR *> ::iterator __pyx_t_3;
  SCIP_VAR *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getRelevantVars", 0);

  /* "src/pygcgopt/detprobdata.pxi":471
 *         :rtype: list
 *         """
 *         cdef vector[SCIP_VAR *] result = self.thisptr.getRelevantVars()             # <<<<<<<<<<<<<<
 *         return [Variable.create(v) for v in result]
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getRelevantVars();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 471, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":472
 *         """
 *         cdef vector[SCIP_VAR *] result = self.thisptr.getRelevantVars()
 *         return [Variable.create(v) for v in result]             # <<<<<<<<<<<<<<
 * 
 * #    def getModel(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_result.begin();
    for (; __pyx_t_3 != __pyx_v_result.end(); ++__pyx_t_3) {
      __pyx_t_4 = *__pyx_t_3;
      __pyx_9genexpr16__pyx_v_v = __pyx_t_4;
      __pyx_t_5 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create(__pyx_9genexpr16__pyx_v_v); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 472, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 472, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":465
 *         return [Constraint.create(c) for c in result]
 * 
 *     def getRelevantVars(self):             # <<<<<<<<<<<<<<
 *         """returns list of all problem variables that are not fixed to 0
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getRelevantVars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":483
 * #        return SCIPModel.create(gcg)
 * 
 *     def getSortedCandidatesNBlocks(self, object candidates):             # <<<<<<<<<<<<<<
 *         """gets the candidates for number of blocks added by the user followed by the found ones sorted in descending order by how often a candidate was proposed
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_109getSortedCandidatesNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_108getSortedCandidatesNBlocks, "DetProbData.getSortedCandidatesNBlocks(self, candidates)\n\ngets the candidates for number of blocks added by the user followed by the found ones sorted in descending order by how often a candidate was proposed\n\n:param candidates: will contain the candidates for number of blocks sorted in descending order by how often a candidate was added\n:type candidates: object");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_109getSortedCandidatesNBlocks = {"getSortedCandidatesNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_109getSortedCandidatesNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_108getSortedCandidatesNBlocks};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_109getSortedCandidatesNBlocks(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_candidates = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getSortedCandidatesNBlocks (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_candidates,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 483, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 483, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getSortedCandidatesNBlocks", 0) < (0)) __PYX_ERR(9, 483, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getSortedCandidatesNBlocks", 1, 1, 1, i); __PYX_ERR(9, 483, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 483, __pyx_L3_error)
    }
    __pyx_v_candidates = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getSortedCandidatesNBlocks", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 483, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getSortedCandidatesNBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_108getSortedCandidatesNBlocks(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_candidates);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_108getSortedCandidatesNBlocks(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_candidates) {
  std::vector<int>  __pyx_v_cpp_candidates;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<int>  __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getSortedCandidatesNBlocks", 0);

  /* "src/pygcgopt/detprobdata.pxi":489
 *         :type candidates: object
 *         """
 *         cdef vector[int] cpp_candidates = candidates             # <<<<<<<<<<<<<<
 *         self.thisptr.getSortedCandidatesNBlocks(cpp_candidates)
 * 
*/
  __pyx_t_1 = __pyx_convert_vector_from_py_int(__pyx_v_candidates); if (unlikely(PyErr_Occurred())) __PYX_ERR(9, 489, __pyx_L1_error)
  __pyx_v_cpp_candidates = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":490
 *         """
 *         cdef vector[int] cpp_candidates = candidates
 *         self.thisptr.getSortedCandidatesNBlocks(cpp_candidates)             # <<<<<<<<<<<<<<
 * 
 *     def getVal(self, row, col):
*/
  try {
    __pyx_v_self->thisptr->getSortedCandidatesNBlocks(__pyx_v_cpp_candidates);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 490, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":483
 * #        return SCIPModel.create(gcg)
 * 
 *     def getSortedCandidatesNBlocks(self, object candidates):             # <<<<<<<<<<<<<<
 *         """gets the candidates for number of blocks added by the user followed by the found ones sorted in descending order by how often a candidate was proposed
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getSortedCandidatesNBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":492
 *         self.thisptr.getSortedCandidatesNBlocks(cpp_candidates)
 * 
 *     def getVal(self, row, col):             # <<<<<<<<<<<<<<
 *         """returns a coefficient from the coefficient matrix
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_111getVal(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_110getVal, "DetProbData.getVal(self, row, col)\n\nreturns a coefficient from the coefficient matrix\n\n:param row: index of the constraint to be considered\n:type row: int\n:param col: index of the variable to be considered\n:type col: int\n:return: a coefficient from the coefficient matrix\n:rtype: double");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_111getVal = {"getVal", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_111getVal, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_110getVal};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_111getVal(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_row = 0;
  PyObject *__pyx_v_col = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getVal (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_row,&__pyx_mstate_global->__pyx_n_u_col,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 492, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 492, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 492, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getVal", 0) < (0)) __PYX_ERR(9, 492, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getVal", 1, 2, 2, i); __PYX_ERR(9, 492, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 492, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 492, __pyx_L3_error)
    }
    __pyx_v_row = values[0];
    __pyx_v_col = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getVal", 1, 2, 2, __pyx_nargs); __PYX_ERR(9, 492, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_110getVal(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_row, __pyx_v_col);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_110getVal(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_row, PyObject *__pyx_v_col) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  SCIP_Real __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getVal", 0);

  /* "src/pygcgopt/detprobdata.pxi":502
 *         :rtype: double
 *         """
 *         return self.thisptr.getVal(row, col)             # <<<<<<<<<<<<<<
 * 
 *     def getValsForCons(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_row); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 502, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_As_int(__pyx_v_col); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 502, __pyx_L1_error)
  try {
    __pyx_t_3 = __pyx_v_self->thisptr->getVal(__pyx_t_1, __pyx_t_2);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 502, __pyx_L1_error)
  }
  __pyx_t_4 = PyFloat_FromDouble(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":492
 *         self.thisptr.getSortedCandidatesNBlocks(cpp_candidates)
 * 
 *     def getVal(self, row, col):             # <<<<<<<<<<<<<<
 *         """returns a coefficient from the coefficient matrix
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":504
 *         return self.thisptr.getVal(row, col)
 * 
 *     def getValsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the nonzero coefficients of the coefficient matrix for a constraint
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_113getValsForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_112getValsForCons, "DetProbData.getValsForCons(self, consIndex)\n\nreturns the nonzero coefficients of the coefficient matrix for a constraint\n\n.. note:: same order as in :meth:`getVarsForCons`\n\n:param consIndex: index of constraint\n:type consIndex: int\n:return: list of coefficients of in matrix for constraints\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_113getValsForCons = {"getValsForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_113getValsForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_112getValsForCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_113getValsForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getValsForCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 504, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 504, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getValsForCons", 0) < (0)) __PYX_ERR(9, 504, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getValsForCons", 1, 1, 1, i); __PYX_ERR(9, 504, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 504, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getValsForCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 504, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getValsForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_112getValsForCons(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_112getValsForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  std::vector<SCIP_Real>  __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getValsForCons", 0);

  /* "src/pygcgopt/detprobdata.pxi":514
 *         :rtype: list
 *         """
 *         return self.thisptr.getValsForCons(consIndex)             # <<<<<<<<<<<<<<
 * 
 *     def getVarPartition(self, partitionIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 514, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getValsForCons(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 514, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_convert_vector_to_py_SCIP_Real(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":504
 *         return self.thisptr.getVal(row, col)
 * 
 *     def getValsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the nonzero coefficients of the coefficient matrix for a constraint
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getValsForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":516
 *         return self.thisptr.getValsForCons(consIndex)
 * 
 *     def getVarPartition(self, partitionIndex):             # <<<<<<<<<<<<<<
 *         """returns variable partition with given index
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_115getVarPartition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_114getVarPartition, "DetProbData.getVarPartition(self, partitionIndex)\n\nreturns variable partition with given index\n\n:param partitionIndex: index of variable partition\n:type partitionIndex: int\n:return: variable partition with given index\n:rtype: :class:`VarPart`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_115getVarPartition = {"getVarPartition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_115getVarPartition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_114getVarPartition};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_115getVarPartition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_partitionIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getVarPartition (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partitionIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 516, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 516, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getVarPartition", 0) < (0)) __PYX_ERR(9, 516, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getVarPartition", 1, 1, 1, i); __PYX_ERR(9, 516, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 516, __pyx_L3_error)
    }
    __pyx_v_partitionIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getVarPartition", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 516, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVarPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_114getVarPartition(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partitionIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_114getVarPartition(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_partitionIndex) {
  gcg::VarPartition *__pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  gcg::VarPartition *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getVarPartition", 0);

  /* "src/pygcgopt/detprobdata.pxi":524
 *         :rtype: :class:`VarPart`
 *         """
 *         cdef VarPartition* result = self.thisptr.getVarPartition(partitionIndex)             # <<<<<<<<<<<<<<
 *         return VarPart.create(result, self)
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_partitionIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 524, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getVarPartition(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 524, __pyx_L1_error)
  }
  __pyx_v_result = __pyx_t_2;

  /* "src/pygcgopt/detprobdata.pxi":525
 *         """
 *         cdef VarPartition* result = self.thisptr.getVarPartition(partitionIndex)
 *         return VarPart.create(result, self)             # <<<<<<<<<<<<<<
 * 
 *     def getVarPartitions(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_8pygcgopt_3gcg_7VarPart_create(__pyx_v_result, __pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":516
 *         return self.thisptr.getValsForCons(consIndex)
 * 
 *     def getVarPartition(self, partitionIndex):             # <<<<<<<<<<<<<<
 *         """returns variable partition with given index
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVarPartition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":527
 *         return VarPart.create(result, self)
 * 
 *     def getVarPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns list to stored variable partitions
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_117getVarPartitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_116getVarPartitions, "DetProbData.getVarPartitions(self)\n\nreturns list to stored variable partitions\n\n:return: list to stored variable partitions\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_117getVarPartitions = {"getVarPartitions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_117getVarPartitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_116getVarPartitions};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_117getVarPartitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getVarPartitions (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getVarPartitions", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getVarPartitions", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_116getVarPartitions(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_116getVarPartitions(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  std::vector<gcg::VarPartition *>  __pyx_v_result;
  gcg::VarPartition *__pyx_9genexpr17__pyx_v_r;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<gcg::VarPartition *>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<gcg::VarPartition *> ::iterator __pyx_t_3;
  gcg::VarPartition *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getVarPartitions", 0);

  /* "src/pygcgopt/detprobdata.pxi":533
 *         :rtype: list
 *         """
 *         cdef vector[VarPartition*] result = self.thisptr.getVarPartitions()             # <<<<<<<<<<<<<<
 *         return [VarPart.create(r, self) for r in result]
 * 
*/
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->getVarPartitions();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 533, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "src/pygcgopt/detprobdata.pxi":534
 *         """
 *         cdef vector[VarPartition*] result = self.thisptr.getVarPartitions()
 *         return [VarPart.create(r, self) for r in result]             # <<<<<<<<<<<<<<
 * 
 *     def getVar(self, varIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_result.begin();
    for (; __pyx_t_3 != __pyx_v_result.end(); ++__pyx_t_3) {
      __pyx_t_4 = *__pyx_t_3;
      __pyx_9genexpr17__pyx_v_r = __pyx_t_4;
      __pyx_t_5 = __pyx_f_8pygcgopt_3gcg_7VarPart_create(__pyx_9genexpr17__pyx_v_r, __pyx_v_self); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 534, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":527
 *         return VarPart.create(result, self)
 * 
 *     def getVarPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns list to stored variable partitions
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVarPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":536
 *         return [VarPart.create(r, self) for r in result]
 * 
 *     def getVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns variable related to a variable index
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_119getVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_118getVar, "DetProbData.getVar(self, varIndex)\n\nreturns variable related to a variable index\n\n:return: variable related to a variable index\n:rtype: :class:`Variable`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_119getVar = {"getVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_119getVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_118getVar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_119getVar(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_varIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getVar (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_varIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 536, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getVar", 0) < (0)) __PYX_ERR(9, 536, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getVar", 1, 1, 1, i); __PYX_ERR(9, 536, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 536, __pyx_L3_error)
    }
    __pyx_v_varIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getVar", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 536, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_118getVar(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_varIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_118getVar(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_varIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  SCIP_VAR *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getVar", 0);

  /* "src/pygcgopt/detprobdata.pxi":542
 *         :rtype: :class:`Variable`
 *         """
 *         return Variable.create(self.thisptr.getVar(varIndex))             # <<<<<<<<<<<<<<
 * 
 *     def getVarsForCons(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_varIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 542, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getVar(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 542, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 542, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":536
 *         return [VarPart.create(r, self) for r in result]
 * 
 *     def getVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns variable related to a variable index
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":544
 *         return Variable.create(self.thisptr.getVar(varIndex))
 * 
 *     def getVarsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the variable indices of the coefficient matrix for a constraint
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_121getVarsForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_120getVarsForCons, "DetProbData.getVarsForCons(self, consIndex)\n\nreturns the variable indices of the coefficient matrix for a constraint\n\n:param consIndex: index of constraint\n:type consIndex: int\n:return: list of the variable indices of the coefficient matrix for a constraint\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_121getVarsForCons = {"getVarsForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_121getVarsForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_120getVarsForCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_121getVarsForCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getVarsForCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 544, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 544, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getVarsForCons", 0) < (0)) __PYX_ERR(9, 544, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getVarsForCons", 1, 1, 1, i); __PYX_ERR(9, 544, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 544, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getVarsForCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 544, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVarsForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_120getVarsForCons(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_120getVarsForCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  std::vector<int>  __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getVarsForCons", 0);

  /* "src/pygcgopt/detprobdata.pxi":552
 *         :rtype: list
 *         """
 *         return self.thisptr.getVarsForCons(consIndex)             # <<<<<<<<<<<<<<
 * 
 *     def isConsCardinalityCons(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 552, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->getVarsForCons(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 552, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_convert_vector_to_py_int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":544
 *         return Variable.create(self.thisptr.getVar(varIndex))
 * 
 *     def getVarsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the variable indices of the coefficient matrix for a constraint
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.getVarsForCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":554
 *         return self.thisptr.getVarsForCons(consIndex)
 * 
 *     def isConsCardinalityCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns whether a constraint is a cardinality constraint, i.e. of the .. math::`\\sum_{i} x_i = b`
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_123isConsCardinalityCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_122isConsCardinalityCons, "DetProbData.isConsCardinalityCons(self, consIndex)\n\nreturns whether a constraint is a cardinality constraint, i.e. of the .. math::`\\sum_{i} x_i = b`\n\n:param consIndex: index of constraint\n:type consIndex: int\n:return: returns whether a constraint is a cardinality constraint\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_123isConsCardinalityCons = {"isConsCardinalityCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_123isConsCardinalityCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_122isConsCardinalityCons};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_123isConsCardinalityCons(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isConsCardinalityCons (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 554, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 554, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isConsCardinalityCons", 0) < (0)) __PYX_ERR(9, 554, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isConsCardinalityCons", 1, 1, 1, i); __PYX_ERR(9, 554, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 554, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isConsCardinalityCons", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 554, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isConsCardinalityCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_122isConsCardinalityCons(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_122isConsCardinalityCons(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  bool __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isConsCardinalityCons", 0);

  /* "src/pygcgopt/detprobdata.pxi":562
 *         :rtype: bool
 *         """
 *         return self.thisptr.isConsCardinalityCons(consIndex)             # <<<<<<<<<<<<<<
 * 
 *     def isConssAdjInitialized(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 562, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->isConsCardinalityCons(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 562, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":554
 *         return self.thisptr.getVarsForCons(consIndex)
 * 
 *     def isConsCardinalityCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns whether a constraint is a cardinality constraint, i.e. of the .. math::`\\sum_{i} x_i = b`
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isConsCardinalityCons", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":564
 *         return self.thisptr.isConsCardinalityCons(consIndex)
 * 
 *     def isConssAdjInitialized(self):             # <<<<<<<<<<<<<<
 *         """determines whether or not the constraint-constraint adjacency data structure is initilized
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_125isConssAdjInitialized(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_124isConssAdjInitialized, "DetProbData.isConssAdjInitialized(self)\n\ndetermines whether or not the constraint-constraint adjacency data structure is initilized\n\n:return: True iff the constraint-constraint adjacency data structure is initilized\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_125isConssAdjInitialized = {"isConssAdjInitialized", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_125isConssAdjInitialized, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_124isConssAdjInitialized};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_125isConssAdjInitialized(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isConssAdjInitialized (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("isConssAdjInitialized", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("isConssAdjInitialized", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_124isConssAdjInitialized(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_124isConssAdjInitialized(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  SCIP_Bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isConssAdjInitialized", 0);

  /* "src/pygcgopt/detprobdata.pxi":570
 *         :rtype: bool
 *         """
 *         return self.thisptr.isConssAdjInitialized()             # <<<<<<<<<<<<<<
 * 
 *     def isConsSetpp(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->isConssAdjInitialized();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 570, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 570, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":564
 *         return self.thisptr.isConsCardinalityCons(consIndex)
 * 
 *     def isConssAdjInitialized(self):             # <<<<<<<<<<<<<<
 *         """determines whether or not the constraint-constraint adjacency data structure is initilized
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isConssAdjInitialized", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":572
 *         return self.thisptr.isConssAdjInitialized()
 * 
 *     def isConsSetpp(self, consIndex):             # <<<<<<<<<<<<<<
 *         """is cons with specified indec partitioning, or packing covering constraint?
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_127isConsSetpp(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_126isConsSetpp, "DetProbData.isConsSetpp(self, consIndex)\n\nis cons with specified indec partitioning, or packing covering constraint?\n\n:param consIndex: index of constraint\n:type consIndex: int\n:return: is constraint with specified index partitioning or packing covering constraint\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_127isConsSetpp = {"isConsSetpp", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_127isConsSetpp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_126isConsSetpp};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_127isConsSetpp(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isConsSetpp (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 572, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 572, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isConsSetpp", 0) < (0)) __PYX_ERR(9, 572, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isConsSetpp", 1, 1, 1, i); __PYX_ERR(9, 572, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 572, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isConsSetpp", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 572, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isConsSetpp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_126isConsSetpp(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_126isConsSetpp(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  bool __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isConsSetpp", 0);

  /* "src/pygcgopt/detprobdata.pxi":580
 *         :rtype: bool
 *         """
 *         return self.thisptr.isConsSetpp(consIndex)             # <<<<<<<<<<<<<<
 * 
 *     def isConsSetppc(self, consIndex):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 580, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->isConsSetpp(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 580, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":572
 *         return self.thisptr.isConssAdjInitialized()
 * 
 *     def isConsSetpp(self, consIndex):             # <<<<<<<<<<<<<<
 *         """is cons with specified indec partitioning, or packing covering constraint?
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isConsSetpp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":582
 *         return self.thisptr.isConsSetpp(consIndex)
 * 
 *     def isConsSetppc(self, consIndex):             # <<<<<<<<<<<<<<
 *         """is cons with specified index partitioning packing, or covering constraint?
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_129isConsSetppc(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_128isConsSetppc, "DetProbData.isConsSetppc(self, consIndex)\n\nis cons with specified index partitioning packing, or covering constraint?\n\n:param consIndex: index of constraint\n:type consIndex: int\n:return: whether a constraint is partitioning packing, or covering constraint?\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_129isConsSetppc = {"isConsSetppc", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_129isConsSetppc, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_128isConsSetppc};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_129isConsSetppc(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_consIndex = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isConsSetppc (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consIndex,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 582, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 582, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isConsSetppc", 0) < (0)) __PYX_ERR(9, 582, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isConsSetppc", 1, 1, 1, i); __PYX_ERR(9, 582, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 582, __pyx_L3_error)
    }
    __pyx_v_consIndex = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isConsSetppc", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 582, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isConsSetppc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_128isConsSetppc(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_consIndex);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_128isConsSetppc(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, PyObject *__pyx_v_consIndex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  bool __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isConsSetppc", 0);

  /* "src/pygcgopt/detprobdata.pxi":590
 *         :rtype: bool
 *         """
 *         return self.thisptr.isConsSetppc(consIndex)             # <<<<<<<<<<<<<<
 * 
 *     def isPartialdecDuplicateofFinished(self, PartialDecomposition partialdec):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_consIndex); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 590, __pyx_L1_error)
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->isConsSetppc(__pyx_t_1);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 590, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":582
 *         return self.thisptr.isConsSetpp(consIndex)
 * 
 *     def isConsSetppc(self, consIndex):             # <<<<<<<<<<<<<<
 *         """is cons with specified index partitioning packing, or covering constraint?
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isConsSetppc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":592
 *         return self.thisptr.isConsSetppc(consIndex)
 * 
 *     def isPartialdecDuplicateofFinished(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """checks if partialdec is a duplicate of an existing finished partialdec
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_131isPartialdecDuplicateofFinished(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_130isPartialdecDuplicateofFinished, "DetProbData.isPartialdecDuplicateofFinished(self, PartialDecomposition partialdec)\n\nchecks if partialdec is a duplicate of an existing finished partialdec\n\n:param partialdec: partialdec to be checked\n:type partialdec: :class:`PartialDecomposition`\n:return: True iff partialdec is a duplicate of an existing finished partialdec\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_131isPartialdecDuplicateofFinished = {"isPartialdecDuplicateofFinished", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_131isPartialdecDuplicateofFinished, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_130isPartialdecDuplicateofFinished};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_131isPartialdecDuplicateofFinished(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isPartialdecDuplicateofFinished (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 592, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 592, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "isPartialdecDuplicateofFinished", 0) < (0)) __PYX_ERR(9, 592, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("isPartialdecDuplicateofFinished", 1, 1, 1, i); __PYX_ERR(9, 592, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 592, __pyx_L3_error)
    }
    __pyx_v_partialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isPartialdecDuplicateofFinished", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 592, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isPartialdecDuplicateofFinished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "partialdec", 0))) __PYX_ERR(9, 592, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_130isPartialdecDuplicateofFinished(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_partialdec);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_130isPartialdecDuplicateofFinished(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec) {
  gcg::PARTIALDECOMP *__pyx_v_cpp_partialdec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  SCIP_Bool __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isPartialdecDuplicateofFinished", 0);

  /* "src/pygcgopt/detprobdata.pxi":600
 *         :rtype: bool
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr             # <<<<<<<<<<<<<<
 *         return self.thisptr.isPartialdecDuplicateofFinished(cpp_partialdec)
 * 
*/
  __pyx_t_1 = __pyx_v_partialdec->thisptr;
  __pyx_v_cpp_partialdec = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":601
 *         """
 *         cdef PARTIALDECOMP* cpp_partialdec = partialdec.thisptr
 *         return self.thisptr.isPartialdecDuplicateofFinished(cpp_partialdec)             # <<<<<<<<<<<<<<
 * 
 *     def isAssignedToOrigProb(self):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_2 = __pyx_v_self->thisptr->isPartialdecDuplicateofFinished(__pyx_v_cpp_partialdec);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 601, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":592
 *         return self.thisptr.isConsSetppc(consIndex)
 * 
 *     def isPartialdecDuplicateofFinished(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """checks if partialdec is a duplicate of an existing finished partialdec
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isPartialdecDuplicateofFinished", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":603
 *         return self.thisptr.isPartialdecDuplicateofFinished(cpp_partialdec)
 * 
 *     def isAssignedToOrigProb(self):             # <<<<<<<<<<<<<<
 *         """returns True if the matrix structure corresponds to the presolved problem
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_133isAssignedToOrigProb(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_132isAssignedToOrigProb, "DetProbData.isAssignedToOrigProb(self)\n\nreturns True if the matrix structure corresponds to the presolved problem\n\n:return: True if the matrix structure corresponds to the presolved problem\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_133isAssignedToOrigProb = {"isAssignedToOrigProb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_133isAssignedToOrigProb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_132isAssignedToOrigProb};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_133isAssignedToOrigProb(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isAssignedToOrigProb (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("isAssignedToOrigProb", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("isAssignedToOrigProb", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_132isAssignedToOrigProb(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_132isAssignedToOrigProb(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  SCIP_Bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("isAssignedToOrigProb", 0);

  /* "src/pygcgopt/detprobdata.pxi":609
 *         :rtype: bool
 *         """
 *         return self.thisptr.isAssignedToOrigProb()             # <<<<<<<<<<<<<<
 * 
 *     def partialdecIsNoDuplicateOfPartialdecs(self, PartialDecomposition comppartialdec, object partialdecs, sort):
*/
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->thisptr->isAssignedToOrigProb();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 609, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":603
 *         return self.thisptr.isPartialdecDuplicateofFinished(cpp_partialdec)
 * 
 *     def isAssignedToOrigProb(self):             # <<<<<<<<<<<<<<
 *         """returns True if the matrix structure corresponds to the presolved problem
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.isAssignedToOrigProb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":611
 *         return self.thisptr.isAssignedToOrigProb()
 * 
 *     def partialdecIsNoDuplicateOfPartialdecs(self, PartialDecomposition comppartialdec, object partialdecs, sort):             # <<<<<<<<<<<<<<
 *         """check if partialdec is a duplicate of any given partialdecs
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_135partialdecIsNoDuplicateOfPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_134partialdecIsNoDuplicateOfPartialdecs, "DetProbData.partialdecIsNoDuplicateOfPartialdecs(self, PartialDecomposition comppartialdec, partialdecs, sort)\n\ncheck if partialdec is a duplicate of any given partialdecs\n\n:param comppartialdec: partialdec to be checked\n:type comppartialdec: :class:`PartialDecomposition`\n:param partialdecs: partialdecs to compare with\n:type partialdecs: object\n:param sort: sort the vars and conss data structures in the partialdecs by their indices\n:type sort: bool\n:return: True iff partialdec is no duplicate of any given partialdecs\n:rtype: bool");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_135partialdecIsNoDuplicateOfPartialdecs = {"partialdecIsNoDuplicateOfPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_135partialdecIsNoDuplicateOfPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_134partialdecIsNoDuplicateOfPartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_135partialdecIsNoDuplicateOfPartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_comppartialdec = 0;
  PyObject *__pyx_v_partialdecs = 0;
  PyObject *__pyx_v_sort = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("partialdecIsNoDuplicateOfPartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_comppartialdec,&__pyx_mstate_global->__pyx_n_u_partialdecs,&__pyx_mstate_global->__pyx_n_u_sort,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 611, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(9, 611, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 611, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 611, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "partialdecIsNoDuplicateOfPartialdecs", 0) < (0)) __PYX_ERR(9, 611, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("partialdecIsNoDuplicateOfPartialdecs", 1, 3, 3, i); __PYX_ERR(9, 611, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 611, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 611, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(9, 611, __pyx_L3_error)
    }
    __pyx_v_comppartialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
    __pyx_v_partialdecs = values[1];
    __pyx_v_sort = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("partialdecIsNoDuplicateOfPartialdecs", 1, 3, 3, __pyx_nargs); __PYX_ERR(9, 611, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.partialdecIsNoDuplicateOfPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comppartialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "comppartialdec", 0))) __PYX_ERR(9, 611, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_134partialdecIsNoDuplicateOfPartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_comppartialdec, __pyx_v_partialdecs, __pyx_v_sort);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_134partialdecIsNoDuplicateOfPartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_comppartialdec, PyObject *__pyx_v_partialdecs, PyObject *__pyx_v_sort) {
  gcg::PARTIALDECOMP *__pyx_v_cpp_comppartialdec;
  std::vector<gcg::PARTIALDECOMP *>  __pyx_v_cpp_partialdecs;
  gcg::PARTIALDECOMP *__pyx_v_partialdecs_ptr;
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdecs_element = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::PARTIALDECOMP *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  bool __pyx_t_6;
  SCIP_Bool __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("partialdecIsNoDuplicateOfPartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":623
 *         :rtype: bool
 *         """
 *         cdef PARTIALDECOMP* cpp_comppartialdec = comppartialdec.thisptr             # <<<<<<<<<<<<<<
 *         cdef vector[PARTIALDECOMP*] cpp_partialdecs
 *         cdef PARTIALDECOMP* partialdecs_ptr = NULL
*/
  __pyx_t_1 = __pyx_v_comppartialdec->thisptr;
  __pyx_v_cpp_comppartialdec = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":625
 *         cdef PARTIALDECOMP* cpp_comppartialdec = comppartialdec.thisptr
 *         cdef vector[PARTIALDECOMP*] cpp_partialdecs
 *         cdef PARTIALDECOMP* partialdecs_ptr = NULL             # <<<<<<<<<<<<<<
 *         cdef PartialDecomposition partialdecs_element
 *         for partialdecs_element in partialdecs:
*/
  __pyx_v_partialdecs_ptr = NULL;

  /* "src/pygcgopt/detprobdata.pxi":627
 *         cdef PARTIALDECOMP* partialdecs_ptr = NULL
 *         cdef PartialDecomposition partialdecs_element
 *         for partialdecs_element in partialdecs:             # <<<<<<<<<<<<<<
 *             partialdecs_ptr = <PARTIALDECOMP*> partialdecs_element.thisptr
 *             cpp_partialdecs.push_back(partialdecs_ptr)
*/
  if (likely(PyList_CheckExact(__pyx_v_partialdecs)) || PyTuple_CheckExact(__pyx_v_partialdecs)) {
    __pyx_t_2 = __pyx_v_partialdecs; __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_partialdecs); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 627, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(9, 627, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_2, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_3;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(9, 627, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3);
        #endif
        ++__pyx_t_3;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 627, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(9, 627, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition))))) __PYX_ERR(9, 627, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_partialdecs_element, ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_t_5));
    __pyx_t_5 = 0;

    /* "src/pygcgopt/detprobdata.pxi":628
 *         cdef PartialDecomposition partialdecs_element
 *         for partialdecs_element in partialdecs:
 *             partialdecs_ptr = <PARTIALDECOMP*> partialdecs_element.thisptr             # <<<<<<<<<<<<<<
 *             cpp_partialdecs.push_back(partialdecs_ptr)
 *         return self.thisptr.partialdecIsNoDuplicateOfPartialdecs(cpp_comppartialdec, cpp_partialdecs, sort)
*/
    __pyx_v_partialdecs_ptr = ((gcg::PARTIALDECOMP *)__pyx_v_partialdecs_element->thisptr);

    /* "src/pygcgopt/detprobdata.pxi":629
 *         for partialdecs_element in partialdecs:
 *             partialdecs_ptr = <PARTIALDECOMP*> partialdecs_element.thisptr
 *             cpp_partialdecs.push_back(partialdecs_ptr)             # <<<<<<<<<<<<<<
 *         return self.thisptr.partialdecIsNoDuplicateOfPartialdecs(cpp_comppartialdec, cpp_partialdecs, sort)
 * 
*/
    try {
      __pyx_v_cpp_partialdecs.push_back(__pyx_v_partialdecs_ptr);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(9, 629, __pyx_L1_error)
    }

    /* "src/pygcgopt/detprobdata.pxi":627
 *         cdef PARTIALDECOMP* partialdecs_ptr = NULL
 *         cdef PartialDecomposition partialdecs_element
 *         for partialdecs_element in partialdecs:             # <<<<<<<<<<<<<<
 *             partialdecs_ptr = <PARTIALDECOMP*> partialdecs_element.thisptr
 *             cpp_partialdecs.push_back(partialdecs_ptr)
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":630
 *             partialdecs_ptr = <PARTIALDECOMP*> partialdecs_element.thisptr
 *             cpp_partialdecs.push_back(partialdecs_ptr)
 *         return self.thisptr.partialdecIsNoDuplicateOfPartialdecs(cpp_comppartialdec, cpp_partialdecs, sort)             # <<<<<<<<<<<<<<
 * 
 *     def sortFinishedForScore(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_sort); if (unlikely((__pyx_t_6 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(9, 630, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->partialdecIsNoDuplicateOfPartialdecs(__pyx_v_cpp_comppartialdec, __pyx_v_cpp_partialdecs, __pyx_t_6);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 630, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":611
 *         return self.thisptr.isAssignedToOrigProb()
 * 
 *     def partialdecIsNoDuplicateOfPartialdecs(self, PartialDecomposition comppartialdec, object partialdecs, sort):             # <<<<<<<<<<<<<<
 *         """check if partialdec is a duplicate of any given partialdecs
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.partialdecIsNoDuplicateOfPartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_partialdecs_element);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":632
 *         return self.thisptr.partialdecIsNoDuplicateOfPartialdecs(cpp_comppartialdec, cpp_partialdecs, sort)
 * 
 *     def sortFinishedForScore(self):             # <<<<<<<<<<<<<<
 *         """sorts partialdecs in finished partialdecs data structure according to the current scoretype
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_137sortFinishedForScore(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_136sortFinishedForScore, "DetProbData.sortFinishedForScore(self)\n\nsorts partialdecs in finished partialdecs data structure according to the current scoretype\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_137sortFinishedForScore = {"sortFinishedForScore", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_137sortFinishedForScore, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_136sortFinishedForScore};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_137sortFinishedForScore(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sortFinishedForScore (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("sortFinishedForScore", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("sortFinishedForScore", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_136sortFinishedForScore(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_136sortFinishedForScore(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sortFinishedForScore", 0);

  /* "src/pygcgopt/detprobdata.pxi":635
 *         """sorts partialdecs in finished partialdecs data structure according to the current scoretype
 *         """
 *         self.thisptr.sortFinishedForScore()             # <<<<<<<<<<<<<<
 * 
 *     def translatePartialdecs(self, DetProbData otherdata, object otherpartialdecs, translateSymmetry=True):
*/
  try {
    __pyx_v_self->thisptr->sortFinishedForScore();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 635, __pyx_L1_error)
  }

  /* "src/pygcgopt/detprobdata.pxi":632
 *         return self.thisptr.partialdecIsNoDuplicateOfPartialdecs(cpp_comppartialdec, cpp_partialdecs, sort)
 * 
 *     def sortFinishedForScore(self):             # <<<<<<<<<<<<<<
 *         """sorts partialdecs in finished partialdecs data structure according to the current scoretype
 *         """
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.sortFinishedForScore", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/detprobdata.pxi":637
 *         self.thisptr.sortFinishedForScore()
 * 
 *     def translatePartialdecs(self, DetProbData otherdata, object otherpartialdecs, translateSymmetry=True):             # <<<<<<<<<<<<<<
 *         """translates partialdecs if the index structure of the problem has changed, e.g. due to presolving
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_139translatePartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_138translatePartialdecs, "DetProbData.translatePartialdecs(self, DetProbData otherdata, otherpartialdecs, translateSymmetry=True)\n\ntranslates partialdecs if the index structure of the problem has changed, e.g. due to presolving\n\n:param otherdata: old detprobdata\n:type otherdata: :class:`DetProbData`\n:param otherpartialdecs: partialdecs to be translated\n:type otherpartialdecs: object\n:return: translated partialdecs\n:rtype: list");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_139translatePartialdecs = {"translatePartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_139translatePartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_138translatePartialdecs};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_139translatePartialdecs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_otherdata = 0;
  PyObject *__pyx_v_otherpartialdecs = 0;
  PyObject *__pyx_v_translateSymmetry = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("translatePartialdecs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_otherdata,&__pyx_mstate_global->__pyx_n_u_otherpartialdecs,&__pyx_mstate_global->__pyx_n_u_translateSymmetry,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 637, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(9, 637, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 637, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 637, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "translatePartialdecs", 0) < (0)) __PYX_ERR(9, 637, __pyx_L3_error)
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("translatePartialdecs", 0, 2, 3, i); __PYX_ERR(9, 637, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(9, 637, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(9, 637, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 637, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_otherdata = ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)values[0]);
    __pyx_v_otherpartialdecs = values[1];
    __pyx_v_translateSymmetry = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("translatePartialdecs", 0, 2, 3, __pyx_nargs); __PYX_ERR(9, 637, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.translatePartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_otherdata), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, 1, "otherdata", 0))) __PYX_ERR(9, 637, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_138translatePartialdecs(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v_otherdata, __pyx_v_otherpartialdecs, __pyx_v_translateSymmetry);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_11DetProbData_138translatePartialdecs(struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *__pyx_v_otherdata, PyObject *__pyx_v_otherpartialdecs, PyObject *__pyx_v_translateSymmetry) {
  gcg::DETPROBDATA *__pyx_v_cpp_otherdata;
  std::vector<gcg::PARTIALDECOMP *>  __pyx_v_cpp_otherpartialdecs;
  gcg::PARTIALDECOMP *__pyx_v_otherpartialdecs_ptr;
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_otherpartialdecs_element = 0;
  std::vector<gcg::PARTIALDECOMP *>  __pyx_v_result;
  gcg::PARTIALDECOMP *__pyx_9genexpr18__pyx_v_r;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  gcg::DETPROBDATA *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  SCIP_Bool __pyx_t_6;
  std::vector<gcg::PARTIALDECOMP *>  __pyx_t_7;
  std::vector<gcg::PARTIALDECOMP *> ::iterator __pyx_t_8;
  gcg::PARTIALDECOMP *__pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("translatePartialdecs", 0);

  /* "src/pygcgopt/detprobdata.pxi":647
 *         :rtype: list
 *         """
 *         cdef DETPROBDATA* cpp_otherdata = otherdata.thisptr             # <<<<<<<<<<<<<<
 *         cdef vector[PARTIALDECOMP*] cpp_otherpartialdecs
 *         cdef PARTIALDECOMP* otherpartialdecs_ptr = NULL
*/
  __pyx_t_1 = __pyx_v_otherdata->thisptr;
  __pyx_v_cpp_otherdata = __pyx_t_1;

  /* "src/pygcgopt/detprobdata.pxi":649
 *         cdef DETPROBDATA* cpp_otherdata = otherdata.thisptr
 *         cdef vector[PARTIALDECOMP*] cpp_otherpartialdecs
 *         cdef PARTIALDECOMP* otherpartialdecs_ptr = NULL             # <<<<<<<<<<<<<<
 *         cdef PartialDecomposition otherpartialdecs_element
 *         for otherpartialdecs_element in otherpartialdecs:
*/
  __pyx_v_otherpartialdecs_ptr = NULL;

  /* "src/pygcgopt/detprobdata.pxi":651
 *         cdef PARTIALDECOMP* otherpartialdecs_ptr = NULL
 *         cdef PartialDecomposition otherpartialdecs_element
 *         for otherpartialdecs_element in otherpartialdecs:             # <<<<<<<<<<<<<<
 *             otherpartialdecs_ptr = <PARTIALDECOMP*> otherpartialdecs_element.thisptr
 *             cpp_otherpartialdecs.push_back(otherpartialdecs_ptr)
*/
  if (likely(PyList_CheckExact(__pyx_v_otherpartialdecs)) || PyTuple_CheckExact(__pyx_v_otherpartialdecs)) {
    __pyx_t_2 = __pyx_v_otherpartialdecs; __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_otherpartialdecs); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 651, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(9, 651, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_2, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_3;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(9, 651, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3);
        #endif
        ++__pyx_t_3;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 651, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(9, 651, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition))))) __PYX_ERR(9, 651, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_otherpartialdecs_element, ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_t_5));
    __pyx_t_5 = 0;

    /* "src/pygcgopt/detprobdata.pxi":652
 *         cdef PartialDecomposition otherpartialdecs_element
 *         for otherpartialdecs_element in otherpartialdecs:
 *             otherpartialdecs_ptr = <PARTIALDECOMP*> otherpartialdecs_element.thisptr             # <<<<<<<<<<<<<<
 *             cpp_otherpartialdecs.push_back(otherpartialdecs_ptr)
 *         cdef vector[PARTIALDECOMP*] result = self.thisptr.translatePartialdecs(cpp_otherdata, cpp_otherpartialdecs, translateSymmetry)
*/
    __pyx_v_otherpartialdecs_ptr = ((gcg::PARTIALDECOMP *)__pyx_v_otherpartialdecs_element->thisptr);

    /* "src/pygcgopt/detprobdata.pxi":653
 *         for otherpartialdecs_element in otherpartialdecs:
 *             otherpartialdecs_ptr = <PARTIALDECOMP*> otherpartialdecs_element.thisptr
 *             cpp_otherpartialdecs.push_back(otherpartialdecs_ptr)             # <<<<<<<<<<<<<<
 *         cdef vector[PARTIALDECOMP*] result = self.thisptr.translatePartialdecs(cpp_otherdata, cpp_otherpartialdecs, translateSymmetry)
 *         return [PartialDecomposition.create(r) for r in result]
*/
    try {
      __pyx_v_cpp_otherpartialdecs.push_back(__pyx_v_otherpartialdecs_ptr);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(9, 653, __pyx_L1_error)
    }

    /* "src/pygcgopt/detprobdata.pxi":651
 *         cdef PARTIALDECOMP* otherpartialdecs_ptr = NULL
 *         cdef PartialDecomposition otherpartialdecs_element
 *         for otherpartialdecs_element in otherpartialdecs:             # <<<<<<<<<<<<<<
 *             otherpartialdecs_ptr = <PARTIALDECOMP*> otherpartialdecs_element.thisptr
 *             cpp_otherpartialdecs.push_back(otherpartialdecs_ptr)
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":654
 *             otherpartialdecs_ptr = <PARTIALDECOMP*> otherpartialdecs_element.thisptr
 *             cpp_otherpartialdecs.push_back(otherpartialdecs_ptr)
 *         cdef vector[PARTIALDECOMP*] result = self.thisptr.translatePartialdecs(cpp_otherdata, cpp_otherpartialdecs, translateSymmetry)             # <<<<<<<<<<<<<<
 *         return [PartialDecomposition.create(r) for r in result]
*/
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_translateSymmetry); if (unlikely((__pyx_t_6 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(9, 654, __pyx_L1_error)
  try {
    __pyx_t_7 = __pyx_v_self->thisptr->translatePartialdecs(__pyx_v_cpp_otherdata, __pyx_v_cpp_otherpartialdecs, __pyx_t_6);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(9, 654, __pyx_L1_error)
  }
  __pyx_v_result = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_7);

  /* "src/pygcgopt/detprobdata.pxi":655
 *             cpp_otherpartialdecs.push_back(otherpartialdecs_ptr)
 *         cdef vector[PARTIALDECOMP*] result = self.thisptr.translatePartialdecs(cpp_otherdata, cpp_otherpartialdecs, translateSymmetry)
 *         return [PartialDecomposition.create(r) for r in result]             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 655, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = __pyx_v_result.begin();
    for (; __pyx_t_8 != __pyx_v_result.end(); ++__pyx_t_8) {
      __pyx_t_9 = *__pyx_t_8;
      __pyx_9genexpr18__pyx_v_r = __pyx_t_9;
      __pyx_t_5 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(__pyx_9genexpr18__pyx_v_r); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 655, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 655, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/detprobdata.pxi":637
 *         self.thisptr.sortFinishedForScore()
 * 
 *     def translatePartialdecs(self, DetProbData otherdata, object otherpartialdecs, translateSymmetry=True):             # <<<<<<<<<<<<<<
 *         """translates partialdecs if the index structure of the problem has changed, e.g. due to presolving
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.translatePartialdecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_otherpartialdecs_element);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_141__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_140__reduce_cython__, "DetProbData.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_141__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_141__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_140__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_141__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_140__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self));

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

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

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.thisptr cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.thisptr cannot be converted to a Python object for pickling"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self_thisptr_cannot_be_converted, 0, 0);
  __PYX_ERR(2, 2, __pyx_L1_error)

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

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_143__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_11DetProbData_142__setstate_cython__, "DetProbData.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11DetProbData_143__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_143__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_142__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11DetProbData_143__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.DetProbData.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_11DetProbData_142__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":4
 *     raise TypeError, "self.thisptr cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.thisptr cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self_thisptr_cannot_be_converted, 0, 0);
  __PYX_ERR(2, 4, __pyx_L1_error)

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

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

/* "src/pygcgopt/consclassifier.pxi":6
 *     cdef public str name
 * 
 *     def freeConsClassifier(self):             # <<<<<<<<<<<<<<
 *         '''calls destructor and frees memory of constraint classifier'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_1freeConsClassifier(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14ConsClassifier_freeConsClassifier, "ConsClassifier.freeConsClassifier(self)\n\ncalls destructor and frees memory of constraint classifier");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_14ConsClassifier_1freeConsClassifier = {"freeConsClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_1freeConsClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14ConsClassifier_freeConsClassifier};
static PyObject *__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_1freeConsClassifier(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeConsClassifier (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("freeConsClassifier", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("freeConsClassifier", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_freeConsClassifier(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_freeConsClassifier(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeConsClassifier", 0);

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

/* "src/pygcgopt/consclassifier.pxi":10
 *         pass
 * 
 *     def classify(self, conss, partition):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_3classify(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14ConsClassifier_2classify, "ConsClassifier.classify(self, conss, partition)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_14ConsClassifier_3classify = {"classify", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_3classify, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14ConsClassifier_2classify};
static PyObject *__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_3classify(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_conss = 0;
  CYTHON_UNUSED PyObject *__pyx_v_partition = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("classify (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_conss,&__pyx_mstate_global->__pyx_n_u_partition,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 10, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 10, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 10, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "classify", 0) < (0)) __PYX_ERR(1, 10, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("classify", 1, 2, 2, i); __PYX_ERR(1, 10, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 10, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 10, __pyx_L3_error)
    }
    __pyx_v_conss = values[0];
    __pyx_v_partition = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("classify", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 10, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsClassifier.classify", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_2classify(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v_self), __pyx_v_conss, __pyx_v_partition);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_2classify(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_conss, CYTHON_UNUSED PyObject *__pyx_v_partition) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("classify", 0);

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

/* "src/pygcgopt/consclassifier.pxi":3
 * cdef class ConsClassifier:
 *     """Base class of the Constraint Classifier Plugin"""
 *     cdef public Model model             # <<<<<<<<<<<<<<
 *     cdef public str name
 * 
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_5model_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__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("pygcgopt.gcg.ConsClassifier.model.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5model_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5model_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_5model_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None);

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

/* "src/pygcgopt/consclassifier.pxi":4
 *     """Base class of the Constraint Classifier Plugin"""
 *     cdef public Model model
 *     cdef public str name             # <<<<<<<<<<<<<<
 * 
 *     def freeConsClassifier(self):
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4name___get__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__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_8pygcgopt_3gcg_14ConsClassifier_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4name_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4name_2__set__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(1, 4, __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;

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_4name_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4name_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4name_4__del__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__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;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14ConsClassifier_4__reduce_cython__, "ConsClassifier.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_14ConsClassifier_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14ConsClassifier_4__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_14ConsClassifier_4__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__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 = (self.model, self.name)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
*/
  __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((PyObject *)__pyx_v_self->model);
  __Pyx_GIVEREF((PyObject *)__pyx_v_self->model);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->model)) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->name) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __pyx_v_state = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.model, self.name)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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.model, self.name)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = ('self.model is not None or self.name is not None',)
*/
    __pyx_v_use_setstate = 1;

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

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self.model is not None or self.name is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[5]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self.model is not None or self.name is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('self.model is not None or self.name is not None',)
 *     if use_setstate:
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_ConsClassifier); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_76513566);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_76513566);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_76513566) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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 = ('self.model is not None or self.name is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, None), state
 *     else:
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_ConsClassifier__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_ConsClassifier); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_76513566);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_76513566);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_76513566) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.ConsClassifier.__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_ConsClassifier, (type(self), 0x48f811e, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_ConsClassifier__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14ConsClassifier_6__setstate_cython__, "ConsClassifier.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_14ConsClassifier_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14ConsClassifier_6__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.ConsClassifier.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14ConsClassifier_6__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_ConsClassifier__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_ConsClassifier__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_ConsClassifier__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.ConsClassifier.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/consclassifier.pxi":13
 *         pass
 * 
 * cdef SCIP_RETCODE PyConsClassifierFree(GCG* gcg, GCG_CONSCLASSIFIER* consclassifier) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_CLASSIFIERDATA* consclassifierdata
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyConsClassifierFree(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_CONSCLASSIFIER *__pyx_v_consclassifier) {
  GCG_CLASSIFIERDATA *__pyx_v_consclassifierdata;
  struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_py_consclassifier = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyConsClassifierFree", 0);

  /* "src/pygcgopt/consclassifier.pxi":15
 * cdef SCIP_RETCODE PyConsClassifierFree(GCG* gcg, GCG_CONSCLASSIFIER* consclassifier) noexcept with gil:
 *     cdef GCG_CLASSIFIERDATA* consclassifierdata
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)             # <<<<<<<<<<<<<<
 *     py_consclassifier = <ConsClassifier>consclassifierdata
 *     py_consclassifier.freeConsClassifier()
*/
  __pyx_v_consclassifierdata = GCGconsClassifierGetData(__pyx_v_consclassifier);

  /* "src/pygcgopt/consclassifier.pxi":16
 *     cdef GCG_CLASSIFIERDATA* consclassifierdata
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
 *     py_consclassifier = <ConsClassifier>consclassifierdata             # <<<<<<<<<<<<<<
 *     py_consclassifier.freeConsClassifier()
 *     Py_DECREF(py_consclassifier)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_consclassifierdata);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_consclassifier = ((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/consclassifier.pxi":17
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
 *     py_consclassifier = <ConsClassifier>consclassifierdata
 *     py_consclassifier.freeConsClassifier()             # <<<<<<<<<<<<<<
 *     Py_DECREF(py_consclassifier)
 *     return SCIP_OKAY
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_consclassifier);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_freeConsClassifier, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/consclassifier.pxi":18
 *     py_consclassifier = <ConsClassifier>consclassifierdata
 *     py_consclassifier.freeConsClassifier()
 *     Py_DECREF(py_consclassifier)             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  Py_DECREF(((PyObject *)__pyx_v_py_consclassifier));

  /* "src/pygcgopt/consclassifier.pxi":19
 *     py_consclassifier.freeConsClassifier()
 *     Py_DECREF(py_consclassifier)
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyConsClassifierClassify(GCG* gcg, GCG_CONSCLASSIFIER* consclassifier, SCIP_Bool transformed) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/consclassifier.pxi":13
 *         pass
 * 
 * cdef SCIP_RETCODE PyConsClassifierFree(GCG* gcg, GCG_CONSCLASSIFIER* consclassifier) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_CLASSIFIERDATA* consclassifierdata
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyConsClassifierFree", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_consclassifier);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/consclassifier.pxi":21
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyConsClassifierClassify(GCG* gcg, GCG_CONSCLASSIFIER* consclassifier, SCIP_Bool transformed) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_CLASSIFIERDATA* consclassifierdata
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyConsClassifierClassify(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_CONSCLASSIFIER *__pyx_v_consclassifier, SCIP_Bool __pyx_v_transformed) {
  GCG_CLASSIFIERDATA *__pyx_v_consclassifierdata;
  struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_py_consclassifier = NULL;
  PyObject *__pyx_v_detprobdata = NULL;
  PyObject *__pyx_v_conss = NULL;
  PyObject *__pyx_v_partition = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyConsClassifierClassify", 0);

  /* "src/pygcgopt/consclassifier.pxi":23
 * cdef SCIP_RETCODE PyConsClassifierClassify(GCG* gcg, GCG_CONSCLASSIFIER* consclassifier, SCIP_Bool transformed) noexcept with gil:
 *     cdef GCG_CLASSIFIERDATA* consclassifierdata
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)             # <<<<<<<<<<<<<<
 *     py_consclassifier = <ConsClassifier>consclassifierdata
 *     if transformed:
*/
  __pyx_v_consclassifierdata = GCGconsClassifierGetData(__pyx_v_consclassifier);

  /* "src/pygcgopt/consclassifier.pxi":24
 *     cdef GCG_CLASSIFIERDATA* consclassifierdata
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
 *     py_consclassifier = <ConsClassifier>consclassifierdata             # <<<<<<<<<<<<<<
 *     if transformed:
 *         detprobdata = py_consclassifier.model.getDetprobdataPresolved()
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_consclassifierdata);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_consclassifier = ((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/consclassifier.pxi":25
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
 *     py_consclassifier = <ConsClassifier>consclassifierdata
 *     if transformed:             # <<<<<<<<<<<<<<
 *         detprobdata = py_consclassifier.model.getDetprobdataPresolved()
 *     else:
*/
  __pyx_t_2 = (__pyx_v_transformed != 0);
  if (__pyx_t_2) {

    /* "src/pygcgopt/consclassifier.pxi":26
 *     py_consclassifier = <ConsClassifier>consclassifierdata
 *     if transformed:
 *         detprobdata = py_consclassifier.model.getDetprobdataPresolved()             # <<<<<<<<<<<<<<
 *     else:
 *         detprobdata = py_consclassifier.model.getDetprobdataOrig()
*/
    __pyx_t_3 = ((PyObject *)__pyx_v_py_consclassifier->model);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getDetprobdataPresolved, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 26, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_v_detprobdata = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "src/pygcgopt/consclassifier.pxi":25
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
 *     py_consclassifier = <ConsClassifier>consclassifierdata
 *     if transformed:             # <<<<<<<<<<<<<<
 *         detprobdata = py_consclassifier.model.getDetprobdataPresolved()
 *     else:
*/
    goto __pyx_L3;
  }

  /* "src/pygcgopt/consclassifier.pxi":28
 *         detprobdata = py_consclassifier.model.getDetprobdataPresolved()
 *     else:
 *         detprobdata = py_consclassifier.model.getDetprobdataOrig()             # <<<<<<<<<<<<<<
 *     conss = detprobdata.getRelevantConss()
 *     partition = detprobdata.createConsPart(py_consclassifier.name, 0, len(conss))
*/
  /*else*/ {
    __pyx_t_3 = ((PyObject *)__pyx_v_py_consclassifier->model);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getDetprobdataOrig, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 28, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_v_detprobdata = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L3:;

  /* "src/pygcgopt/consclassifier.pxi":29
 *     else:
 *         detprobdata = py_consclassifier.model.getDetprobdataOrig()
 *     conss = detprobdata.getRelevantConss()             # <<<<<<<<<<<<<<
 *     partition = detprobdata.createConsPart(py_consclassifier.name, 0, len(conss))
 *     py_consclassifier.classify(conss, partition)
*/
  __pyx_t_3 = __pyx_v_detprobdata;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getRelevantConss, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 29, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_conss = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/consclassifier.pxi":30
 *         detprobdata = py_consclassifier.model.getDetprobdataOrig()
 *     conss = detprobdata.getRelevantConss()
 *     partition = detprobdata.createConsPart(py_consclassifier.name, 0, len(conss))             # <<<<<<<<<<<<<<
 *     py_consclassifier.classify(conss, partition)
 *     print("Consclassifier {0} yields a classification with {1} different constraint classes".format(partition.getName(), partition.getNClasses()))
*/
  __pyx_t_3 = __pyx_v_detprobdata;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = PyObject_Length(__pyx_v_conss); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 30, __pyx_L1_error)
  __pyx_t_6 = PyLong_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_v_py_consclassifier->name, __pyx_mstate_global->__pyx_int_0, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_createConsPart, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 30, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_partition = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/consclassifier.pxi":31
 *     conss = detprobdata.getRelevantConss()
 *     partition = detprobdata.createConsPart(py_consclassifier.name, 0, len(conss))
 *     py_consclassifier.classify(conss, partition)             # <<<<<<<<<<<<<<
 *     print("Consclassifier {0} yields a classification with {1} different constraint classes".format(partition.getName(), partition.getNClasses()))
 *     detprobdata.addConsPartition(partition)
*/
  __pyx_t_6 = ((PyObject *)__pyx_v_py_consclassifier);
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_conss, __pyx_v_partition};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_classify, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 31, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/consclassifier.pxi":32
 *     partition = detprobdata.createConsPart(py_consclassifier.name, 0, len(conss))
 *     py_consclassifier.classify(conss, partition)
 *     print("Consclassifier {0} yields a classification with {1} different constraint classes".format(partition.getName(), partition.getNClasses()))             # <<<<<<<<<<<<<<
 *     detprobdata.addConsPartition(partition)
 *     return SCIP_OKAY
*/
  __pyx_t_6 = NULL;
  __pyx_t_7 = __pyx_mstate_global->__pyx_kp_u_Consclassifier_0_yields_a_classi;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_9 = __pyx_v_partition;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
    __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getName, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  }
  __pyx_t_10 = __pyx_v_partition;
  __Pyx_INCREF(__pyx_t_10);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL};
    __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getNClasses, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_8, __pyx_t_9};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_print, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/consclassifier.pxi":33
 *     py_consclassifier.classify(conss, partition)
 *     print("Consclassifier {0} yields a classification with {1} different constraint classes".format(partition.getName(), partition.getNClasses()))
 *     detprobdata.addConsPartition(partition)             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
*/
  __pyx_t_3 = __pyx_v_detprobdata;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_partition};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_addConsPartition, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 33, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/consclassifier.pxi":34
 *     print("Consclassifier {0} yields a classification with {1} different constraint classes".format(partition.getName(), partition.getNClasses()))
 *     detprobdata.addConsPartition(partition)
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/consclassifier.pxi":21
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyConsClassifierClassify(GCG* gcg, GCG_CONSCLASSIFIER* consclassifier, SCIP_Bool transformed) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_CLASSIFIERDATA* consclassifierdata
 *     consclassifierdata = GCGconsClassifierGetData(consclassifier)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyConsClassifierClassify", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_consclassifier);
  __Pyx_XDECREF(__pyx_v_detprobdata);
  __Pyx_XDECREF(__pyx_v_conss);
  __Pyx_XDECREF(__pyx_v_partition);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/varclassifier.pxi":6
 *     cdef public str name
 * 
 *     def freeVarClassifier(self):             # <<<<<<<<<<<<<<
 *         '''calls destructor and frees memory of variable classifier'''
 *         pass
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13VarClassifier_1freeVarClassifier(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13VarClassifier_freeVarClassifier, "VarClassifier.freeVarClassifier(self)\n\ncalls destructor and frees memory of variable classifier");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13VarClassifier_1freeVarClassifier = {"freeVarClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13VarClassifier_1freeVarClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13VarClassifier_freeVarClassifier};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13VarClassifier_1freeVarClassifier(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeVarClassifier (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("freeVarClassifier", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("freeVarClassifier", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13VarClassifier_freeVarClassifier(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_freeVarClassifier(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("freeVarClassifier", 0);

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

/* "src/pygcgopt/varclassifier.pxi":10
 *         pass
 * 
 *     def classify(self, vars, partition):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13VarClassifier_3classify(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13VarClassifier_2classify, "VarClassifier.classify(self, vars, partition)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13VarClassifier_3classify = {"classify", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13VarClassifier_3classify, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13VarClassifier_2classify};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13VarClassifier_3classify(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_vars = 0;
  CYTHON_UNUSED PyObject *__pyx_v_partition = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("classify (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_vars,&__pyx_mstate_global->__pyx_n_u_partition,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 10, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 10, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 10, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "classify", 0) < (0)) __PYX_ERR(10, 10, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("classify", 1, 2, 2, i); __PYX_ERR(10, 10, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 10, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 10, __pyx_L3_error)
    }
    __pyx_v_vars = values[0];
    __pyx_v_partition = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("classify", 1, 2, 2, __pyx_nargs); __PYX_ERR(10, 10, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarClassifier.classify", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13VarClassifier_2classify(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v_self), __pyx_v_vars, __pyx_v_partition);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_2classify(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_vars, CYTHON_UNUSED PyObject *__pyx_v_partition) {
  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("classify", 0);

  /* "src/pygcgopt/varclassifier.pxi":11
 * 
 *     def classify(self, vars, partition):
 *         return {}             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyVarClassifierFree(GCG* gcg, GCG_VARCLASSIFIER* varclassifier) noexcept with gil:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/pygcgopt/varclassifier.pxi":10
 *         pass
 * 
 *     def classify(self, vars, partition):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.VarClassifier.classify", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/varclassifier.pxi":3
 * cdef class VarClassifier:
 *     """Base class of the Variable Classifier Plugin"""
 *     cdef public Model model             # <<<<<<<<<<<<<<
 *     cdef public str name
 * 
*/

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

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

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

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_13VarClassifier_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_13VarClassifier_5model_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13VarClassifier_5model_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_13VarClassifier_5model_2__set__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(10, 3, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__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("pygcgopt.gcg.VarClassifier.model.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_13VarClassifier_5model_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_13VarClassifier_5model_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13VarClassifier_5model_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_13VarClassifier_5model_4__del__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->model);
  __Pyx_DECREF((PyObject *)__pyx_v_self->model);
  __pyx_v_self->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None);

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

/* "src/pygcgopt/varclassifier.pxi":4
 *     """Base class of the Variable Classifier Plugin"""
 *     cdef public Model model
 *     cdef public str name             # <<<<<<<<<<<<<<
 * 
 *     def freeVarClassifier(self):
*/

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

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_4name___get__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__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_8pygcgopt_3gcg_13VarClassifier_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_13VarClassifier_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13VarClassifier_4name_2__set__(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_8pygcgopt_3gcg_13VarClassifier_4name_2__set__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__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);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(10, 4, __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;

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

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_13VarClassifier_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_8pygcgopt_3gcg_13VarClassifier_4name_5__del__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13VarClassifier_4name_4__del__(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v_self));

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

static int __pyx_pf_8pygcgopt_3gcg_13VarClassifier_4name_4__del__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__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;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13VarClassifier_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13VarClassifier_4__reduce_cython__, "VarClassifier.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13VarClassifier_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13VarClassifier_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13VarClassifier_4__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13VarClassifier_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13VarClassifier_4__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_13VarClassifier_4__reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__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 = (self.model, self.name)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
*/
  __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((PyObject *)__pyx_v_self->model);
  __Pyx_GIVEREF((PyObject *)__pyx_v_self->model);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->model)) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->name);
  __Pyx_GIVEREF(__pyx_v_self->name);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->name) != (0)) __PYX_ERR(2, 5, __pyx_L1_error);
  __pyx_v_state = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.model, self.name)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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.model, self.name)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = ('self.model is not None or self.name is not None',)
*/
    __pyx_v_use_setstate = 1;

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

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self.model is not None or self.name is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[5]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self.model is not None or self.name is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('self.model is not None or self.name is not None',)
 *     if use_setstate:
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_VarClassifier); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_76513566);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_76513566);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_76513566) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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 = ('self.model is not None or self.name is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, None), state
 *     else:
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_VarClassifier__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_VarClassifier); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_76513566);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_76513566);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_76513566) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.VarClassifier.__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_VarClassifier, (type(self), 0x48f811e, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_VarClassifier__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13VarClassifier_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_13VarClassifier_6__setstate_cython__, "VarClassifier.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13VarClassifier_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13VarClassifier_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13VarClassifier_6__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13VarClassifier_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.VarClassifier.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_13VarClassifier_6__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_VarClassifier__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_VarClassifier__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_VarClassifier__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.VarClassifier.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/pygcgopt/varclassifier.pxi":13
 *         return {}
 * 
 * cdef SCIP_RETCODE PyVarClassifierFree(GCG* gcg, GCG_VARCLASSIFIER* varclassifier) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_CLASSIFIERDATA* varclassifierdata
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyVarClassifierFree(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_VARCLASSIFIER *__pyx_v_varclassifier) {
  GCG_CLASSIFIERDATA *__pyx_v_varclassifierdata;
  struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_py_varclassifier = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyVarClassifierFree", 0);

  /* "src/pygcgopt/varclassifier.pxi":15
 * cdef SCIP_RETCODE PyVarClassifierFree(GCG* gcg, GCG_VARCLASSIFIER* varclassifier) noexcept with gil:
 *     cdef GCG_CLASSIFIERDATA* varclassifierdata
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)             # <<<<<<<<<<<<<<
 *     py_varclassifier = <VarClassifier>varclassifierdata
 *     py_varclassifier.freeVarClassifier()
*/
  __pyx_v_varclassifierdata = GCGvarClassifierGetData(__pyx_v_varclassifier);

  /* "src/pygcgopt/varclassifier.pxi":16
 *     cdef GCG_CLASSIFIERDATA* varclassifierdata
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
 *     py_varclassifier = <VarClassifier>varclassifierdata             # <<<<<<<<<<<<<<
 *     py_varclassifier.freeVarClassifier()
 *     Py_DECREF(py_varclassifier)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_varclassifierdata);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_varclassifier = ((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/varclassifier.pxi":17
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
 *     py_varclassifier = <VarClassifier>varclassifierdata
 *     py_varclassifier.freeVarClassifier()             # <<<<<<<<<<<<<<
 *     Py_DECREF(py_varclassifier)
 *     return SCIP_OKAY
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_py_varclassifier);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_freeVarClassifier, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 17, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/varclassifier.pxi":18
 *     py_varclassifier = <VarClassifier>varclassifierdata
 *     py_varclassifier.freeVarClassifier()
 *     Py_DECREF(py_varclassifier)             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
 * 
*/
  Py_DECREF(((PyObject *)__pyx_v_py_varclassifier));

  /* "src/pygcgopt/varclassifier.pxi":19
 *     py_varclassifier.freeVarClassifier()
 *     Py_DECREF(py_varclassifier)
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
 * 
 * cdef SCIP_RETCODE PyVarClassifierClassify(GCG* gcg, GCG_VARCLASSIFIER* varclassifier, SCIP_Bool transformed) noexcept with gil:
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/varclassifier.pxi":13
 *         return {}
 * 
 * cdef SCIP_RETCODE PyVarClassifierFree(GCG* gcg, GCG_VARCLASSIFIER* varclassifier) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_CLASSIFIERDATA* varclassifierdata
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyVarClassifierFree", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_varclassifier);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "src/pygcgopt/varclassifier.pxi":21
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyVarClassifierClassify(GCG* gcg, GCG_VARCLASSIFIER* varclassifier, SCIP_Bool transformed) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_CLASSIFIERDATA* varclassifierdata
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
*/

static SCIP_RETCODE __pyx_f_8pygcgopt_3gcg_PyVarClassifierClassify(CYTHON_UNUSED GCG *__pyx_v_gcg, GCG_VARCLASSIFIER *__pyx_v_varclassifier, SCIP_Bool __pyx_v_transformed) {
  GCG_CLASSIFIERDATA *__pyx_v_varclassifierdata;
  struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_py_varclassifier = NULL;
  PyObject *__pyx_v_detprobdata = NULL;
  PyObject *__pyx_v_vars = NULL;
  PyObject *__pyx_v_partition = NULL;
  SCIP_RETCODE __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_RefNannySetupContext("PyVarClassifierClassify", 0);

  /* "src/pygcgopt/varclassifier.pxi":23
 * cdef SCIP_RETCODE PyVarClassifierClassify(GCG* gcg, GCG_VARCLASSIFIER* varclassifier, SCIP_Bool transformed) noexcept with gil:
 *     cdef GCG_CLASSIFIERDATA* varclassifierdata
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)             # <<<<<<<<<<<<<<
 *     py_varclassifier = <VarClassifier>varclassifierdata
 *     if transformed:
*/
  __pyx_v_varclassifierdata = GCGvarClassifierGetData(__pyx_v_varclassifier);

  /* "src/pygcgopt/varclassifier.pxi":24
 *     cdef GCG_CLASSIFIERDATA* varclassifierdata
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
 *     py_varclassifier = <VarClassifier>varclassifierdata             # <<<<<<<<<<<<<<
 *     if transformed:
 *         detprobdata = py_varclassifier.model.getDetprobdataPresolved()
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_varclassifierdata);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_varclassifier = ((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/pygcgopt/varclassifier.pxi":25
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
 *     py_varclassifier = <VarClassifier>varclassifierdata
 *     if transformed:             # <<<<<<<<<<<<<<
 *         detprobdata = py_varclassifier.model.getDetprobdataPresolved()
 *     else:
*/
  __pyx_t_2 = (__pyx_v_transformed != 0);
  if (__pyx_t_2) {

    /* "src/pygcgopt/varclassifier.pxi":26
 *     py_varclassifier = <VarClassifier>varclassifierdata
 *     if transformed:
 *         detprobdata = py_varclassifier.model.getDetprobdataPresolved()             # <<<<<<<<<<<<<<
 *     else:
 *         detprobdata = py_varclassifier.model.getDetprobdataOrig()
*/
    __pyx_t_3 = ((PyObject *)__pyx_v_py_varclassifier->model);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getDetprobdataPresolved, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 26, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_v_detprobdata = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "src/pygcgopt/varclassifier.pxi":25
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
 *     py_varclassifier = <VarClassifier>varclassifierdata
 *     if transformed:             # <<<<<<<<<<<<<<
 *         detprobdata = py_varclassifier.model.getDetprobdataPresolved()
 *     else:
*/
    goto __pyx_L3;
  }

  /* "src/pygcgopt/varclassifier.pxi":28
 *         detprobdata = py_varclassifier.model.getDetprobdataPresolved()
 *     else:
 *         detprobdata = py_varclassifier.model.getDetprobdataOrig()             # <<<<<<<<<<<<<<
 *     vars = detprobdata.getRelevantVars()
 *     partition = detprobdata.createVarPart(py_varclassifier.name, 0, len(vars))
*/
  /*else*/ {
    __pyx_t_3 = ((PyObject *)__pyx_v_py_varclassifier->model);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getDetprobdataOrig, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 28, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_v_detprobdata = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L3:;

  /* "src/pygcgopt/varclassifier.pxi":29
 *     else:
 *         detprobdata = py_varclassifier.model.getDetprobdataOrig()
 *     vars = detprobdata.getRelevantVars()             # <<<<<<<<<<<<<<
 *     partition = detprobdata.createVarPart(py_varclassifier.name, 0, len(vars))
 *     py_varclassifier.classify(vars, partition)
*/
  __pyx_t_3 = __pyx_v_detprobdata;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getRelevantVars, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 29, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_vars = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/varclassifier.pxi":30
 *         detprobdata = py_varclassifier.model.getDetprobdataOrig()
 *     vars = detprobdata.getRelevantVars()
 *     partition = detprobdata.createVarPart(py_varclassifier.name, 0, len(vars))             # <<<<<<<<<<<<<<
 *     py_varclassifier.classify(vars, partition)
 *     print("Varclassifier {0} yields a classification with {1} different variable classes".format(partition.getName(), partition.getNClasses()))
*/
  __pyx_t_3 = __pyx_v_detprobdata;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = PyObject_Length(__pyx_v_vars); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(10, 30, __pyx_L1_error)
  __pyx_t_6 = PyLong_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(10, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_v_py_varclassifier->name, __pyx_mstate_global->__pyx_int_0, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_createVarPart, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 30, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_partition = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/pygcgopt/varclassifier.pxi":31
 *     vars = detprobdata.getRelevantVars()
 *     partition = detprobdata.createVarPart(py_varclassifier.name, 0, len(vars))
 *     py_varclassifier.classify(vars, partition)             # <<<<<<<<<<<<<<
 *     print("Varclassifier {0} yields a classification with {1} different variable classes".format(partition.getName(), partition.getNClasses()))
 *     detprobdata.addVarPartition(partition)
*/
  __pyx_t_6 = ((PyObject *)__pyx_v_py_varclassifier);
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_vars, __pyx_v_partition};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_classify, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 31, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/varclassifier.pxi":32
 *     partition = detprobdata.createVarPart(py_varclassifier.name, 0, len(vars))
 *     py_varclassifier.classify(vars, partition)
 *     print("Varclassifier {0} yields a classification with {1} different variable classes".format(partition.getName(), partition.getNClasses()))             # <<<<<<<<<<<<<<
 *     detprobdata.addVarPartition(partition)
 *     return SCIP_OKAY
*/
  __pyx_t_6 = NULL;
  __pyx_t_7 = __pyx_mstate_global->__pyx_kp_u_Varclassifier_0_yields_a_classif;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_9 = __pyx_v_partition;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
    __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getName, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(10, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  }
  __pyx_t_10 = __pyx_v_partition;
  __Pyx_INCREF(__pyx_t_10);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL};
    __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getNClasses, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_8, __pyx_t_9};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_print, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/varclassifier.pxi":33
 *     py_varclassifier.classify(vars, partition)
 *     print("Varclassifier {0} yields a classification with {1} different variable classes".format(partition.getName(), partition.getNClasses()))
 *     detprobdata.addVarPartition(partition)             # <<<<<<<<<<<<<<
 *     return SCIP_OKAY
*/
  __pyx_t_3 = __pyx_v_detprobdata;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_partition};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_addVarPartition, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 33, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/pygcgopt/varclassifier.pxi":34
 *     print("Varclassifier {0} yields a classification with {1} different variable classes".format(partition.getName(), partition.getNClasses()))
 *     detprobdata.addVarPartition(partition)
 *     return SCIP_OKAY             # <<<<<<<<<<<<<<
*/
  __pyx_r = SCIP_OKAY;
  goto __pyx_L0;

  /* "src/pygcgopt/varclassifier.pxi":21
 *     return SCIP_OKAY
 * 
 * cdef SCIP_RETCODE PyVarClassifierClassify(GCG* gcg, GCG_VARCLASSIFIER* varclassifier, SCIP_Bool transformed) noexcept with gil:             # <<<<<<<<<<<<<<
 *     cdef GCG_CLASSIFIERDATA* varclassifierdata
 *     varclassifierdata = GCGvarClassifierGetData(varclassifier)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_WriteUnraisable("pygcgopt.gcg.PyVarClassifierClassify", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (SCIP_RETCODE) 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_varclassifier);
  __Pyx_XDECREF(__pyx_v_detprobdata);
  __Pyx_XDECREF(__pyx_v_vars);
  __Pyx_XDECREF(__pyx_v_partition);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":34
 * 
 * 
 * cdef SCIP_CLOCK* start_new_clock(GCG* gcg):             # <<<<<<<<<<<<<<
 *     cdef SCIP_CLOCK* clock
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)
*/

static SCIP_CLOCK *__pyx_f_8pygcgopt_3gcg_start_new_clock(GCG *__pyx_v_gcg) {
  SCIP_CLOCK *__pyx_v_clock;
  SCIP *__pyx_v_scip;
  SCIP_CLOCK *__pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("start_new_clock", 0);

  /* "pygcgopt/gcg.pyx":36
 * cdef SCIP_CLOCK* start_new_clock(GCG* gcg):
 *     cdef SCIP_CLOCK* clock
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)             # <<<<<<<<<<<<<<
 *     PY_SCIP_CALL(SCIPcreateClock(scip, &clock))
 *     PY_SCIP_CALL(SCIPstartClock(scip, clock))
*/
  __pyx_v_scip = GCGgetOrigprob(__pyx_v_gcg);

  /* "pygcgopt/gcg.pyx":37
 *     cdef SCIP_CLOCK* clock
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)
 *     PY_SCIP_CALL(SCIPcreateClock(scip, &clock))             # <<<<<<<<<<<<<<
 *     PY_SCIP_CALL(SCIPstartClock(scip, clock))
 *     return clock
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(SCIPcreateClock(__pyx_v_scip, (&__pyx_v_clock))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":38
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)
 *     PY_SCIP_CALL(SCIPcreateClock(scip, &clock))
 *     PY_SCIP_CALL(SCIPstartClock(scip, clock))             # <<<<<<<<<<<<<<
 *     return clock
 * 
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyLong_From_SCIP_RETCODE(SCIPstartClock(__pyx_v_scip, __pyx_v_clock)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":39
 *     PY_SCIP_CALL(SCIPcreateClock(scip, &clock))
 *     PY_SCIP_CALL(SCIPstartClock(scip, clock))
 *     return clock             # <<<<<<<<<<<<<<
 * 
 * cdef double stop_and_free_clock(GCG* gcg, SCIP_CLOCK* clock):
*/
  __pyx_r = __pyx_v_clock;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":34
 * 
 * 
 * cdef SCIP_CLOCK* start_new_clock(GCG* gcg):             # <<<<<<<<<<<<<<
 *     cdef SCIP_CLOCK* clock
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)
*/

  /* 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("pygcgopt.gcg.start_new_clock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":41
 *     return clock
 * 
 * cdef double stop_and_free_clock(GCG* gcg, SCIP_CLOCK* clock):             # <<<<<<<<<<<<<<
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)
 *     PY_SCIP_CALL(SCIPstopClock(scip, clock))
*/

static double __pyx_f_8pygcgopt_3gcg_stop_and_free_clock(GCG *__pyx_v_gcg, SCIP_CLOCK *__pyx_v_clock) {
  SCIP *__pyx_v_scip;
  double __pyx_v_detection_time;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("stop_and_free_clock", 0);

  /* "pygcgopt/gcg.pyx":42
 * 
 * cdef double stop_and_free_clock(GCG* gcg, SCIP_CLOCK* clock):
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)             # <<<<<<<<<<<<<<
 *     PY_SCIP_CALL(SCIPstopClock(scip, clock))
 *     cdef double detection_time = SCIPgetClockTime(scip, clock)
*/
  __pyx_v_scip = GCGgetOrigprob(__pyx_v_gcg);

  /* "pygcgopt/gcg.pyx":43
 * cdef double stop_and_free_clock(GCG* gcg, SCIP_CLOCK* clock):
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)
 *     PY_SCIP_CALL(SCIPstopClock(scip, clock))             # <<<<<<<<<<<<<<
 *     cdef double detection_time = SCIPgetClockTime(scip, clock)
 *     PY_SCIP_CALL(SCIPfreeClock(scip, &clock))
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(SCIPstopClock(__pyx_v_scip, __pyx_v_clock)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":44
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)
 *     PY_SCIP_CALL(SCIPstopClock(scip, clock))
 *     cdef double detection_time = SCIPgetClockTime(scip, clock)             # <<<<<<<<<<<<<<
 *     PY_SCIP_CALL(SCIPfreeClock(scip, &clock))
 *     return detection_time
*/
  __pyx_v_detection_time = SCIPgetClockTime(__pyx_v_scip, __pyx_v_clock);

  /* "pygcgopt/gcg.pyx":45
 *     PY_SCIP_CALL(SCIPstopClock(scip, clock))
 *     cdef double detection_time = SCIPgetClockTime(scip, clock)
 *     PY_SCIP_CALL(SCIPfreeClock(scip, &clock))             # <<<<<<<<<<<<<<
 *     return detection_time
 * 
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyLong_From_SCIP_RETCODE(SCIPfreeClock(__pyx_v_scip, (&__pyx_v_clock))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":46
 *     cdef double detection_time = SCIPgetClockTime(scip, clock)
 *     PY_SCIP_CALL(SCIPfreeClock(scip, &clock))
 *     return detection_time             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = __pyx_v_detection_time;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":41
 *     return clock
 * 
 * cdef double stop_and_free_clock(GCG* gcg, SCIP_CLOCK* clock):             # <<<<<<<<<<<<<<
 *     cdef SCIP* scip = GCGgetOrigprob(gcg)
 *     PY_SCIP_CALL(SCIPstopClock(scip, clock))
*/

  /* 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("pygcgopt.gcg.stop_and_free_clock", __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_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS___reduce_cython__, "PY_GCG_PRICINGSTATUS.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_1__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS___reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS___reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS___reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS *__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 and _dict:
*/
  __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
  __pyx_v_state = __pyx_mstate_global->__pyx_empty_tuple;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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 and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         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 and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('False',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[6]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('False',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('False',)
 *     if use_setstate:
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_GCG_PRICINGSTA); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_238750788);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_238750788);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_238750788) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, None), state
 *     else:
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_GCG_PRICINGSTA); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_238750788);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_238750788);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_238750788) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.PY_GCG_PRICINGSTATUS.__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_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_2__setstate_cython__, "PY_GCG_PRICINGSTATUS.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_3__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_2__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PY_GCG_PRICINGSTATUS.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_2__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_GCG_PRICINGSTATUS__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PY_GCG_PRICINGSTATUS.__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 __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_12PY_USERGIVEN_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_12PY_USERGIVEN___reduce_cython__, "PY_USERGIVEN.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_12PY_USERGIVEN_1__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_12PY_USERGIVEN_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_12PY_USERGIVEN___reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_12PY_USERGIVEN_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_12PY_USERGIVEN___reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_12PY_USERGIVEN___reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN *__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 and _dict:
*/
  __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
  __pyx_v_state = __pyx_mstate_global->__pyx_empty_tuple;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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 and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         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 and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('False',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[6]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('False',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('False',)
 *     if use_setstate:
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_USERGIVEN); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_238750788);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_238750788);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_238750788) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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_PY_USERGIVEN, (type(self), 0xe3b0c44, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, None), state
 *     else:
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PY_USERGIVEN__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_USERGIVEN); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_238750788);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_238750788);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_238750788) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.PY_USERGIVEN.__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_PY_USERGIVEN, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_USERGIVEN__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_12PY_USERGIVEN_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_12PY_USERGIVEN_2__setstate_cython__, "PY_USERGIVEN.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_12PY_USERGIVEN_3__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_12PY_USERGIVEN_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_12PY_USERGIVEN_2__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_12PY_USERGIVEN_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PY_USERGIVEN.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_12PY_USERGIVEN_2__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PY_USERGIVEN__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_USERGIVEN__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_USERGIVEN__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PY_USERGIVEN.__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 __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO___reduce_cython__, "PY_VAR_DECOMPINFO.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_1__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO___reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO___reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO___reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO *__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 and _dict:
*/
  __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
  __pyx_v_state = __pyx_mstate_global->__pyx_empty_tuple;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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 and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         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 and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('False',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[6]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('False',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('False',)
 *     if use_setstate:
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_VAR_DECOMPINFO); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_238750788);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_238750788);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_238750788) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, None), state
 *     else:
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_VAR_DECOMPINFO); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_238750788);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_238750788);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_238750788) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.PY_VAR_DECOMPINFO.__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_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_2__setstate_cython__, "PY_VAR_DECOMPINFO.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_3__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_2__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PY_VAR_DECOMPINFO.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_2__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_VAR_DECOMPINFO__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_VAR_DECOMPINFO__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PY_VAR_DECOMPINFO.__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 __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO___reduce_cython__, "PY_CONS_DECOMPINFO.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_1__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO___reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO___reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO___reduce_cython__(struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO *__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 and _dict:
*/
  __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
  __pyx_v_state = __pyx_mstate_global->__pyx_empty_tuple;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_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 and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_3 = (__pyx_v__dict != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 7, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict) != (0)) __PYX_ERR(2, 8, __pyx_L1_error);
    __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 and _dict:
 *         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 and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('False',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, None), state
*/
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[6]); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_2;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('False',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('False',)
 *     if use_setstate:
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_CONS_DECOMPINF); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_238750788);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_238750788);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_238750788) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 13, __pyx_L1_error);
    __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_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, None), state
 *     else:
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_CONS_DECOMPINF); 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))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_238750788);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_238750788);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_mstate_global->__pyx_int_238750788) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 15, __pyx_L1_error);
    __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("pygcgopt.gcg.PY_CONS_DECOMPINFO.__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_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_2__setstate_cython__, "PY_CONS_DECOMPINFO.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_3__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_2__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 16, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 16, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 16, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 16, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.PY_CONS_DECOMPINFO.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_2__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(2, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_CONS_DECOMPINFO__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __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;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_CONS_DECOMPINFO__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_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.PY_CONS_DECOMPINFO.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":79
 *     cdef GCG* _gcg
 * 
 *     def __init__(self, problemName='model', defaultPlugins=True, Model sourceModel=None, creategcg=True):             # <<<<<<<<<<<<<<
 *         """
 *         Main class holding a pointer to SCIP for managing most interactions
*/

/* Python wrapper */
static int __pyx_pw_8pygcgopt_3gcg_5Model_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model___init__, "\n        Main class holding a pointer to SCIP for managing most interactions\n\n        Parameters\n        ----------\n        problemName : str, optional\n            name of the problem (default 'model')\n        defaultPlugins : bool, optional\n            use default plugins? (default True)\n        sourceModel : Model or None, optional\n            create a copy of the given Model instance (default None)\n        enablepricing : bool, optional\n            whether to enable pricing in copy (default False)\n        creategcg : bool, optional\n            initialize the Model object and creates a SCIP instance (default True)\n\n        ");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_8pygcgopt_3gcg_5Model___init__;
#endif
static int __pyx_pw_8pygcgopt_3gcg_5Model_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_problemName = 0;
  CYTHON_UNUSED PyObject *__pyx_v_defaultPlugins = 0;
  struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_sourceModel = 0;
  PyObject *__pyx_v_creategcg = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_problemName,&__pyx_mstate_global->__pyx_n_u_defaultPlugins,&__pyx_mstate_global->__pyx_n_u_sourceModel,&__pyx_mstate_global->__pyx_n_u_creategcg,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 79, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 79, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_model));
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      if (!values[2]) values[2] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_True));
    } else {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 79, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_model));
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      if (!values[2]) values[2] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_problemName = values[0];
    __pyx_v_defaultPlugins = values[1];
    __pyx_v_sourceModel = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)values[2]);
    __pyx_v_creategcg = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 4, __pyx_nargs); __PYX_ERR(0, 79, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sourceModel), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, 1, "sourceModel", 0))) __PYX_ERR(0, 79, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model___init__(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_problemName, __pyx_v_defaultPlugins, __pyx_v_sourceModel, __pyx_v_creategcg);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pygcgopt_3gcg_5Model___init__(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_problemName, CYTHON_UNUSED PyObject *__pyx_v_defaultPlugins, struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_sourceModel, PyObject *__pyx_v_creategcg) {
  int __pyx_r;
  __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;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pygcgopt/gcg.pyx":104
 *         #            self.getMajorVersion(), self.getMinorVersion(), MAJOR, MINOR, PATCH))
 * 
 *         self._freescip = True             # <<<<<<<<<<<<<<
 *         self._modelvars = {}
 * 
*/
  __pyx_v_self->__pyx_base._freescip = 1;

  /* "pygcgopt/gcg.pyx":105
 * 
 *         self._freescip = True
 *         self._modelvars = {}             # <<<<<<<<<<<<<<
 * 
 *         if not creategcg:
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base._modelvars);
  __Pyx_DECREF(__pyx_v_self->__pyx_base._modelvars);
  __pyx_v_self->__pyx_base._modelvars = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":107
 *         self._modelvars = {}
 * 
 *         if not creategcg:             # <<<<<<<<<<<<<<
 *             # if no SCIP instance should be created, then an empty Model object is created.
 *             self._gcg = NULL
*/
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_creategcg); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 107, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {

    /* "pygcgopt/gcg.pyx":109
 *         if not creategcg:
 *             # if no SCIP instance should be created, then an empty Model object is created.
 *             self._gcg = NULL             # <<<<<<<<<<<<<<
 *             self._bestSol = None
 *             self._freegcg = False
*/
    __pyx_v_self->_gcg = NULL;

    /* "pygcgopt/gcg.pyx":110
 *             # if no SCIP instance should be created, then an empty Model object is created.
 *             self._gcg = NULL
 *             self._bestSol = None             # <<<<<<<<<<<<<<
 *             self._freegcg = False
 *         elif sourceModel is None:
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->__pyx_base._bestSol);
    __Pyx_DECREF((PyObject *)__pyx_v_self->__pyx_base._bestSol);
    __pyx_v_self->__pyx_base._bestSol = ((struct __pyx_obj_9pyscipopt_4scip_Solution *)Py_None);

    /* "pygcgopt/gcg.pyx":111
 *             self._gcg = NULL
 *             self._bestSol = None
 *             self._freegcg = False             # <<<<<<<<<<<<<<
 *         elif sourceModel is None:
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))
*/
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_freegcg, Py_False) < (0)) __PYX_ERR(0, 111, __pyx_L1_error)

    /* "pygcgopt/gcg.pyx":107
 *         self._modelvars = {}
 * 
 *         if not creategcg:             # <<<<<<<<<<<<<<
 *             # if no SCIP instance should be created, then an empty Model object is created.
 *             self._gcg = NULL
*/
    goto __pyx_L3;
  }

  /* "pygcgopt/gcg.pyx":112
 *             self._bestSol = None
 *             self._freegcg = False
 *         elif sourceModel is None:             # <<<<<<<<<<<<<<
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))
 *             self._bestSol = None
*/
  __pyx_t_3 = (((PyObject *)__pyx_v_sourceModel) == Py_None);
  if (__pyx_t_3) {

    /* "pygcgopt/gcg.pyx":113
 *             self._freegcg = False
 *         elif sourceModel is None:
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))             # <<<<<<<<<<<<<<
 *             self._bestSol = None
 *             #if defaultPlugins:
*/
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyLong_From_SCIP_RETCODE(GCGcreate((&__pyx_v_self->_gcg))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pygcgopt/gcg.pyx":114
 *         elif sourceModel is None:
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))
 *             self._bestSol = None             # <<<<<<<<<<<<<<
 *             #if defaultPlugins:
 *             #    self.includeDefaultPlugins()
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->__pyx_base._bestSol);
    __Pyx_DECREF((PyObject *)__pyx_v_self->__pyx_base._bestSol);
    __pyx_v_self->__pyx_base._bestSol = ((struct __pyx_obj_9pyscipopt_4scip_Solution *)Py_None);

    /* "pygcgopt/gcg.pyx":117
 *             #if defaultPlugins:
 *             #    self.includeDefaultPlugins()
 *             self._scip = GCGgetOrigprob(self._gcg)             # <<<<<<<<<<<<<<
 *             self.createProbBasic(problemName)
 *         else:
*/
    __pyx_v_self->__pyx_base._scip = GCGgetOrigprob(__pyx_v_self->_gcg);

    /* "pygcgopt/gcg.pyx":118
 *             #    self.includeDefaultPlugins()
 *             self._scip = GCGgetOrigprob(self._gcg)
 *             self.createProbBasic(problemName)             # <<<<<<<<<<<<<<
 *         else:
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))
*/
    __pyx_t_5 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_problemName};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_createProbBasic, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pygcgopt/gcg.pyx":112
 *             self._bestSol = None
 *             self._freegcg = False
 *         elif sourceModel is None:             # <<<<<<<<<<<<<<
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))
 *             self._bestSol = None
*/
    goto __pyx_L3;
  }

  /* "pygcgopt/gcg.pyx":120
 *             self.createProbBasic(problemName)
 *         else:
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))             # <<<<<<<<<<<<<<
 *             self._scip = GCGgetOrigprob(self._gcg)
 *             self._bestSol = <Solution> sourceModel._bestSol
*/
  /*else*/ {
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(GCGcreate((&__pyx_v_self->_gcg))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pygcgopt/gcg.pyx":121
 *         else:
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))
 *             self._scip = GCGgetOrigprob(self._gcg)             # <<<<<<<<<<<<<<
 *             self._bestSol = <Solution> sourceModel._bestSol
 * 
*/
    __pyx_v_self->__pyx_base._scip = GCGgetOrigprob(__pyx_v_self->_gcg);

    /* "pygcgopt/gcg.pyx":122
 *             PY_SCIP_CALL(GCGcreate(&self._gcg))
 *             self._scip = GCGgetOrigprob(self._gcg)
 *             self._bestSol = <Solution> sourceModel._bestSol             # <<<<<<<<<<<<<<
 * 
 *     def includeDefaultPlugins(self):
*/
    __pyx_t_1 = ((PyObject *)__pyx_v_sourceModel->__pyx_base._bestSol);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->__pyx_base._bestSol);
    __Pyx_DECREF((PyObject *)__pyx_v_self->__pyx_base._bestSol);
    __pyx_v_self->__pyx_base._bestSol = ((struct __pyx_obj_9pyscipopt_4scip_Solution *)__pyx_t_1);
    __pyx_t_1 = 0;
  }
  __pyx_L3:;

  /* "pygcgopt/gcg.pyx":79
 *     cdef GCG* _gcg
 * 
 *     def __init__(self, problemName='model', defaultPlugins=True, Model sourceModel=None, creategcg=True):             # <<<<<<<<<<<<<<
 *         """
 *         Main class holding a pointer to SCIP for managing most interactions
*/

  /* function exit code */
  __pyx_r = 0;
  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("pygcgopt.gcg.Model.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":124
 *             self._bestSol = <Solution> sourceModel._bestSol
 * 
 *     def includeDefaultPlugins(self):             # <<<<<<<<<<<<<<
 *         """Includes all default plug-ins of GCG into SCIP
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_3includeDefaultPlugins(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_2includeDefaultPlugins, "Model.includeDefaultPlugins(self)\n\nIncludes all default plug-ins of GCG into SCIP\n\nCalled automatically during initialization of the model.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_3includeDefaultPlugins = {"includeDefaultPlugins", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_3includeDefaultPlugins, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_2includeDefaultPlugins};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_3includeDefaultPlugins(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("includeDefaultPlugins (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("includeDefaultPlugins", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("includeDefaultPlugins", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_2includeDefaultPlugins(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_2includeDefaultPlugins(struct __pyx_obj_8pygcgopt_3gcg_Model *__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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("includeDefaultPlugins", 0);

  /* "pygcgopt/gcg.pyx":129
 *         Called automatically during initialization of the model.
 *         """
 *         PY_SCIP_CALL(GCGincludeGcgPlugins(self._gcg))             # <<<<<<<<<<<<<<
 * 
 *     def addVar(self, *args, **kwargs):
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(GCGincludeGcgPlugins(__pyx_v_self->_gcg)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":124
 *             self._bestSol = <Solution> sourceModel._bestSol
 * 
 *     def includeDefaultPlugins(self):             # <<<<<<<<<<<<<<
 *         """Includes all default plug-ins of GCG into SCIP
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeDefaultPlugins", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":131
 *         PY_SCIP_CALL(GCGincludeGcgPlugins(self._gcg))
 * 
 *     def addVar(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         pyVar = <Variable>super().addVar(*args, **kwargs)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_5addVar(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_4addVar, "Model.addVar(self, *args, **kwargs)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_5addVar = {"addVar", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_5addVar, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_4addVar};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_5addVar(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addVar (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (__pyx_kwds_len > 0) {
    if (unlikely(__Pyx_CheckKeywordStrings("addVar", __pyx_kwds) == -1)) return NULL;
    __pyx_v_kwargs = __Pyx_KwargsAsDict_VARARGS(__pyx_kwds, __pyx_kwvalues);
    if (unlikely(!__pyx_v_kwargs)) return NULL;
    __Pyx_GOTREF(__pyx_v_kwargs);
  } else {
    __pyx_v_kwargs = PyDict_New();
    if (unlikely(!__pyx_v_kwargs)) return NULL;
    __Pyx_GOTREF(__pyx_v_kwargs);
  }
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_4addVar(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs);

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_4addVar(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_9pyscipopt_4scip_Variable *__pyx_v_pyVar = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addVar", 0);

  /* "pygcgopt/gcg.pyx":132
 * 
 *     def addVar(self, *args, **kwargs):
 *         pyVar = <Variable>super().addVar(*args, **kwargs)             # <<<<<<<<<<<<<<
 * 
 *         SCIPvarSetData(pyVar.scip_var, NULL)
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model), ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_addVar); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_pyVar = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":134
 *         pyVar = <Variable>super().addVar(*args, **kwargs)
 * 
 *         SCIPvarSetData(pyVar.scip_var, NULL)             # <<<<<<<<<<<<<<
 * 
 *         return pyVar
*/
  SCIPvarSetData(__pyx_v_pyVar->scip_var, NULL);

  /* "pygcgopt/gcg.pyx":136
 *         SCIPvarSetData(pyVar.scip_var, NULL)
 * 
 *         return pyVar             # <<<<<<<<<<<<<<
 * 
 *     def presolve(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_pyVar);
  __pyx_r = ((PyObject *)__pyx_v_pyVar);
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":131
 *         PY_SCIP_CALL(GCGincludeGcgPlugins(self._gcg))
 * 
 *     def addVar(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         pyVar = <Variable>super().addVar(*args, **kwargs)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.addVar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pyVar);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":138
 *         return pyVar
 * 
 *     def presolve(self):             # <<<<<<<<<<<<<<
 *         """Presolve the problem."""
 *         PY_SCIP_CALL(GCGpresolve(self._gcg))
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_7presolve(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_6presolve, "Model.presolve(self)\n\nPresolve the problem.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_7presolve = {"presolve", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_7presolve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_6presolve};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_7presolve(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("presolve (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("presolve", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("presolve", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_6presolve(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_6presolve(struct __pyx_obj_8pygcgopt_3gcg_Model *__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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("presolve", 0);

  /* "pygcgopt/gcg.pyx":140
 *     def presolve(self):
 *         """Presolve the problem."""
 *         PY_SCIP_CALL(GCGpresolve(self._gcg))             # <<<<<<<<<<<<<<
 * 
 *     def detect(self):
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(GCGpresolve(__pyx_v_self->_gcg)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":138
 *         return pyVar
 * 
 *     def presolve(self):             # <<<<<<<<<<<<<<
 *         """Presolve the problem."""
 *         PY_SCIP_CALL(GCGpresolve(self._gcg))
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.presolve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":142
 *         PY_SCIP_CALL(GCGpresolve(self._gcg))
 * 
 *     def detect(self):             # <<<<<<<<<<<<<<
 *         """Detect the problem.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_9detect(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_8detect, "Model.detect(self)\n\nDetect the problem.\n\nCan be executed before or after presolving. If executed before presolving, the structure is detected on the original problem and presolving is skiped when solving the problem later.\n\n.. seealso:: * :meth:`presolve`\n             * :meth:`optimize`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_9detect = {"detect", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_9detect, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_8detect};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_9detect(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("detect (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("detect", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("detect", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_8detect(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_8detect(struct __pyx_obj_8pygcgopt_3gcg_Model *__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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("detect", 0);

  /* "pygcgopt/gcg.pyx":150
 *                      * :meth:`optimize`
 *         """
 *         PY_SCIP_CALL(GCGdetect(self._gcg))             # <<<<<<<<<<<<<<
 * 
 *     def printStatistics(self):
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(GCGdetect(__pyx_v_self->_gcg)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":142
 *         PY_SCIP_CALL(GCGpresolve(self._gcg))
 * 
 *     def detect(self):             # <<<<<<<<<<<<<<
 *         """Detect the problem.
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.detect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":152
 *         PY_SCIP_CALL(GCGdetect(self._gcg))
 * 
 *     def printStatistics(self):             # <<<<<<<<<<<<<<
 *         """Print solving statistics of GCG to stdout."""
 *         PY_SCIP_CALL(GCGprintStatistics(self._gcg, NULL))
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_11printStatistics(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_10printStatistics, "Model.printStatistics(self)\n\nPrint solving statistics of GCG to stdout.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_11printStatistics = {"printStatistics", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_11printStatistics, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_10printStatistics};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_11printStatistics(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("printStatistics (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("printStatistics", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("printStatistics", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_10printStatistics(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_10printStatistics(struct __pyx_obj_8pygcgopt_3gcg_Model *__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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("printStatistics", 0);

  /* "pygcgopt/gcg.pyx":154
 *     def printStatistics(self):
 *         """Print solving statistics of GCG to stdout."""
 *         PY_SCIP_CALL(GCGprintStatistics(self._gcg, NULL))             # <<<<<<<<<<<<<<
 * 
 *     def printVersion(self):
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(GCGprintStatistics(__pyx_v_self->_gcg, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":152
 *         PY_SCIP_CALL(GCGdetect(self._gcg))
 * 
 *     def printStatistics(self):             # <<<<<<<<<<<<<<
 *         """Print solving statistics of GCG to stdout."""
 *         PY_SCIP_CALL(GCGprintStatistics(self._gcg, NULL))
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.printStatistics", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":156
 *         PY_SCIP_CALL(GCGprintStatistics(self._gcg, NULL))
 * 
 *     def printVersion(self):             # <<<<<<<<<<<<<<
 *         """Print version, copyright information and compile mode of GCG and SCIP"""
 *         GCGprintVersion(self._gcg, NULL)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_13printVersion(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_12printVersion, "Model.printVersion(self)\n\nPrint version, copyright information and compile mode of GCG and SCIP");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_13printVersion = {"printVersion", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_13printVersion, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_12printVersion};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_13printVersion(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("printVersion (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("printVersion", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("printVersion", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_12printVersion(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_12printVersion(struct __pyx_obj_8pygcgopt_3gcg_Model *__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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("printVersion", 0);

  /* "pygcgopt/gcg.pyx":158
 *     def printVersion(self):
 *         """Print version, copyright information and compile mode of GCG and SCIP"""
 *         GCGprintVersion(self._gcg, NULL)             # <<<<<<<<<<<<<<
 * 
 *         super().printVersion()
*/
  GCGprintVersion(__pyx_v_self->_gcg, NULL);

  /* "pygcgopt/gcg.pyx":160
 *         GCGprintVersion(self._gcg, NULL)
 * 
 *         super().printVersion()             # <<<<<<<<<<<<<<
 * 
 *     def optimize(self):
*/
  __pyx_t_4 = NULL;
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model), ((PyObject *)__pyx_v_self)};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_2 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_printVersion, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":156
 *         PY_SCIP_CALL(GCGprintStatistics(self._gcg, NULL))
 * 
 *     def printVersion(self):             # <<<<<<<<<<<<<<
 *         """Print version, copyright information and compile mode of GCG and SCIP"""
 *         GCGprintVersion(self._gcg, NULL)
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.printVersion", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":162
 *         super().printVersion()
 * 
 *     def optimize(self):             # <<<<<<<<<<<<<<
 *         """Optimize the problem.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_15optimize(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_14optimize, "Model.optimize(self)\n\nOptimize the problem.\n\nThis will transform, presolve and detect the problem if neccessary.\nOtherwise, GCG will solve the problem directly.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_15optimize = {"optimize", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_15optimize, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_14optimize};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_15optimize(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("optimize (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("optimize", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("optimize", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_14optimize(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_14optimize(struct __pyx_obj_8pygcgopt_3gcg_Model *__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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("optimize", 0);

  /* "pygcgopt/gcg.pyx":167
 *         This will transform, presolve and detect the problem if neccessary.
 *         Otherwise, GCG will solve the problem directly."""
 *         PY_SCIP_CALL(GCGsolve(self._gcg))             # <<<<<<<<<<<<<<
 *         self._bestSol = Solution.create(self._scip, SCIPgetBestSol(self._scip))
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(GCGsolve(__pyx_v_self->_gcg)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":168
 *         Otherwise, GCG will solve the problem directly."""
 *         PY_SCIP_CALL(GCGsolve(self._gcg))
 *         self._bestSol = Solution.create(self._scip, SCIPgetBestSol(self._scip))             # <<<<<<<<<<<<<<
 * 
 *     def getDualbound(self):
*/
  __pyx_t_1 = __pyx_vtabptr_9pyscipopt_4scip_Solution->create(__pyx_v_self->__pyx_base._scip, SCIPgetBestSol(__pyx_v_self->__pyx_base._scip)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Solution))))) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->__pyx_base._bestSol);
  __Pyx_DECREF((PyObject *)__pyx_v_self->__pyx_base._bestSol);
  __pyx_v_self->__pyx_base._bestSol = ((struct __pyx_obj_9pyscipopt_4scip_Solution *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":162
 *         super().printVersion()
 * 
 *     def optimize(self):             # <<<<<<<<<<<<<<
 *         """Optimize the problem.
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.optimize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":170
 *         self._bestSol = Solution.create(self._scip, SCIPgetBestSol(self._scip))
 * 
 *     def getDualbound(self):             # <<<<<<<<<<<<<<
 *         """Retrieve the best dual bound.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_17getDualbound(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_16getDualbound, "Model.getDualbound(self)\n\nRetrieve the best dual bound.\n\nThis retrieves the same dual bound that GCG reports in the console log. The dual bound is based on the\nobjective value of the optimized linear programming relaxation at the current node.\n\n.. note:: The dual bound at the root node is *not* always equal to the solution of the restricted master problem LP relaxation. This can be due to master cuts or abortion of the pricing loop *before* the restricted master problem is optimal.\n\n:return: The best dual bound of the current node.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_17getDualbound = {"getDualbound", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_17getDualbound, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_16getDualbound};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_17getDualbound(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getDualbound (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getDualbound", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getDualbound", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_16getDualbound(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_16getDualbound(struct __pyx_obj_8pygcgopt_3gcg_Model *__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("getDualbound", 0);

  /* "pygcgopt/gcg.pyx":180
 *         :return: The best dual bound of the current node.
 *         """
 *         return GCGgetDualbound(self._gcg)             # <<<<<<<<<<<<<<
 * 
 *     def getDetprobdataOrig(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(GCGgetDualbound(__pyx_v_self->_gcg)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":170
 *         self._bestSol = Solution.create(self._scip, SCIPgetBestSol(self._scip))
 * 
 *     def getDualbound(self):             # <<<<<<<<<<<<<<
 *         """Retrieve the best dual bound.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getDualbound", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":182
 *         return GCGgetDualbound(self._gcg)
 * 
 *     def getDetprobdataOrig(self):             # <<<<<<<<<<<<<<
 *         """returns the detprobdata for unpresolved problem
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_19getDetprobdataOrig(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_18getDetprobdataOrig, "Model.getDetprobdataOrig(self)\n\nreturns the detprobdata for unpresolved problem\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_19getDetprobdataOrig = {"getDetprobdataOrig", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_19getDetprobdataOrig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_18getDetprobdataOrig};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_19getDetprobdataOrig(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getDetprobdataOrig (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getDetprobdataOrig", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getDetprobdataOrig", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_18getDetprobdataOrig(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_18getDetprobdataOrig(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  gcg::DETPROBDATA *__pyx_v_detprobdata;
  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("getDetprobdataOrig", 0);

  /* "pygcgopt/gcg.pyx":185
 *         """returns the detprobdata for unpresolved problem
 *         """
 *         cdef DETPROBDATA* detprobdata = GCGconshdlrDecompGetDetprobdataOrig(self._gcg)             # <<<<<<<<<<<<<<
 *         return DetProbData.create(detprobdata)
 * 
*/
  __pyx_v_detprobdata = GCGconshdlrDecompGetDetprobdataOrig(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":186
 *         """
 *         cdef DETPROBDATA* detprobdata = GCGconshdlrDecompGetDetprobdataOrig(self._gcg)
 *         return DetProbData.create(detprobdata)             # <<<<<<<<<<<<<<
 * 
 *     def getDetprobdataPresolved(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_11DetProbData_create(__pyx_v_detprobdata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":182
 *         return GCGgetDualbound(self._gcg)
 * 
 *     def getDetprobdataOrig(self):             # <<<<<<<<<<<<<<
 *         """returns the detprobdata for unpresolved problem
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getDetprobdataOrig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":188
 *         return DetProbData.create(detprobdata)
 * 
 *     def getDetprobdataPresolved(self):             # <<<<<<<<<<<<<<
 *         """returns the detprobdata for presolved problem
 *         """
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_21getDetprobdataPresolved(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_20getDetprobdataPresolved, "Model.getDetprobdataPresolved(self)\n\nreturns the detprobdata for presolved problem\n        ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_21getDetprobdataPresolved = {"getDetprobdataPresolved", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_21getDetprobdataPresolved, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_20getDetprobdataPresolved};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_21getDetprobdataPresolved(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getDetprobdataPresolved (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getDetprobdataPresolved", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getDetprobdataPresolved", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_20getDetprobdataPresolved(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_20getDetprobdataPresolved(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  gcg::DETPROBDATA *__pyx_v_detprobdata;
  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("getDetprobdataPresolved", 0);

  /* "pygcgopt/gcg.pyx":191
 *         """returns the detprobdata for presolved problem
 *         """
 *         cdef DETPROBDATA* detprobdata = GCGconshdlrDecompGetDetprobdataPresolved(self._gcg)             # <<<<<<<<<<<<<<
 *         return DetProbData.create(detprobdata)
 * 
*/
  __pyx_v_detprobdata = GCGconshdlrDecompGetDetprobdataPresolved(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":192
 *         """
 *         cdef DETPROBDATA* detprobdata = GCGconshdlrDecompGetDetprobdataPresolved(self._gcg)
 *         return DetProbData.create(detprobdata)             # <<<<<<<<<<<<<<
 * 
 *     def listDecompositions(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_11DetProbData_create(__pyx_v_detprobdata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":188
 *         return DetProbData.create(detprobdata)
 * 
 *     def getDetprobdataPresolved(self):             # <<<<<<<<<<<<<<
 *         """returns the detprobdata for presolved problem
 *         """
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getDetprobdataPresolved", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":194
 *         return DetProbData.create(detprobdata)
 * 
 *     def listDecompositions(self):             # <<<<<<<<<<<<<<
 *         """Lists all finnished decompositions found during the detection loop or provided by the user."""
 *         cdef int npartialdecs = GCGconshdlrDecompGetNPartialdecs(self._gcg)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_23listDecompositions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_22listDecompositions, "Model.listDecompositions(self)\n\nLists all finnished decompositions found during the detection loop or provided by the user.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_23listDecompositions = {"listDecompositions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_23listDecompositions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_22listDecompositions};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_23listDecompositions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("listDecompositions (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("listDecompositions", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("listDecompositions", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_22listDecompositions(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_22listDecompositions(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  int __pyx_v_npartialdecs;
  int *__pyx_v_decids;
  PyObject *__pyx_v_decomps = NULL;
  int __pyx_9genexpr19__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("listDecompositions", 0);

  /* "pygcgopt/gcg.pyx":196
 *     def listDecompositions(self):
 *         """Lists all finnished decompositions found during the detection loop or provided by the user."""
 *         cdef int npartialdecs = GCGconshdlrDecompGetNPartialdecs(self._gcg)             # <<<<<<<<<<<<<<
 *         cdef int* decids = <int*>malloc(npartialdecs * sizeof(int))
 * 
*/
  __pyx_v_npartialdecs = GCGconshdlrDecompGetNPartialdecs(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":197
 *         """Lists all finnished decompositions found during the detection loop or provided by the user."""
 *         cdef int npartialdecs = GCGconshdlrDecompGetNPartialdecs(self._gcg)
 *         cdef int* decids = <int*>malloc(npartialdecs * sizeof(int))             # <<<<<<<<<<<<<<
 * 
 *         GCGconshdlrDecompGetFinishedPartialdecsList(self._gcg, &decids, &npartialdecs)
*/
  __pyx_v_decids = ((int *)malloc((__pyx_v_npartialdecs * (sizeof(int)))));

  /* "pygcgopt/gcg.pyx":199
 *         cdef int* decids = <int*>malloc(npartialdecs * sizeof(int))
 * 
 *         GCGconshdlrDecompGetFinishedPartialdecsList(self._gcg, &decids, &npartialdecs)             # <<<<<<<<<<<<<<
 * 
 *         decomps = [PartialDecomposition.create(GCGconshdlrDecompGetPartialdecFromID(self._gcg, decids[i])) for i in range(npartialdecs)]
*/
  (void)(GCGconshdlrDecompGetFinishedPartialdecsList(__pyx_v_self->_gcg, (&__pyx_v_decids), (&__pyx_v_npartialdecs)));

  /* "pygcgopt/gcg.pyx":201
 *         GCGconshdlrDecompGetFinishedPartialdecsList(self._gcg, &decids, &npartialdecs)
 * 
 *         decomps = [PartialDecomposition.create(GCGconshdlrDecompGetPartialdecFromID(self._gcg, decids[i])) for i in range(npartialdecs)]             # <<<<<<<<<<<<<<
 * 
 *         free(decids)
*/
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_npartialdecs;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_9genexpr19__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(GCGconshdlrDecompGetPartialdecFromID(__pyx_v_self->_gcg, (__pyx_v_decids[__pyx_9genexpr19__pyx_v_i]))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 201, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_v_decomps = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":203
 *         decomps = [PartialDecomposition.create(GCGconshdlrDecompGetPartialdecFromID(self._gcg, decids[i])) for i in range(npartialdecs)]
 * 
 *         free(decids)             # <<<<<<<<<<<<<<
 * 
 *         return decomps
*/
  free(__pyx_v_decids);

  /* "pygcgopt/gcg.pyx":205
 *         free(decids)
 * 
 *         return decomps             # <<<<<<<<<<<<<<
 * 
 *     def getPartDecompFromID(self, id):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_decomps);
  __pyx_r = __pyx_v_decomps;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":194
 *         return DetProbData.create(detprobdata)
 * 
 *     def listDecompositions(self):             # <<<<<<<<<<<<<<
 *         """Lists all finnished decompositions found during the detection loop or provided by the user."""
 *         cdef int npartialdecs = GCGconshdlrDecompGetNPartialdecs(self._gcg)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.listDecompositions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_decomps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":207
 *         return decomps
 * 
 *     def getPartDecompFromID(self, id):             # <<<<<<<<<<<<<<
 *         """returns a partial decomposition regarding to the given partialdecomp id
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_25getPartDecompFromID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_24getPartDecompFromID, "Model.getPartDecompFromID(self, id)\n\nreturns a partial decomposition regarding to the given partialdecomp id\n\n:param id: patial decomposition id as int\n:return: PartialDecomposition object ");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_25getPartDecompFromID = {"getPartDecompFromID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_25getPartDecompFromID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_24getPartDecompFromID};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_25getPartDecompFromID(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_id = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getPartDecompFromID (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_id,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 207, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 207, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getPartDecompFromID", 0) < (0)) __PYX_ERR(0, 207, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getPartDecompFromID", 1, 1, 1, i); __PYX_ERR(0, 207, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 207, __pyx_L3_error)
    }
    __pyx_v_id = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getPartDecompFromID", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 207, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getPartDecompFromID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_24getPartDecompFromID(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_id);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_24getPartDecompFromID(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_id) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_pd = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getPartDecompFromID", 0);

  /* "pygcgopt/gcg.pyx":213
 *         :return: PartialDecomposition object
 *         """
 *         cdef PartialDecomposition pd = PartialDecomposition.create(GCGconshdlrDecompGetPartialdecFromID(self._gcg, id))             # <<<<<<<<<<<<<<
 * 
 *         return pd
*/
  __pyx_t_1 = __Pyx_PyLong_As_int(__pyx_v_id); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 213, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(GCGconshdlrDecompGetPartialdecFromID(__pyx_v_self->_gcg, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition))))) __PYX_ERR(0, 213, __pyx_L1_error)
  __pyx_v_pd = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":215
 *         cdef PartialDecomposition pd = PartialDecomposition.create(GCGconshdlrDecompGetPartialdecFromID(self._gcg, id))
 * 
 *         return pd             # <<<<<<<<<<<<<<
 * 
 *     def addDecompositionFromConss(self, master_conss, *block_conss):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_pd);
  __pyx_r = ((PyObject *)__pyx_v_pd);
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":207
 *         return decomps
 * 
 *     def getPartDecompFromID(self, id):             # <<<<<<<<<<<<<<
 *         """returns a partial decomposition regarding to the given partialdecomp id
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getPartDecompFromID", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pd);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":217
 *         return pd
 * 
 *     def addDecompositionFromConss(self, master_conss, *block_conss):             # <<<<<<<<<<<<<<
 *         """Adds a user specified decomposition to GCG based on constraints.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_27addDecompositionFromConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_26addDecompositionFromConss, "Model.addDecompositionFromConss(self, master_conss, *block_conss)\n\nAdds a user specified decomposition to GCG based on constraints.\n\n:param master_conss: An iterable of Constraint objects. Can be the empty list.\n:param block_conss: Any number of lists. The Constraints from each list will be turned into their own block. (optional)\n:return: The created PartialDecomposition object\n\nCreates a PartialDecomposition object using createDecomposition(). Fixes the master constraints with\nfixMasterConss() and the block constraints with fixBlockConss(). The decomposition is added with addDecomposition().");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_27addDecompositionFromConss = {"addDecompositionFromConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_27addDecompositionFromConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_26addDecompositionFromConss};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_27addDecompositionFromConss(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_master_conss = 0;
  PyObject *__pyx_v_block_conss = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addDecompositionFromConss (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  __pyx_v_block_conss = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 1, __pyx_nargs);
  if (unlikely(!__pyx_v_block_conss)) {
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __Pyx_GOTREF(__pyx_v_block_conss);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_master_conss,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 217, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        default:
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 217, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      const Py_ssize_t used_pos_args = (kwd_pos_args < 1) ? kwd_pos_args : 1;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, used_pos_args, __pyx_kwds_len, "addDecompositionFromConss", 0) < (0)) __PYX_ERR(0, 217, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addDecompositionFromConss", 0, 1, 1, i); __PYX_ERR(0, 217, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs < 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 217, __pyx_L3_error)
    }
    __pyx_v_master_conss = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addDecompositionFromConss", 0, 1, 1, __pyx_nargs); __PYX_ERR(0, 217, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_DECREF(__pyx_v_block_conss); __pyx_v_block_conss = 0;
  __Pyx_AddTraceback("pygcgopt.gcg.Model.addDecompositionFromConss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_26addDecompositionFromConss(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_master_conss, __pyx_v_block_conss);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_DECREF(__pyx_v_block_conss);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_26addDecompositionFromConss(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_master_conss, PyObject *__pyx_v_block_conss) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_pd = 0;
  PyObject *__pyx_v_idx = NULL;
  PyObject *__pyx_v_conss = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addDecompositionFromConss", 0);

  /* "pygcgopt/gcg.pyx":227
 *         fixMasterConss() and the block constraints with fixBlockConss(). The decomposition is added with addDecomposition().
 *         """
 *         cdef PartialDecomposition pd = self.createDecomposition()             # <<<<<<<<<<<<<<
 *         pd.fixConssToMaster(master_conss)
 *         for idx, conss in enumerate(block_conss):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_createDecomposition, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition))))) __PYX_ERR(0, 227, __pyx_L1_error)
  __pyx_v_pd = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":228
 *         """
 *         cdef PartialDecomposition pd = self.createDecomposition()
 *         pd.fixConssToMaster(master_conss)             # <<<<<<<<<<<<<<
 *         for idx, conss in enumerate(block_conss):
 *             if not isinstance(conss, Iterable):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_pd);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_master_conss};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_fixConssToMaster, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":229
 *         cdef PartialDecomposition pd = self.createDecomposition()
 *         pd.fixConssToMaster(master_conss)
 *         for idx, conss in enumerate(block_conss):             # <<<<<<<<<<<<<<
 *             if not isinstance(conss, Iterable):
 *                 pd.fixConsToBlock(conss, idx)
*/
  __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
  __pyx_t_1 = __pyx_mstate_global->__pyx_int_0;
  __pyx_t_2 = __pyx_v_block_conss; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 229, __pyx_L1_error)
      #endif
      if (__pyx_t_4 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4));
    #else
    __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_4);
    #endif
    ++__pyx_t_4;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_conss, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_1);
    __pyx_t_5 = __Pyx_PyLong_AddObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "pygcgopt/gcg.pyx":230
 *         pd.fixConssToMaster(master_conss)
 *         for idx, conss in enumerate(block_conss):
 *             if not isinstance(conss, Iterable):             # <<<<<<<<<<<<<<
 *                 pd.fixConsToBlock(conss, idx)
 *             else:
*/
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_Iterable); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyObject_IsInstance(__pyx_v_conss, __pyx_t_5); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = (!__pyx_t_6);
    if (__pyx_t_7) {

      /* "pygcgopt/gcg.pyx":231
 *         for idx, conss in enumerate(block_conss):
 *             if not isinstance(conss, Iterable):
 *                 pd.fixConsToBlock(conss, idx)             # <<<<<<<<<<<<<<
 *             else:
 *                 pd.fixConssToBlock(conss, idx)
*/
      __pyx_t_8 = ((PyObject *)__pyx_v_pd);
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_3 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_v_conss, __pyx_v_idx};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_fixConsToBlock, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 231, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

      /* "pygcgopt/gcg.pyx":230
 *         pd.fixConssToMaster(master_conss)
 *         for idx, conss in enumerate(block_conss):
 *             if not isinstance(conss, Iterable):             # <<<<<<<<<<<<<<
 *                 pd.fixConsToBlock(conss, idx)
 *             else:
*/
      goto __pyx_L5;
    }

    /* "pygcgopt/gcg.pyx":233
 *                 pd.fixConsToBlock(conss, idx)
 *             else:
 *                 pd.fixConssToBlock(conss, idx)             # <<<<<<<<<<<<<<
 *         self.addDecomposition(pd)
 *         return pd
*/
    /*else*/ {
      __pyx_t_8 = ((PyObject *)__pyx_v_pd);
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_3 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_v_conss, __pyx_v_idx};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_fixConssToBlock, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 233, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L5:;

    /* "pygcgopt/gcg.pyx":229
 *         cdef PartialDecomposition pd = self.createDecomposition()
 *         pd.fixConssToMaster(master_conss)
 *         for idx, conss in enumerate(block_conss):             # <<<<<<<<<<<<<<
 *             if not isinstance(conss, Iterable):
 *                 pd.fixConsToBlock(conss, idx)
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":234
 *             else:
 *                 pd.fixConssToBlock(conss, idx)
 *         self.addDecomposition(pd)             # <<<<<<<<<<<<<<
 *         return pd
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_pd)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_addDecomposition, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":235
 *                 pd.fixConssToBlock(conss, idx)
 *         self.addDecomposition(pd)
 *         return pd             # <<<<<<<<<<<<<<
 * 
 *     def addPreexistingPartialDecomposition(self, PartialDecomposition partialdec):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_pd);
  __pyx_r = ((PyObject *)__pyx_v_pd);
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":217
 *         return pd
 * 
 *     def addDecompositionFromConss(self, master_conss, *block_conss):             # <<<<<<<<<<<<<<
 *         """Adds a user specified decomposition to GCG based on constraints.
 * 
*/

  /* 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_8);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.addDecompositionFromConss", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pd);
  __Pyx_XDECREF(__pyx_v_idx);
  __Pyx_XDECREF(__pyx_v_conss);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":237
 *         return pd
 * 
 *     def addPreexistingPartialDecomposition(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         self.addDecomposition(partialdec)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_29addPreexistingPartialDecomposition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_28addPreexistingPartialDecomposition, "Model.addPreexistingPartialDecomposition(self, PartialDecomposition partialdec)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_29addPreexistingPartialDecomposition = {"addPreexistingPartialDecomposition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_29addPreexistingPartialDecomposition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_28addPreexistingPartialDecomposition};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_29addPreexistingPartialDecomposition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addPreexistingPartialDecomposition (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 237, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 237, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addPreexistingPartialDecomposition", 0) < (0)) __PYX_ERR(0, 237, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addPreexistingPartialDecomposition", 1, 1, 1, i); __PYX_ERR(0, 237, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 237, __pyx_L3_error)
    }
    __pyx_v_partialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addPreexistingPartialDecomposition", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 237, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.addPreexistingPartialDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "partialdec", 0))) __PYX_ERR(0, 237, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_28addPreexistingPartialDecomposition(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_partialdec);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_28addPreexistingPartialDecomposition(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addPreexistingPartialDecomposition", 0);

  /* "pygcgopt/gcg.pyx":238
 * 
 *     def addPreexistingPartialDecomposition(self, PartialDecomposition partialdec):
 *         self.addDecomposition(partialdec)             # <<<<<<<<<<<<<<
 * 
 *     def addDecomposition(self, PartialDecomposition partialdec):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_partialdec)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_addDecomposition, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":237
 *         return pd
 * 
 *     def addPreexistingPartialDecomposition(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         self.addDecomposition(partialdec)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.addPreexistingPartialDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":240
 *         self.addDecomposition(partialdec)
 * 
 *     def addDecomposition(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """Adds a user specified decomposition to GCG.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_31addDecomposition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_30addDecomposition, "Model.addDecomposition(self, PartialDecomposition partialdec)\n\nAdds a user specified decomposition to GCG.\n\nThe passed PartialDecomposition can be partial or finnished. A partial decomposition will be completed by GCG using\nits detector loop. If a finnished decomposition is passed, GCG will skip the detection loop and use the\nprovided decomposition right away.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_31addDecomposition = {"addDecomposition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_31addDecomposition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_30addDecomposition};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_31addDecomposition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addDecomposition (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_partialdec,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 240, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 240, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addDecomposition", 0) < (0)) __PYX_ERR(0, 240, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addDecomposition", 1, 1, 1, i); __PYX_ERR(0, 240, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 240, __pyx_L3_error)
    }
    __pyx_v_partialdec = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addDecomposition", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 240, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.addDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_partialdec), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, 1, "partialdec", 0))) __PYX_ERR(0, 240, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_30addDecomposition(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_partialdec);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_30addDecomposition(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *__pyx_v_partialdec) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addDecomposition", 0);

  /* "pygcgopt/gcg.pyx":247
 *         provided decomposition right away.
 *         """
 *         partialdec.prepare()             # <<<<<<<<<<<<<<
 *         partialdec.setUsergiven()
 *         GCGconshdlrDecompAddPreexisitingPartialDec(self._gcg, partialdec.thisptr)
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_partialdec);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_prepare, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":248
 *         """
 *         partialdec.prepare()
 *         partialdec.setUsergiven()             # <<<<<<<<<<<<<<
 *         GCGconshdlrDecompAddPreexisitingPartialDec(self._gcg, partialdec.thisptr)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_partialdec);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setUsergiven, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":249
 *         partialdec.prepare()
 *         partialdec.setUsergiven()
 *         GCGconshdlrDecompAddPreexisitingPartialDec(self._gcg, partialdec.thisptr)             # <<<<<<<<<<<<<<
 * 
 *     def createDecomposition(self):
*/
  (void)(GCGconshdlrDecompAddPreexisitingPartialDec(__pyx_v_self->_gcg, __pyx_v_partialdec->thisptr));

  /* "pygcgopt/gcg.pyx":240
 *         self.addDecomposition(partialdec)
 * 
 *     def addDecomposition(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """Adds a user specified decomposition to GCG.
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.addDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":251
 *         GCGconshdlrDecompAddPreexisitingPartialDec(self._gcg, partialdec.thisptr)
 * 
 *     def createDecomposition(self):             # <<<<<<<<<<<<<<
 *         """Creates a new empty PartialDecomposition.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_33createDecomposition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_32createDecomposition, "Model.createDecomposition(self)\n\nCreates a new empty PartialDecomposition.\n\nThe created PartialDecomposition object can be used to fix constraints and variables. Afterwards, it can be\npassed to the model through addPreexistingPartialDecomposition().\n\n.. seealso:: * :meth:`PartialDecomposition.fixConsToMaster`\n             * :meth:`PartialDecomposition.fixConssToMaster`\n             * :meth:`PartialDecomposition.fixConsToBlock`\n             * :meth:`PartialDecomposition.fixConssToBlock`\n             * :meth:`PartialDecomposition.fixConsToBlockId`\n             * :meth:`PartialDecomposition.fixConssToBlockId`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_33createDecomposition = {"createDecomposition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_33createDecomposition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_32createDecomposition};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_33createDecomposition(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("createDecomposition (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("createDecomposition", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("createDecomposition", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_32createDecomposition(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_32createDecomposition(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  bool __pyx_v_is_presolved;
  gcg::PARTIALDECOMP *__pyx_v_decomp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  bool __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("createDecomposition", 0);

  /* "pygcgopt/gcg.pyx":264
 *                      * :meth:`PartialDecomposition.fixConssToBlockId`
 *         """
 *         cdef bool is_presolved = self.getStage() >= SCIP_STAGE_PRESOLVED             # <<<<<<<<<<<<<<
 *         cdef PARTIALDECOMP* decomp = new PARTIALDECOMP(self._gcg, not is_presolved)
 *         return PartialDecomposition.create(decomp)
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getStage, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_2 = __Pyx_PyLong_From_SCIP_STAGE(SCIP_STAGE_PRESOLVED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_is_presolved = __pyx_t_5;

  /* "pygcgopt/gcg.pyx":265
 *         """
 *         cdef bool is_presolved = self.getStage() >= SCIP_STAGE_PRESOLVED
 *         cdef PARTIALDECOMP* decomp = new PARTIALDECOMP(self._gcg, not is_presolved)             # <<<<<<<<<<<<<<
 *         return PartialDecomposition.create(decomp)
 * 
*/
  __pyx_v_decomp = new gcg::PARTIALDECOMP(__pyx_v_self->_gcg, (!(__pyx_v_is_presolved != 0)));

  /* "pygcgopt/gcg.pyx":266
 *         cdef bool is_presolved = self.getStage() >= SCIP_STAGE_PRESOLVED
 *         cdef PARTIALDECOMP* decomp = new PARTIALDECOMP(self._gcg, not is_presolved)
 *         return PartialDecomposition.create(decomp)             # <<<<<<<<<<<<<<
 * 
 *     def includePricingSolver(self, PricingSolver pricingSolver, solvername, desc, priority=0, heuristicEnabled=False, exactEnabled=False):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create(__pyx_v_decomp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":251
 *         GCGconshdlrDecompAddPreexisitingPartialDec(self._gcg, partialdec.thisptr)
 * 
 *     def createDecomposition(self):             # <<<<<<<<<<<<<<
 *         """Creates a new empty PartialDecomposition.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.createDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":268
 *         return PartialDecomposition.create(decomp)
 * 
 *     def includePricingSolver(self, PricingSolver pricingSolver, solvername, desc, priority=0, heuristicEnabled=False, exactEnabled=False):             # <<<<<<<<<<<<<<
 *         c_solvername = str_conversion(solvername)
 *         c_desc = str_conversion(desc)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_35includePricingSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_34includePricingSolver, "Model.includePricingSolver(self, PricingSolver pricingSolver, solvername, desc, priority=0, heuristicEnabled=False, exactEnabled=False)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_35includePricingSolver = {"includePricingSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_35includePricingSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_34includePricingSolver};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_35includePricingSolver(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_pricingSolver = 0;
  PyObject *__pyx_v_solvername = 0;
  PyObject *__pyx_v_desc = 0;
  PyObject *__pyx_v_priority = 0;
  PyObject *__pyx_v_heuristicEnabled = 0;
  PyObject *__pyx_v_exactEnabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[6] = {0,0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("includePricingSolver (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pricingSolver,&__pyx_mstate_global->__pyx_n_u_solvername,&__pyx_mstate_global->__pyx_n_u_desc,&__pyx_mstate_global->__pyx_n_u_priority,&__pyx_mstate_global->__pyx_n_u_heuristicEnabled,&__pyx_mstate_global->__pyx_n_u_exactEnabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 268, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "includePricingSolver", 0) < (0)) __PYX_ERR(0, 268, __pyx_L3_error)
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_False));
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_False));
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("includePricingSolver", 0, 3, 6, i); __PYX_ERR(0, 268, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 268, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 268, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 268, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 268, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_False));
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_False));
    }
    __pyx_v_pricingSolver = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)values[0]);
    __pyx_v_solvername = values[1];
    __pyx_v_desc = values[2];
    __pyx_v_priority = values[3];
    __pyx_v_heuristicEnabled = values[4];
    __pyx_v_exactEnabled = values[5];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("includePricingSolver", 0, 3, 6, __pyx_nargs); __PYX_ERR(0, 268, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includePricingSolver", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pricingSolver), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, 1, "pricingSolver", 0))) __PYX_ERR(0, 268, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_34includePricingSolver(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_pricingSolver, __pyx_v_solvername, __pyx_v_desc, __pyx_v_priority, __pyx_v_heuristicEnabled, __pyx_v_exactEnabled);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_34includePricingSolver(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__pyx_v_pricingSolver, PyObject *__pyx_v_solvername, PyObject *__pyx_v_desc, PyObject *__pyx_v_priority, PyObject *__pyx_v_heuristicEnabled, PyObject *__pyx_v_exactEnabled) {
  PyObject *__pyx_v_c_solvername = NULL;
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char const *__pyx_t_5;
  char const *__pyx_t_6;
  int __pyx_t_7;
  SCIP_Bool __pyx_t_8;
  SCIP_Bool __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("includePricingSolver", 0);

  /* "pygcgopt/gcg.pyx":269
 * 
 *     def includePricingSolver(self, PricingSolver pricingSolver, solvername, desc, priority=0, heuristicEnabled=False, exactEnabled=False):
 *         c_solvername = str_conversion(solvername)             # <<<<<<<<<<<<<<
 *         c_desc = str_conversion(desc)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_solvername};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_solvername = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":270
 *     def includePricingSolver(self, PricingSolver pricingSolver, solvername, desc, priority=0, heuristicEnabled=False, exactEnabled=False):
 *         c_solvername = str_conversion(solvername)
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 * 
 *         PY_SCIP_CALL(GCGpricerIncludeSolver(
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_desc};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":272
 *         c_desc = str_conversion(desc)
 * 
 *         PY_SCIP_CALL(GCGpricerIncludeSolver(             # <<<<<<<<<<<<<<
 *             self._gcg, c_solvername, c_desc, priority, heuristicEnabled, exactEnabled, PyPricingSolverUpdate,
 *             PyPricingSolverSolve, PyPricingSolverSolveHeur, PyPricingSolverFree, PyPricingSolverInit, PyPricingSolverExit,
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pygcgopt/gcg.pyx":273
 * 
 *         PY_SCIP_CALL(GCGpricerIncludeSolver(
 *             self._gcg, c_solvername, c_desc, priority, heuristicEnabled, exactEnabled, PyPricingSolverUpdate,             # <<<<<<<<<<<<<<
 *             PyPricingSolverSolve, PyPricingSolverSolveHeur, PyPricingSolverFree, PyPricingSolverInit, PyPricingSolverExit,
 *             PyPricingSolverInitSol, PyPricingSolverExitSol, <GCG_SOLVERDATA*>pricingSolver))
*/
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_c_solvername); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 273, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 273, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_As_int(__pyx_v_priority); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 273, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_heuristicEnabled); if (unlikely((__pyx_t_8 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 273, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_exactEnabled); if (unlikely((__pyx_t_9 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 273, __pyx_L1_error)

  /* "pygcgopt/gcg.pyx":272
 *         c_desc = str_conversion(desc)
 * 
 *         PY_SCIP_CALL(GCGpricerIncludeSolver(             # <<<<<<<<<<<<<<
 *             self._gcg, c_solvername, c_desc, priority, heuristicEnabled, exactEnabled, PyPricingSolverUpdate,
 *             PyPricingSolverSolve, PyPricingSolverSolveHeur, PyPricingSolverFree, PyPricingSolverInit, PyPricingSolverExit,
*/
  __pyx_t_10 = __Pyx_PyLong_From_SCIP_RETCODE(GCGpricerIncludeSolver(__pyx_v_self->_gcg, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_f_8pygcgopt_3gcg_PyPricingSolverUpdate, __pyx_f_8pygcgopt_3gcg_PyPricingSolverSolve, __pyx_f_8pygcgopt_3gcg_PyPricingSolverSolveHeur, __pyx_f_8pygcgopt_3gcg_PyPricingSolverFree, __pyx_f_8pygcgopt_3gcg_PyPricingSolverInit, __pyx_f_8pygcgopt_3gcg_PyPricingSolverExit, __pyx_f_8pygcgopt_3gcg_PyPricingSolverInitSol, __pyx_f_8pygcgopt_3gcg_PyPricingSolverExitSol, ((GCG_SOLVERDATA *)__pyx_v_pricingSolver))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_10};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":277
 *             PyPricingSolverInitSol, PyPricingSolverExitSol, <GCG_SOLVERDATA*>pricingSolver))
 * 
 *         pricingSolver.model = <Model>weakref.proxy(self)             # <<<<<<<<<<<<<<
 *         pricingSolver.solvername = solvername
 *         Py_INCREF(pricingSolver)
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_weakref); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_proxy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF((PyObject *)__pyx_v_pricingSolver->model);
  __Pyx_DECREF((PyObject *)__pyx_v_pricingSolver->model);
  __pyx_v_pricingSolver->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":278
 * 
 *         pricingSolver.model = <Model>weakref.proxy(self)
 *         pricingSolver.solvername = solvername             # <<<<<<<<<<<<<<
 *         Py_INCREF(pricingSolver)
 * 
*/
  __pyx_t_2 = __pyx_v_solvername;
  __Pyx_INCREF(__pyx_t_2);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 278, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_pricingSolver->solvername);
  __Pyx_DECREF(__pyx_v_pricingSolver->solvername);
  __pyx_v_pricingSolver->solvername = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":279
 *         pricingSolver.model = <Model>weakref.proxy(self)
 *         pricingSolver.solvername = solvername
 *         Py_INCREF(pricingSolver)             # <<<<<<<<<<<<<<
 * 
 *     def listPricingSolvers(self):
*/
  Py_INCREF(((PyObject *)__pyx_v_pricingSolver));

  /* "pygcgopt/gcg.pyx":268
 *         return PartialDecomposition.create(decomp)
 * 
 *     def includePricingSolver(self, PricingSolver pricingSolver, solvername, desc, priority=0, heuristicEnabled=False, exactEnabled=False):             # <<<<<<<<<<<<<<
 *         c_solvername = str_conversion(solvername)
 *         c_desc = str_conversion(desc)
*/

  /* 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_10);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includePricingSolver", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_solvername);
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":281
 *         Py_INCREF(pricingSolver)
 * 
 *     def listPricingSolvers(self):             # <<<<<<<<<<<<<<
 *         cdef int n_pricing_solvers = GCGpricerGetNSolvers(self._gcg)
 *         cdef GCG_SOLVER** pricing_solvers = GCGpricerGetSolvers(self._gcg)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_37listPricingSolvers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_36listPricingSolvers, "Model.listPricingSolvers(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_37listPricingSolvers = {"listPricingSolvers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_37listPricingSolvers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_36listPricingSolvers};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_37listPricingSolvers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("listPricingSolvers (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("listPricingSolvers", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("listPricingSolvers", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_36listPricingSolvers(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_36listPricingSolvers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  int __pyx_v_n_pricing_solvers;
  GCG_SOLVER **__pyx_v_pricing_solvers;
  int __pyx_9genexpr20__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  char const *__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("listPricingSolvers", 0);

  /* "pygcgopt/gcg.pyx":282
 * 
 *     def listPricingSolvers(self):
 *         cdef int n_pricing_solvers = GCGpricerGetNSolvers(self._gcg)             # <<<<<<<<<<<<<<
 *         cdef GCG_SOLVER** pricing_solvers = GCGpricerGetSolvers(self._gcg)
 * 
*/
  __pyx_v_n_pricing_solvers = GCGpricerGetNSolvers(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":283
 *     def listPricingSolvers(self):
 *         cdef int n_pricing_solvers = GCGpricerGetNSolvers(self._gcg)
 *         cdef GCG_SOLVER** pricing_solvers = GCGpricerGetSolvers(self._gcg)             # <<<<<<<<<<<<<<
 * 
 *         return [GCGsolverGetName(pricing_solvers[i]).decode('utf-8') for i in range(n_pricing_solvers)]
*/
  __pyx_v_pricing_solvers = GCGpricerGetSolvers(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":285
 *         cdef GCG_SOLVER** pricing_solvers = GCGpricerGetSolvers(self._gcg)
 * 
 *         return [GCGsolverGetName(pricing_solvers[i]).decode('utf-8') for i in range(n_pricing_solvers)]             # <<<<<<<<<<<<<<
 * 
 *     def setPricingSolverEnabled(self, pricing_solver_name, is_enabled=True):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_n_pricing_solvers;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_9genexpr20__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = GCGsolverGetName((__pyx_v_pricing_solvers[__pyx_9genexpr20__pyx_v_i]));
      __pyx_t_6 = __Pyx_ssize_strlen(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 285, __pyx_L1_error)
      __pyx_t_7 = __Pyx_decode_c_string(__pyx_t_5, 0, __pyx_t_6, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 285, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":281
 *         Py_INCREF(pricingSolver)
 * 
 *     def listPricingSolvers(self):             # <<<<<<<<<<<<<<
 *         cdef int n_pricing_solvers = GCGpricerGetNSolvers(self._gcg)
 *         cdef GCG_SOLVER** pricing_solvers = GCGpricerGetSolvers(self._gcg)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.listPricingSolvers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":287
 *         return [GCGsolverGetName(pricing_solvers[i]).decode('utf-8') for i in range(n_pricing_solvers)]
 * 
 *     def setPricingSolverEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables exact and heuristic solving for the specified pricing solver.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_39setPricingSolverEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_38setPricingSolverEnabled, "Model.setPricingSolverEnabled(self, pricing_solver_name, is_enabled=True)\n\nEnables or disables exact and heuristic solving for the specified pricing solver.\n\n:param pricing_solver_name: The name of the pricing solver.\n:param is_enabled: Decides weather the pricing solver should be enabled or diabled.\n\nThis is a convenience method to access the boolean parameters \"pricingsolver/<name>/exactenabled\" and\n\"pricingsolver/<name>/heurenabled\".\n\nUse :meth:`listPricingSolvers()` to obtain a list of all pricing solvers.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_39setPricingSolverEnabled = {"setPricingSolverEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_39setPricingSolverEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_38setPricingSolverEnabled};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_39setPricingSolverEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_pricing_solver_name = 0;
  PyObject *__pyx_v_is_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPricingSolverEnabled (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pricing_solver_name,&__pyx_mstate_global->__pyx_n_u_is_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 287, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 287, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 287, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPricingSolverEnabled", 0) < (0)) __PYX_ERR(0, 287, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPricingSolverEnabled", 0, 1, 2, i); __PYX_ERR(0, 287, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 287, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 287, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_pricing_solver_name = values[0];
    __pyx_v_is_enabled = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPricingSolverEnabled", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 287, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setPricingSolverEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_38setPricingSolverEnabled(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_pricing_solver_name, __pyx_v_is_enabled);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_38setPricingSolverEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_pricing_solver_name, PyObject *__pyx_v_is_enabled) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPricingSolverEnabled", 0);

  /* "pygcgopt/gcg.pyx":298
 *         Use :meth:`listPricingSolvers()` to obtain a list of all pricing solvers.
 *         """
 *         self.setPricingSolverExactEnabled(pricing_solver_name, is_enabled)             # <<<<<<<<<<<<<<
 *         self.setPricingSolverHeuristicEnabled(pricing_solver_name, is_enabled)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_pricing_solver_name, __pyx_v_is_enabled};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setPricingSolverExactEnabled, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":299
 *         """
 *         self.setPricingSolverExactEnabled(pricing_solver_name, is_enabled)
 *         self.setPricingSolverHeuristicEnabled(pricing_solver_name, is_enabled)             # <<<<<<<<<<<<<<
 * 
 *     def setPricingSolverExactEnabled(self, pricing_solver_name, is_enabled=True):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_pricing_solver_name, __pyx_v_is_enabled};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setPricingSolverHeuristicEnabled, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":287
 *         return [GCGsolverGetName(pricing_solvers[i]).decode('utf-8') for i in range(n_pricing_solvers)]
 * 
 *     def setPricingSolverEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables exact and heuristic solving for the specified pricing solver.
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setPricingSolverEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":301
 *         self.setPricingSolverHeuristicEnabled(pricing_solver_name, is_enabled)
 * 
 *     def setPricingSolverExactEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables exact solving for the specified pricing solver.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_41setPricingSolverExactEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_40setPricingSolverExactEnabled, "Model.setPricingSolverExactEnabled(self, pricing_solver_name, is_enabled=True)\n\nEnables or disables exact solving for the specified pricing solver.\n\n:param pricing_solver_name: The name of the pricing solver.\n:param is_enabled: Decides weather the pricing solver should be enabled or diabled.\n\nThis is a convenience method to access the boolean parameter \"pricingsolver/<name>/exactenabled\".\n\nUse :meth:`listPricingSolvers()` to obtain a list of all pricing solvers.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_41setPricingSolverExactEnabled = {"setPricingSolverExactEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_41setPricingSolverExactEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_40setPricingSolverExactEnabled};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_41setPricingSolverExactEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_pricing_solver_name = 0;
  PyObject *__pyx_v_is_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPricingSolverExactEnabled (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pricing_solver_name,&__pyx_mstate_global->__pyx_n_u_is_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 301, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 301, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 301, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPricingSolverExactEnabled", 0) < (0)) __PYX_ERR(0, 301, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPricingSolverExactEnabled", 0, 1, 2, i); __PYX_ERR(0, 301, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 301, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 301, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_pricing_solver_name = values[0];
    __pyx_v_is_enabled = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPricingSolverExactEnabled", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 301, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setPricingSolverExactEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_40setPricingSolverExactEnabled(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_pricing_solver_name, __pyx_v_is_enabled);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_40setPricingSolverExactEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_pricing_solver_name, PyObject *__pyx_v_is_enabled) {
  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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPricingSolverExactEnabled", 0);

  /* "pygcgopt/gcg.pyx":311
 *         Use :meth:`listPricingSolvers()` to obtain a list of all pricing solvers.
 *         """
 *         self.setBoolParam("pricingsolver/{}/exactenabled".format(pricing_solver_name), is_enabled)             # <<<<<<<<<<<<<<
 * 
 *     def setPricingSolverHeuristicEnabled(self, pricing_solver_name, is_enabled=True):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = __pyx_mstate_global->__pyx_kp_u_pricingsolver_exactenabled;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_pricing_solver_name};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_v_is_enabled};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setBoolParam, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":301
 *         self.setPricingSolverHeuristicEnabled(pricing_solver_name, is_enabled)
 * 
 *     def setPricingSolverExactEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables exact solving for the specified pricing solver.
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setPricingSolverExactEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":313
 *         self.setBoolParam("pricingsolver/{}/exactenabled".format(pricing_solver_name), is_enabled)
 * 
 *     def setPricingSolverHeuristicEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables heuristic solving for the specified pricing solver.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_43setPricingSolverHeuristicEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_42setPricingSolverHeuristicEnabled, "Model.setPricingSolverHeuristicEnabled(self, pricing_solver_name, is_enabled=True)\n\nEnables or disables heuristic solving for the specified pricing solver.\n\n:param pricing_solver_name: The name of the pricing solver.\n:param is_enabled: Decides weather the pricing solver should be enabled or diabled.\n\nThis is a convenience method to access the boolean parameter \"pricingsolver/<name>/heurenabled\".\n\nUse :meth:`listPricingSolvers()` to obtain a list of all pricing solvers.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_43setPricingSolverHeuristicEnabled = {"setPricingSolverHeuristicEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_43setPricingSolverHeuristicEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_42setPricingSolverHeuristicEnabled};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_43setPricingSolverHeuristicEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_pricing_solver_name = 0;
  PyObject *__pyx_v_is_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setPricingSolverHeuristicEnabled (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pricing_solver_name,&__pyx_mstate_global->__pyx_n_u_is_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 313, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 313, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 313, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setPricingSolverHeuristicEnabled", 0) < (0)) __PYX_ERR(0, 313, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setPricingSolverHeuristicEnabled", 0, 1, 2, i); __PYX_ERR(0, 313, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 313, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 313, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_pricing_solver_name = values[0];
    __pyx_v_is_enabled = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setPricingSolverHeuristicEnabled", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 313, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setPricingSolverHeuristicEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_42setPricingSolverHeuristicEnabled(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_pricing_solver_name, __pyx_v_is_enabled);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_42setPricingSolverHeuristicEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_pricing_solver_name, PyObject *__pyx_v_is_enabled) {
  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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setPricingSolverHeuristicEnabled", 0);

  /* "pygcgopt/gcg.pyx":323
 *         Use :meth:`listPricingSolvers()` to obtain a list of all pricing solvers.
 *         """
 *         self.setBoolParam("pricingsolver/{}/heurenabled".format(pricing_solver_name), is_enabled)             # <<<<<<<<<<<<<<
 * 
 *     def includeConsClassifier(self, ConsClassifier consclassifier, consclassifiername, desc, priority=0, enabled=True):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = __pyx_mstate_global->__pyx_kp_u_pricingsolver_heurenabled;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_pricing_solver_name};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_v_is_enabled};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setBoolParam, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":313
 *         self.setBoolParam("pricingsolver/{}/exactenabled".format(pricing_solver_name), is_enabled)
 * 
 *     def setPricingSolverHeuristicEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables heuristic solving for the specified pricing solver.
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setPricingSolverHeuristicEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":325
 *         self.setBoolParam("pricingsolver/{}/heurenabled".format(pricing_solver_name), is_enabled)
 * 
 *     def includeConsClassifier(self, ConsClassifier consclassifier, consclassifiername, desc, priority=0, enabled=True):             # <<<<<<<<<<<<<<
 *         """includes a constraint classifier
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_45includeConsClassifier(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_44includeConsClassifier, "Model.includeConsClassifier(self, ConsClassifier consclassifier, consclassifiername, desc, priority=0, enabled=True)\n\nincludes a constraint classifier\n\n:param consclassifier: an object of a subclass of consclassifier#ConsClassifier.\n:param consclassifiername: name of constraint classifier\n:param desc: description of constraint classifier");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_45includeConsClassifier = {"includeConsClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_45includeConsClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_44includeConsClassifier};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_45includeConsClassifier(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_consclassifier = 0;
  PyObject *__pyx_v_consclassifiername = 0;
  PyObject *__pyx_v_desc = 0;
  PyObject *__pyx_v_priority = 0;
  PyObject *__pyx_v_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[5] = {0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("includeConsClassifier (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_consclassifier,&__pyx_mstate_global->__pyx_n_u_consclassifiername,&__pyx_mstate_global->__pyx_n_u_desc,&__pyx_mstate_global->__pyx_n_u_priority,&__pyx_mstate_global->__pyx_n_u_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 325, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "includeConsClassifier", 0) < (0)) __PYX_ERR(0, 325, __pyx_L3_error)
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("includeConsClassifier", 0, 3, 5, i); __PYX_ERR(0, 325, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 325, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 325, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 325, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_consclassifier = ((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)values[0]);
    __pyx_v_consclassifiername = values[1];
    __pyx_v_desc = values[2];
    __pyx_v_priority = values[3];
    __pyx_v_enabled = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("includeConsClassifier", 0, 3, 5, __pyx_nargs); __PYX_ERR(0, 325, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeConsClassifier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_consclassifier), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier, 1, "consclassifier", 0))) __PYX_ERR(0, 325, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_44includeConsClassifier(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_consclassifier, __pyx_v_consclassifiername, __pyx_v_desc, __pyx_v_priority, __pyx_v_enabled);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_44includeConsClassifier(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__pyx_v_consclassifier, PyObject *__pyx_v_consclassifiername, PyObject *__pyx_v_desc, PyObject *__pyx_v_priority, PyObject *__pyx_v_enabled) {
  PyObject *__pyx_v_c_consclassifiername = NULL;
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char const *__pyx_t_5;
  char const *__pyx_t_6;
  int __pyx_t_7;
  SCIP_Bool __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("includeConsClassifier", 0);

  /* "pygcgopt/gcg.pyx":332
 *         :param desc: description of constraint classifier
 *         """
 *         c_consclassifiername = str_conversion(consclassifiername)             # <<<<<<<<<<<<<<
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeConsClassifier(
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_consclassifiername};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 332, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_consclassifiername = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":333
 *         """
 *         c_consclassifiername = str_conversion(consclassifiername)
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 *         PY_SCIP_CALL(GCGincludeConsClassifier(
 *             self._gcg, c_consclassifiername, c_desc, priority, enabled,
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_desc};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":334
 *         c_consclassifiername = str_conversion(consclassifiername)
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeConsClassifier(             # <<<<<<<<<<<<<<
 *             self._gcg, c_consclassifiername, c_desc, priority, enabled,
 *             <GCG_CLASSIFIERDATA*>consclassifier, PyConsClassifierFree, PyConsClassifierClassify))
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pygcgopt/gcg.pyx":335
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeConsClassifier(
 *             self._gcg, c_consclassifiername, c_desc, priority, enabled,             # <<<<<<<<<<<<<<
 *             <GCG_CLASSIFIERDATA*>consclassifier, PyConsClassifierFree, PyConsClassifierClassify))
 * 
*/
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_c_consclassifiername); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 335, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 335, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_As_int(__pyx_v_priority); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 335, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_enabled); if (unlikely((__pyx_t_8 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 335, __pyx_L1_error)

  /* "pygcgopt/gcg.pyx":334
 *         c_consclassifiername = str_conversion(consclassifiername)
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeConsClassifier(             # <<<<<<<<<<<<<<
 *             self._gcg, c_consclassifiername, c_desc, priority, enabled,
 *             <GCG_CLASSIFIERDATA*>consclassifier, PyConsClassifierFree, PyConsClassifierClassify))
*/
  __pyx_t_9 = __Pyx_PyLong_From_SCIP_RETCODE(GCGincludeConsClassifier(__pyx_v_self->_gcg, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, ((GCG_CLASSIFIERDATA *)__pyx_v_consclassifier), __pyx_f_8pygcgopt_3gcg_PyConsClassifierFree, __pyx_f_8pygcgopt_3gcg_PyConsClassifierClassify)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_9};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":338
 *             <GCG_CLASSIFIERDATA*>consclassifier, PyConsClassifierFree, PyConsClassifierClassify))
 * 
 *         consclassifier.model = <Model>weakref.proxy(self)             # <<<<<<<<<<<<<<
 *         consclassifier.name = consclassifiername
 *         Py_INCREF(consclassifier)
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_weakref); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_proxy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF((PyObject *)__pyx_v_consclassifier->model);
  __Pyx_DECREF((PyObject *)__pyx_v_consclassifier->model);
  __pyx_v_consclassifier->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":339
 * 
 *         consclassifier.model = <Model>weakref.proxy(self)
 *         consclassifier.name = consclassifiername             # <<<<<<<<<<<<<<
 *         Py_INCREF(consclassifier)
 * 
*/
  __pyx_t_2 = __pyx_v_consclassifiername;
  __Pyx_INCREF(__pyx_t_2);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 339, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_consclassifier->name);
  __Pyx_DECREF(__pyx_v_consclassifier->name);
  __pyx_v_consclassifier->name = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":340
 *         consclassifier.model = <Model>weakref.proxy(self)
 *         consclassifier.name = consclassifiername
 *         Py_INCREF(consclassifier)             # <<<<<<<<<<<<<<
 * 
 *     def getNConsClassifiers(self):
*/
  Py_INCREF(((PyObject *)__pyx_v_consclassifier));

  /* "pygcgopt/gcg.pyx":325
 *         self.setBoolParam("pricingsolver/{}/heurenabled".format(pricing_solver_name), is_enabled)
 * 
 *     def includeConsClassifier(self, ConsClassifier consclassifier, consclassifiername, desc, priority=0, enabled=True):             # <<<<<<<<<<<<<<
 *         """includes a constraint classifier
 * 
*/

  /* 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_9);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeConsClassifier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_consclassifiername);
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":342
 *         Py_INCREF(consclassifier)
 * 
 *     def getNConsClassifiers(self):             # <<<<<<<<<<<<<<
 *         """returns the number of all constraint classifiers
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_47getNConsClassifiers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_46getNConsClassifiers, "Model.getNConsClassifiers(self)\n\nreturns the number of all constraint classifiers\n\n:return: number of constraint classifiers\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_47getNConsClassifiers = {"getNConsClassifiers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_47getNConsClassifiers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_46getNConsClassifiers};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_47getNConsClassifiers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNConsClassifiers (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNConsClassifiers", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNConsClassifiers", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_46getNConsClassifiers(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_46getNConsClassifiers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  int __pyx_v_n_consclassifiers;
  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("getNConsClassifiers", 0);

  /* "pygcgopt/gcg.pyx":348
 *         :rtype: int
 *         """
 *         cdef int n_consclassifiers = GCGconshdlrDecompGetNConsClassifiers(self._gcg)             # <<<<<<<<<<<<<<
 *         return n_consclassifiers
 * 
*/
  __pyx_v_n_consclassifiers = GCGconshdlrDecompGetNConsClassifiers(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":349
 *         """
 *         cdef int n_consclassifiers = GCGconshdlrDecompGetNConsClassifiers(self._gcg)
 *         return n_consclassifiers             # <<<<<<<<<<<<<<
 * 
 *     def listConsClassifiers(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_n_consclassifiers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":342
 *         Py_INCREF(consclassifier)
 * 
 *     def getNConsClassifiers(self):             # <<<<<<<<<<<<<<
 *         """returns the number of all constraint classifiers
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getNConsClassifiers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":351
 *         return n_consclassifiers
 * 
 *     def listConsClassifiers(self):             # <<<<<<<<<<<<<<
 *         """lists all constraint classifiers that are currently included
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_49listConsClassifiers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_48listConsClassifiers, "Model.listConsClassifiers(self)\n\nlists all constraint classifiers that are currently included\n\n:return: list of strings of the constraint classifier names");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_49listConsClassifiers = {"listConsClassifiers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_49listConsClassifiers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_48listConsClassifiers};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_49listConsClassifiers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("listConsClassifiers (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("listConsClassifiers", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("listConsClassifiers", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_48listConsClassifiers(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_48listConsClassifiers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  int __pyx_v_n_consclassifiers;
  GCG_CONSCLASSIFIER **__pyx_v_consclassifiers;
  int __pyx_9genexpr21__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  char const *__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("listConsClassifiers", 0);

  /* "pygcgopt/gcg.pyx":356
 *         :return: list of strings of the constraint classifier names
 *         """
 *         cdef int n_consclassifiers = GCGconshdlrDecompGetNConsClassifiers(self._gcg)             # <<<<<<<<<<<<<<
 *         cdef GCG_CONSCLASSIFIER** consclassifiers = GCGconshdlrDecompGetConsClassifiers(self._gcg)
 * 
*/
  __pyx_v_n_consclassifiers = GCGconshdlrDecompGetNConsClassifiers(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":357
 *         """
 *         cdef int n_consclassifiers = GCGconshdlrDecompGetNConsClassifiers(self._gcg)
 *         cdef GCG_CONSCLASSIFIER** consclassifiers = GCGconshdlrDecompGetConsClassifiers(self._gcg)             # <<<<<<<<<<<<<<
 * 
 *         return [GCGconsClassifierGetName(consclassifiers[i]).decode('utf-8') for i in range(n_consclassifiers)]
*/
  __pyx_v_consclassifiers = GCGconshdlrDecompGetConsClassifiers(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":359
 *         cdef GCG_CONSCLASSIFIER** consclassifiers = GCGconshdlrDecompGetConsClassifiers(self._gcg)
 * 
 *         return [GCGconsClassifierGetName(consclassifiers[i]).decode('utf-8') for i in range(n_consclassifiers)]             # <<<<<<<<<<<<<<
 * 
 *     def includeVarClassifier(self, VarClassifier varclassifier, varclassifiername, desc, priority=0, enabled=True):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_n_consclassifiers;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_9genexpr21__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = GCGconsClassifierGetName((__pyx_v_consclassifiers[__pyx_9genexpr21__pyx_v_i]));
      __pyx_t_6 = __Pyx_ssize_strlen(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 359, __pyx_L1_error)
      __pyx_t_7 = __Pyx_decode_c_string(__pyx_t_5, 0, __pyx_t_6, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 359, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 359, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":351
 *         return n_consclassifiers
 * 
 *     def listConsClassifiers(self):             # <<<<<<<<<<<<<<
 *         """lists all constraint classifiers that are currently included
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.listConsClassifiers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":361
 *         return [GCGconsClassifierGetName(consclassifiers[i]).decode('utf-8') for i in range(n_consclassifiers)]
 * 
 *     def includeVarClassifier(self, VarClassifier varclassifier, varclassifiername, desc, priority=0, enabled=True):             # <<<<<<<<<<<<<<
 *         """includes a variable classifier
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_51includeVarClassifier(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_50includeVarClassifier, "Model.includeVarClassifier(self, VarClassifier varclassifier, varclassifiername, desc, priority=0, enabled=True)\n\nincludes a variable classifier\n\n:param varclassifier: an object of a subclass of varclassifier#VarClassifier.\n:param varclassifiername: name of variable classifier\n:param desc: description of variable classifier");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_51includeVarClassifier = {"includeVarClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_51includeVarClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_50includeVarClassifier};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_51includeVarClassifier(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_varclassifier = 0;
  PyObject *__pyx_v_varclassifiername = 0;
  PyObject *__pyx_v_desc = 0;
  PyObject *__pyx_v_priority = 0;
  PyObject *__pyx_v_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[5] = {0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("includeVarClassifier (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_varclassifier,&__pyx_mstate_global->__pyx_n_u_varclassifiername,&__pyx_mstate_global->__pyx_n_u_desc,&__pyx_mstate_global->__pyx_n_u_priority,&__pyx_mstate_global->__pyx_n_u_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 361, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 361, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 361, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 361, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 361, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 361, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "includeVarClassifier", 0) < (0)) __PYX_ERR(0, 361, __pyx_L3_error)
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("includeVarClassifier", 0, 3, 5, i); __PYX_ERR(0, 361, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 361, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 361, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 361, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 361, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 361, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_varclassifier = ((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)values[0]);
    __pyx_v_varclassifiername = values[1];
    __pyx_v_desc = values[2];
    __pyx_v_priority = values[3];
    __pyx_v_enabled = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("includeVarClassifier", 0, 3, 5, __pyx_nargs); __PYX_ERR(0, 361, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeVarClassifier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varclassifier), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarClassifier, 1, "varclassifier", 0))) __PYX_ERR(0, 361, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_50includeVarClassifier(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_varclassifier, __pyx_v_varclassifiername, __pyx_v_desc, __pyx_v_priority, __pyx_v_enabled);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_50includeVarClassifier(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__pyx_v_varclassifier, PyObject *__pyx_v_varclassifiername, PyObject *__pyx_v_desc, PyObject *__pyx_v_priority, PyObject *__pyx_v_enabled) {
  PyObject *__pyx_v_c_varclassifiername = NULL;
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char const *__pyx_t_5;
  char const *__pyx_t_6;
  int __pyx_t_7;
  SCIP_Bool __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("includeVarClassifier", 0);

  /* "pygcgopt/gcg.pyx":368
 *         :param desc: description of variable classifier
 *         """
 *         c_varclassifiername = str_conversion(varclassifiername)             # <<<<<<<<<<<<<<
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeVarClassifier(
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_varclassifiername};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_varclassifiername = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":369
 *         """
 *         c_varclassifiername = str_conversion(varclassifiername)
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 *         PY_SCIP_CALL(GCGincludeVarClassifier(
 *             self._gcg, c_varclassifiername, c_desc, priority, enabled,
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_desc};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":370
 *         c_varclassifiername = str_conversion(varclassifiername)
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeVarClassifier(             # <<<<<<<<<<<<<<
 *             self._gcg, c_varclassifiername, c_desc, priority, enabled,
 *             <GCG_CLASSIFIERDATA*>varclassifier, PyVarClassifierFree, PyVarClassifierClassify))
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pygcgopt/gcg.pyx":371
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeVarClassifier(
 *             self._gcg, c_varclassifiername, c_desc, priority, enabled,             # <<<<<<<<<<<<<<
 *             <GCG_CLASSIFIERDATA*>varclassifier, PyVarClassifierFree, PyVarClassifierClassify))
 * 
*/
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_c_varclassifiername); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 371, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 371, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_As_int(__pyx_v_priority); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 371, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_enabled); if (unlikely((__pyx_t_8 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 371, __pyx_L1_error)

  /* "pygcgopt/gcg.pyx":370
 *         c_varclassifiername = str_conversion(varclassifiername)
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeVarClassifier(             # <<<<<<<<<<<<<<
 *             self._gcg, c_varclassifiername, c_desc, priority, enabled,
 *             <GCG_CLASSIFIERDATA*>varclassifier, PyVarClassifierFree, PyVarClassifierClassify))
*/
  __pyx_t_9 = __Pyx_PyLong_From_SCIP_RETCODE(GCGincludeVarClassifier(__pyx_v_self->_gcg, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, ((GCG_CLASSIFIERDATA *)__pyx_v_varclassifier), __pyx_f_8pygcgopt_3gcg_PyVarClassifierFree, __pyx_f_8pygcgopt_3gcg_PyVarClassifierClassify)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_9};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":374
 *             <GCG_CLASSIFIERDATA*>varclassifier, PyVarClassifierFree, PyVarClassifierClassify))
 * 
 *         varclassifier.model = <Model>weakref.proxy(self)             # <<<<<<<<<<<<<<
 *         varclassifier.name = varclassifiername
 *         Py_INCREF(varclassifier)
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_weakref); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_proxy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 374, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF((PyObject *)__pyx_v_varclassifier->model);
  __Pyx_DECREF((PyObject *)__pyx_v_varclassifier->model);
  __pyx_v_varclassifier->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":375
 * 
 *         varclassifier.model = <Model>weakref.proxy(self)
 *         varclassifier.name = varclassifiername             # <<<<<<<<<<<<<<
 *         Py_INCREF(varclassifier)
 * 
*/
  __pyx_t_2 = __pyx_v_varclassifiername;
  __Pyx_INCREF(__pyx_t_2);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 375, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_varclassifier->name);
  __Pyx_DECREF(__pyx_v_varclassifier->name);
  __pyx_v_varclassifier->name = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":376
 *         varclassifier.model = <Model>weakref.proxy(self)
 *         varclassifier.name = varclassifiername
 *         Py_INCREF(varclassifier)             # <<<<<<<<<<<<<<
 * 
 *     def getNVarClassifiers(self):
*/
  Py_INCREF(((PyObject *)__pyx_v_varclassifier));

  /* "pygcgopt/gcg.pyx":361
 *         return [GCGconsClassifierGetName(consclassifiers[i]).decode('utf-8') for i in range(n_consclassifiers)]
 * 
 *     def includeVarClassifier(self, VarClassifier varclassifier, varclassifiername, desc, priority=0, enabled=True):             # <<<<<<<<<<<<<<
 *         """includes a variable classifier
 * 
*/

  /* 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_9);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeVarClassifier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_varclassifiername);
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":378
 *         Py_INCREF(varclassifier)
 * 
 *     def getNVarClassifiers(self):             # <<<<<<<<<<<<<<
 *         """returns the number of all variable classifiers
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_53getNVarClassifiers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_52getNVarClassifiers, "Model.getNVarClassifiers(self)\n\nreturns the number of all variable classifiers\n\n:return: number of variable classifiers\n:rtype: int");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_53getNVarClassifiers = {"getNVarClassifiers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_53getNVarClassifiers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_52getNVarClassifiers};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_53getNVarClassifiers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getNVarClassifiers (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getNVarClassifiers", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getNVarClassifiers", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_52getNVarClassifiers(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_52getNVarClassifiers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  int __pyx_v_n_varclassifiers;
  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("getNVarClassifiers", 0);

  /* "pygcgopt/gcg.pyx":384
 *         :rtype: int
 *         """
 *         cdef int n_varclassifiers = GCGconshdlrDecompGetNVarClassifiers(self._gcg)             # <<<<<<<<<<<<<<
 *         return n_varclassifiers
 * 
*/
  __pyx_v_n_varclassifiers = GCGconshdlrDecompGetNVarClassifiers(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":385
 *         """
 *         cdef int n_varclassifiers = GCGconshdlrDecompGetNVarClassifiers(self._gcg)
 *         return n_varclassifiers             # <<<<<<<<<<<<<<
 * 
 *     def listVarClassifiers(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_n_varclassifiers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":378
 *         Py_INCREF(varclassifier)
 * 
 *     def getNVarClassifiers(self):             # <<<<<<<<<<<<<<
 *         """returns the number of all variable classifiers
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getNVarClassifiers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":387
 *         return n_varclassifiers
 * 
 *     def listVarClassifiers(self):             # <<<<<<<<<<<<<<
 *         """lists all variable classifiers that are currently included
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_55listVarClassifiers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_54listVarClassifiers, "Model.listVarClassifiers(self)\n\nlists all variable classifiers that are currently included\n\n:return: list of strings of the variable classifier names");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_55listVarClassifiers = {"listVarClassifiers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_55listVarClassifiers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_54listVarClassifiers};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_55listVarClassifiers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("listVarClassifiers (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("listVarClassifiers", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("listVarClassifiers", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_54listVarClassifiers(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_54listVarClassifiers(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  int __pyx_v_n_varclassifiers;
  GCG_VARCLASSIFIER **__pyx_v_varclassifiers;
  int __pyx_9genexpr22__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  char const *__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("listVarClassifiers", 0);

  /* "pygcgopt/gcg.pyx":392
 *         :return: list of strings of the variable classifier names
 *         """
 *         cdef int n_varclassifiers = GCGconshdlrDecompGetNVarClassifiers(self._gcg)             # <<<<<<<<<<<<<<
 *         cdef GCG_VARCLASSIFIER** varclassifiers = GCGconshdlrDecompGetVarClassifiers(self._gcg)
 * 
*/
  __pyx_v_n_varclassifiers = GCGconshdlrDecompGetNVarClassifiers(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":393
 *         """
 *         cdef int n_varclassifiers = GCGconshdlrDecompGetNVarClassifiers(self._gcg)
 *         cdef GCG_VARCLASSIFIER** varclassifiers = GCGconshdlrDecompGetVarClassifiers(self._gcg)             # <<<<<<<<<<<<<<
 * 
 *         return [GCGvarClassifierGetName(varclassifiers[i]).decode('utf-8') for i in range(n_varclassifiers)]
*/
  __pyx_v_varclassifiers = GCGconshdlrDecompGetVarClassifiers(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":395
 *         cdef GCG_VARCLASSIFIER** varclassifiers = GCGconshdlrDecompGetVarClassifiers(self._gcg)
 * 
 *         return [GCGvarClassifierGetName(varclassifiers[i]).decode('utf-8') for i in range(n_varclassifiers)]             # <<<<<<<<<<<<<<
 * 
 *     def setVarClassifierEnabled(self, varclassifier_name, is_enabled=True):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_n_varclassifiers;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_9genexpr22__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = GCGvarClassifierGetName((__pyx_v_varclassifiers[__pyx_9genexpr22__pyx_v_i]));
      __pyx_t_6 = __Pyx_ssize_strlen(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 395, __pyx_L1_error)
      __pyx_t_7 = __Pyx_decode_c_string(__pyx_t_5, 0, __pyx_t_6, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 395, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":387
 *         return n_varclassifiers
 * 
 *     def listVarClassifiers(self):             # <<<<<<<<<<<<<<
 *         """lists all variable classifiers that are currently included
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.listVarClassifiers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":397
 *         return [GCGvarClassifierGetName(varclassifiers[i]).decode('utf-8') for i in range(n_varclassifiers)]
 * 
 *     def setVarClassifierEnabled(self, varclassifier_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """enables or disables a variable classifier
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_57setVarClassifierEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_56setVarClassifierEnabled, "Model.setVarClassifierEnabled(self, varclassifier_name, is_enabled=True)\n\nenables or disables a variable classifier\n\n:param varclassifier_name: the name of the variable classifier\n:param is_enabled: decides weather the variable classifier should be enabled or diabled.\n\nThis is a convenience method to access the boolean parameter \"detection/classification/varclassifier/<name>/enabled\".");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_57setVarClassifierEnabled = {"setVarClassifierEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_57setVarClassifierEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_56setVarClassifierEnabled};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_57setVarClassifierEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_varclassifier_name = 0;
  PyObject *__pyx_v_is_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setVarClassifierEnabled (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_varclassifier_name,&__pyx_mstate_global->__pyx_n_u_is_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 397, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 397, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 397, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setVarClassifierEnabled", 0) < (0)) __PYX_ERR(0, 397, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setVarClassifierEnabled", 0, 1, 2, i); __PYX_ERR(0, 397, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 397, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 397, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_varclassifier_name = values[0];
    __pyx_v_is_enabled = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setVarClassifierEnabled", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 397, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setVarClassifierEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_56setVarClassifierEnabled(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_varclassifier_name, __pyx_v_is_enabled);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_56setVarClassifierEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_varclassifier_name, PyObject *__pyx_v_is_enabled) {
  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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setVarClassifierEnabled", 0);

  /* "pygcgopt/gcg.pyx":406
 *         """
 *         # TODO test if varclassifier_name exists
 *         self.setBoolParam("detection/classification/varclassifier/{}/enabled".format(varclassifier_name), is_enabled)             # <<<<<<<<<<<<<<
 * 
 *     def includeDetector(self, Detector detector, detectorname, decchar, desc, freqcallround=1, maxcallround=INT_MAX, mincallround=0, freqcallroundoriginal=1, maxcallroundoriginal=INT_MAX, mincallroundoriginal=0, priority=0, enabled=True, enabledfinishing=False, enabledpostprocessing=False, skip=False, usefulrecall=False):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = __pyx_mstate_global->__pyx_kp_u_detection_classification_varclas;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_varclassifier_name};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_v_is_enabled};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setBoolParam, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":397
 *         return [GCGvarClassifierGetName(varclassifiers[i]).decode('utf-8') for i in range(n_varclassifiers)]
 * 
 *     def setVarClassifierEnabled(self, varclassifier_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """enables or disables a variable classifier
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setVarClassifierEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":408
 *         self.setBoolParam("detection/classification/varclassifier/{}/enabled".format(varclassifier_name), is_enabled)
 * 
 *     def includeDetector(self, Detector detector, detectorname, decchar, desc, freqcallround=1, maxcallround=INT_MAX, mincallround=0, freqcallroundoriginal=1, maxcallroundoriginal=INT_MAX, mincallroundoriginal=0, priority=0, enabled=True, enabledfinishing=False, enabledpostprocessing=False, skip=False, usefulrecall=False):             # <<<<<<<<<<<<<<
 *         """includes a detector
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_59includeDetector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_58includeDetector, "Model.includeDetector(self, Detector detector, detectorname, decchar, desc, freqcallround=1, maxcallround=INT_MAX, mincallround=0, freqcallroundoriginal=1, maxcallroundoriginal=INT_MAX, mincallroundoriginal=0, priority=0, enabled=True, enabledfinishing=False, enabledpostprocessing=False, skip=False, usefulrecall=False)\n\nincludes a detector\n\n:param detector: An object of a subclass of detector#Detector.\n:param detectorname: name of detector\n:param desc: description of detector\n\nFor an explanation for all arguments, see :meth:`GCGincludeDetector()`.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_59includeDetector = {"includeDetector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_59includeDetector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_58includeDetector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_59includeDetector(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector = 0;
  PyObject *__pyx_v_detectorname = 0;
  PyObject *__pyx_v_decchar = 0;
  PyObject *__pyx_v_desc = 0;
  PyObject *__pyx_v_freqcallround = 0;
  PyObject *__pyx_v_maxcallround = 0;
  PyObject *__pyx_v_mincallround = 0;
  PyObject *__pyx_v_freqcallroundoriginal = 0;
  PyObject *__pyx_v_maxcallroundoriginal = 0;
  PyObject *__pyx_v_mincallroundoriginal = 0;
  PyObject *__pyx_v_priority = 0;
  PyObject *__pyx_v_enabled = 0;
  PyObject *__pyx_v_enabledfinishing = 0;
  PyObject *__pyx_v_enabledpostprocessing = 0;
  PyObject *__pyx_v_skip = 0;
  PyObject *__pyx_v_usefulrecall = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("includeDetector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detector,&__pyx_mstate_global->__pyx_n_u_detectorname,&__pyx_mstate_global->__pyx_n_u_decchar,&__pyx_mstate_global->__pyx_n_u_desc,&__pyx_mstate_global->__pyx_n_u_freqcallround,&__pyx_mstate_global->__pyx_n_u_maxcallround,&__pyx_mstate_global->__pyx_n_u_mincallround,&__pyx_mstate_global->__pyx_n_u_freqcallroundoriginal,&__pyx_mstate_global->__pyx_n_u_maxcallroundoriginal,&__pyx_mstate_global->__pyx_n_u_mincallroundoriginal,&__pyx_mstate_global->__pyx_n_u_priority,&__pyx_mstate_global->__pyx_n_u_enabled,&__pyx_mstate_global->__pyx_n_u_enabledfinishing,&__pyx_mstate_global->__pyx_n_u_enabledpostprocessing,&__pyx_mstate_global->__pyx_n_u_skip,&__pyx_mstate_global->__pyx_n_u_usefulrecall,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 408, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case 16:
        values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 15:
        values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 14:
        values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 13:
        values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 12:
        values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 11:
        values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 10:
        values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  9:
        values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "includeDetector", 0) < (0)) __PYX_ERR(0, 408, __pyx_L3_error)
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_1));
      if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__4);
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_1));
      if (!values[8]) values[8] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__5);
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_True));
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_False));
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_False));
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_False));
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_False));
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("includeDetector", 0, 4, 16, i); __PYX_ERR(0, 408, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case 16:
        values[15] = __Pyx_ArgRef_FASTCALL(__pyx_args, 15);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[15])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 15:
        values[14] = __Pyx_ArgRef_FASTCALL(__pyx_args, 14);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[14])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 14:
        values[13] = __Pyx_ArgRef_FASTCALL(__pyx_args, 13);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[13])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 13:
        values[12] = __Pyx_ArgRef_FASTCALL(__pyx_args, 12);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[12])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 12:
        values[11] = __Pyx_ArgRef_FASTCALL(__pyx_args, 11);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[11])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 11:
        values[10] = __Pyx_ArgRef_FASTCALL(__pyx_args, 10);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[10])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case 10:
        values[9] = __Pyx_ArgRef_FASTCALL(__pyx_args, 9);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[9])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  9:
        values[8] = __Pyx_ArgRef_FASTCALL(__pyx_args, 8);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[8])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 408, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 408, __pyx_L3_error)
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 408, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 408, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 408, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_1));
      if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__4);
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_1));
      if (!values[8]) values[8] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__5);
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_True));
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_False));
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_False));
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_False));
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_False));
    }
    __pyx_v_detector = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)values[0]);
    __pyx_v_detectorname = values[1];
    __pyx_v_decchar = values[2];
    __pyx_v_desc = values[3];
    __pyx_v_freqcallround = values[4];
    __pyx_v_maxcallround = values[5];
    __pyx_v_mincallround = values[6];
    __pyx_v_freqcallroundoriginal = values[7];
    __pyx_v_maxcallroundoriginal = values[8];
    __pyx_v_mincallroundoriginal = values[9];
    __pyx_v_priority = values[10];
    __pyx_v_enabled = values[11];
    __pyx_v_enabledfinishing = values[12];
    __pyx_v_enabledpostprocessing = values[13];
    __pyx_v_skip = values[14];
    __pyx_v_usefulrecall = values[15];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("includeDetector", 0, 4, 16, __pyx_nargs); __PYX_ERR(0, 408, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeDetector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_detector), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, 1, "detector", 0))) __PYX_ERR(0, 408, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_58includeDetector(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_detector, __pyx_v_detectorname, __pyx_v_decchar, __pyx_v_desc, __pyx_v_freqcallround, __pyx_v_maxcallround, __pyx_v_mincallround, __pyx_v_freqcallroundoriginal, __pyx_v_maxcallroundoriginal, __pyx_v_mincallroundoriginal, __pyx_v_priority, __pyx_v_enabled, __pyx_v_enabledfinishing, __pyx_v_enabledpostprocessing, __pyx_v_skip, __pyx_v_usefulrecall);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_58includeDetector(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Detector *__pyx_v_detector, PyObject *__pyx_v_detectorname, PyObject *__pyx_v_decchar, PyObject *__pyx_v_desc, PyObject *__pyx_v_freqcallround, PyObject *__pyx_v_maxcallround, PyObject *__pyx_v_mincallround, PyObject *__pyx_v_freqcallroundoriginal, PyObject *__pyx_v_maxcallroundoriginal, PyObject *__pyx_v_mincallroundoriginal, PyObject *__pyx_v_priority, PyObject *__pyx_v_enabled, PyObject *__pyx_v_enabledfinishing, PyObject *__pyx_v_enabledpostprocessing, PyObject *__pyx_v_skip, PyObject *__pyx_v_usefulrecall) {
  PyObject *__pyx_v_c_detectorname = NULL;
  long __pyx_v_c_decchar;
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  long __pyx_t_7;
  char const *__pyx_t_8;
  char const *__pyx_t_9;
  int __pyx_t_10;
  int __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_t_14;
  int __pyx_t_15;
  int __pyx_t_16;
  SCIP_Bool __pyx_t_17;
  SCIP_Bool __pyx_t_18;
  SCIP_Bool __pyx_t_19;
  SCIP_Bool __pyx_t_20;
  SCIP_Bool __pyx_t_21;
  PyObject *__pyx_t_22 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("includeDetector", 0);

  /* "pygcgopt/gcg.pyx":417
 *         For an explanation for all arguments, see :meth:`GCGincludeDetector()`.
 *         """
 *         if len(decchar) != 1:             # <<<<<<<<<<<<<<
 *             raise ValueError("Length of value for 'decchar' must be 1")
 * 
*/
  __pyx_t_1 = PyObject_Length(__pyx_v_decchar); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 417, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 1);
  if (unlikely(__pyx_t_2)) {

    /* "pygcgopt/gcg.pyx":418
 *         """
 *         if len(decchar) != 1:
 *             raise ValueError("Length of value for 'decchar' must be 1")             # <<<<<<<<<<<<<<
 * 
 *         c_detectorname = str_conversion(detectorname)
*/
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Length_of_value_for_decchar_must};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 418, __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, 418, __pyx_L1_error)

    /* "pygcgopt/gcg.pyx":417
 *         For an explanation for all arguments, see :meth:`GCGincludeDetector()`.
 *         """
 *         if len(decchar) != 1:             # <<<<<<<<<<<<<<
 *             raise ValueError("Length of value for 'decchar' must be 1")
 * 
*/
  }

  /* "pygcgopt/gcg.pyx":420
 *             raise ValueError("Length of value for 'decchar' must be 1")
 * 
 *         c_detectorname = str_conversion(detectorname)             # <<<<<<<<<<<<<<
 *         c_decchar = ord(str_conversion(decchar))
 *         c_desc = str_conversion(desc)
*/
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_detectorname};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 420, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_c_detectorname = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pygcgopt/gcg.pyx":421
 * 
 *         c_detectorname = str_conversion(detectorname)
 *         c_decchar = ord(str_conversion(decchar))             # <<<<<<<<<<<<<<
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeDetector(
*/
  __pyx_t_6 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_6);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_decchar};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_3); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_c_decchar = __pyx_t_7;

  /* "pygcgopt/gcg.pyx":422
 *         c_detectorname = str_conversion(detectorname)
 *         c_decchar = ord(str_conversion(decchar))
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 *         PY_SCIP_CALL(GCGincludeDetector(
 *             self._gcg, c_detectorname, c_decchar, c_desc, freqcallround, maxcallround, mincallround,
*/
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_desc};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_c_desc = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pygcgopt/gcg.pyx":423
 *         c_decchar = ord(str_conversion(decchar))
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeDetector(             # <<<<<<<<<<<<<<
 *             self._gcg, c_detectorname, c_decchar, c_desc, freqcallround, maxcallround, mincallround,
 *             freqcallroundoriginal, maxcallroundoriginal, mincallroundoriginal, priority, enabled, enabledfinishing,
*/
  __pyx_t_6 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "pygcgopt/gcg.pyx":424
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeDetector(
 *             self._gcg, c_detectorname, c_decchar, c_desc, freqcallround, maxcallround, mincallround,             # <<<<<<<<<<<<<<
 *             freqcallroundoriginal, maxcallroundoriginal, mincallroundoriginal, priority, enabled, enabledfinishing,
 *             enabledpostprocessing, skip, usefulrecall, <GCG_DETECTORDATA*>detector, PyDetectorFree, PyDetectorInit,
*/
  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_v_c_detectorname); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 424, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(0, 424, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyLong_As_int(__pyx_v_freqcallround); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 424, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyLong_As_int(__pyx_v_maxcallround); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 424, __pyx_L1_error)
  __pyx_t_12 = __Pyx_PyLong_As_int(__pyx_v_mincallround); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 424, __pyx_L1_error)

  /* "pygcgopt/gcg.pyx":425
 *         PY_SCIP_CALL(GCGincludeDetector(
 *             self._gcg, c_detectorname, c_decchar, c_desc, freqcallround, maxcallround, mincallround,
 *             freqcallroundoriginal, maxcallroundoriginal, mincallroundoriginal, priority, enabled, enabledfinishing,             # <<<<<<<<<<<<<<
 *             enabledpostprocessing, skip, usefulrecall, <GCG_DETECTORDATA*>detector, PyDetectorFree, PyDetectorInit,
 *             PyDetectorExit, PyDetectorPropagatePartialdec, PyDetectorFinishPartialdec, PyDetectorPostprocessPartialdec,
*/
  __pyx_t_13 = __Pyx_PyLong_As_int(__pyx_v_freqcallroundoriginal); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 425, __pyx_L1_error)
  __pyx_t_14 = __Pyx_PyLong_As_int(__pyx_v_maxcallroundoriginal); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 425, __pyx_L1_error)
  __pyx_t_15 = __Pyx_PyLong_As_int(__pyx_v_mincallroundoriginal); if (unlikely((__pyx_t_15 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 425, __pyx_L1_error)
  __pyx_t_16 = __Pyx_PyLong_As_int(__pyx_v_priority); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 425, __pyx_L1_error)
  __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_v_enabled); if (unlikely((__pyx_t_17 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 425, __pyx_L1_error)
  __pyx_t_18 = __Pyx_PyObject_IsTrue(__pyx_v_enabledfinishing); if (unlikely((__pyx_t_18 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 425, __pyx_L1_error)

  /* "pygcgopt/gcg.pyx":426
 *             self._gcg, c_detectorname, c_decchar, c_desc, freqcallround, maxcallround, mincallround,
 *             freqcallroundoriginal, maxcallroundoriginal, mincallroundoriginal, priority, enabled, enabledfinishing,
 *             enabledpostprocessing, skip, usefulrecall, <GCG_DETECTORDATA*>detector, PyDetectorFree, PyDetectorInit,             # <<<<<<<<<<<<<<
 *             PyDetectorExit, PyDetectorPropagatePartialdec, PyDetectorFinishPartialdec, PyDetectorPostprocessPartialdec,
 *             PyDetectorSetParamAggressive, PyDetectorSetParamDefault, PyDetectorSetParamFast))
*/
  __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_v_enabledpostprocessing); if (unlikely((__pyx_t_19 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 426, __pyx_L1_error)
  __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_v_skip); if (unlikely((__pyx_t_20 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 426, __pyx_L1_error)
  __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_v_usefulrecall); if (unlikely((__pyx_t_21 == ((SCIP_Bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 426, __pyx_L1_error)

  /* "pygcgopt/gcg.pyx":423
 *         c_decchar = ord(str_conversion(decchar))
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeDetector(             # <<<<<<<<<<<<<<
 *             self._gcg, c_detectorname, c_decchar, c_desc, freqcallround, maxcallround, mincallround,
 *             freqcallroundoriginal, maxcallroundoriginal, mincallroundoriginal, priority, enabled, enabledfinishing,
*/
  __pyx_t_22 = __Pyx_PyLong_From_SCIP_RETCODE(GCGincludeDetector(__pyx_v_self->_gcg, __pyx_t_8, __pyx_v_c_decchar, __pyx_t_9, __pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, ((GCG_DETECTORDATA *)__pyx_v_detector), __pyx_f_8pygcgopt_3gcg_PyDetectorFree, __pyx_f_8pygcgopt_3gcg_PyDetectorInit, __pyx_f_8pygcgopt_3gcg_PyDetectorExit, __pyx_f_8pygcgopt_3gcg_PyDetectorPropagatePartialdec, __pyx_f_8pygcgopt_3gcg_PyDetectorFinishPartialdec, __pyx_f_8pygcgopt_3gcg_PyDetectorPostprocessPartialdec, __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamAggressive, __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamDefault, __pyx_f_8pygcgopt_3gcg_PyDetectorSetParamFast)); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_6);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_22};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pygcgopt/gcg.pyx":430
 *             PyDetectorSetParamAggressive, PyDetectorSetParamDefault, PyDetectorSetParamFast))
 * 
 *         detector.model = <Model>weakref.proxy(self)             # <<<<<<<<<<<<<<
 *         detector.detectorname = detectorname
 *         Py_INCREF(detector)
*/
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_weakref); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_proxy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_self)};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_6 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF((PyObject *)__pyx_v_detector->model);
  __Pyx_DECREF((PyObject *)__pyx_v_detector->model);
  __pyx_v_detector->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "pygcgopt/gcg.pyx":431
 * 
 *         detector.model = <Model>weakref.proxy(self)
 *         detector.detectorname = detectorname             # <<<<<<<<<<<<<<
 *         Py_INCREF(detector)
 * 
*/
  __pyx_t_6 = __pyx_v_detectorname;
  __Pyx_INCREF(__pyx_t_6);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_v_detector->detectorname);
  __Pyx_DECREF(__pyx_v_detector->detectorname);
  __pyx_v_detector->detectorname = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "pygcgopt/gcg.pyx":432
 *         detector.model = <Model>weakref.proxy(self)
 *         detector.detectorname = detectorname
 *         Py_INCREF(detector)             # <<<<<<<<<<<<<<
 * 
 *     def includeScore(self, Score score, scorename, shortname, desc):
*/
  Py_INCREF(((PyObject *)__pyx_v_detector));

  /* "pygcgopt/gcg.pyx":408
 *         self.setBoolParam("detection/classification/varclassifier/{}/enabled".format(varclassifier_name), is_enabled)
 * 
 *     def includeDetector(self, Detector detector, detectorname, decchar, desc, freqcallround=1, maxcallround=INT_MAX, mincallround=0, freqcallroundoriginal=1, maxcallroundoriginal=INT_MAX, mincallroundoriginal=0, priority=0, enabled=True, enabledfinishing=False, enabledpostprocessing=False, skip=False, usefulrecall=False):             # <<<<<<<<<<<<<<
 *         """includes a detector
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeDetector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_detectorname);
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":434
 *         Py_INCREF(detector)
 * 
 *     def includeScore(self, Score score, scorename, shortname, desc):             # <<<<<<<<<<<<<<
 *         """includes a score
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_61includeScore(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_60includeScore, "Model.includeScore(self, Score score, scorename, shortname, desc)\n\nincludes a score\n\n:param detector: An object of a subclass of detector#Detector.\n:param detectorname: name of the detector\n\nFor an explanation for all arguments, see :meth:`GCGincludeDetector()`.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_61includeScore = {"includeScore", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_61includeScore, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_60includeScore};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_61includeScore(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_score = 0;
  PyObject *__pyx_v_scorename = 0;
  PyObject *__pyx_v_shortname = 0;
  PyObject *__pyx_v_desc = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("includeScore (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_score,&__pyx_mstate_global->__pyx_n_u_scorename,&__pyx_mstate_global->__pyx_n_u_shortname,&__pyx_mstate_global->__pyx_n_u_desc,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 434, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 434, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 434, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 434, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 434, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "includeScore", 0) < (0)) __PYX_ERR(0, 434, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("includeScore", 1, 4, 4, i); __PYX_ERR(0, 434, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 434, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 434, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 434, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 434, __pyx_L3_error)
    }
    __pyx_v_score = ((struct __pyx_obj_8pygcgopt_3gcg_Score *)values[0]);
    __pyx_v_scorename = values[1];
    __pyx_v_shortname = values[2];
    __pyx_v_desc = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("includeScore", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 434, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeScore", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_score), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Score, 1, "score", 0))) __PYX_ERR(0, 434, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_60includeScore(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_score, __pyx_v_scorename, __pyx_v_shortname, __pyx_v_desc);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_60includeScore(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_Score *__pyx_v_score, PyObject *__pyx_v_scorename, PyObject *__pyx_v_shortname, PyObject *__pyx_v_desc) {
  PyObject *__pyx_v_c_scorename = NULL;
  PyObject *__pyx_v_c_shortname = NULL;
  PyObject *__pyx_v_c_desc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  char const *__pyx_t_5;
  char const *__pyx_t_6;
  char const *__pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("includeScore", 0);

  /* "pygcgopt/gcg.pyx":442
 *         For an explanation for all arguments, see :meth:`GCGincludeDetector()`.
 *         """
 *         c_scorename = str_conversion(scorename)             # <<<<<<<<<<<<<<
 *         c_shortname = str_conversion(shortname)
 *         c_desc = str_conversion(desc)
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_scorename};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_scorename = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":443
 *         """
 *         c_scorename = str_conversion(scorename)
 *         c_shortname = str_conversion(shortname)             # <<<<<<<<<<<<<<
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeScore(
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_shortname};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_shortname = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":444
 *         c_scorename = str_conversion(scorename)
 *         c_shortname = str_conversion(shortname)
 *         c_desc = str_conversion(desc)             # <<<<<<<<<<<<<<
 *         PY_SCIP_CALL(GCGincludeScore(
 *             self._gcg, c_scorename, c_shortname, c_desc,
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_desc};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_c_desc = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":445
 *         c_shortname = str_conversion(shortname)
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeScore(             # <<<<<<<<<<<<<<
 *             self._gcg, c_scorename, c_shortname, c_desc,
 *             <GCG_SCOREDATA*>score, PyScoreFree, PyScoreCalculate))
*/
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pygcgopt/gcg.pyx":446
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeScore(
 *             self._gcg, c_scorename, c_shortname, c_desc,             # <<<<<<<<<<<<<<
 *             <GCG_SCOREDATA*>score, PyScoreFree, PyScoreCalculate))
 * 
*/
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_c_scorename); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 446, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_c_shortname); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 446, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_v_c_desc); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 446, __pyx_L1_error)

  /* "pygcgopt/gcg.pyx":445
 *         c_shortname = str_conversion(shortname)
 *         c_desc = str_conversion(desc)
 *         PY_SCIP_CALL(GCGincludeScore(             # <<<<<<<<<<<<<<
 *             self._gcg, c_scorename, c_shortname, c_desc,
 *             <GCG_SCOREDATA*>score, PyScoreFree, PyScoreCalculate))
*/
  __pyx_t_8 = __Pyx_PyLong_From_SCIP_RETCODE(GCGincludeScore(__pyx_v_self->_gcg, __pyx_t_5, __pyx_t_6, __pyx_t_7, ((GCG_SCOREDATA *)__pyx_v_score), __pyx_f_8pygcgopt_3gcg_PyScoreFree, __pyx_f_8pygcgopt_3gcg_PyScoreCalculate)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_8};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 445, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":449
 *             <GCG_SCOREDATA*>score, PyScoreFree, PyScoreCalculate))
 * 
 *         score.model = <Model>weakref.proxy(self)             # <<<<<<<<<<<<<<
 *         score.scorename = scorename
 *         Py_INCREF(score)
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_weakref); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 449, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_proxy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 449, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 449, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_3 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF((PyObject *)__pyx_v_score->model);
  __Pyx_DECREF((PyObject *)__pyx_v_score->model);
  __pyx_v_score->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "pygcgopt/gcg.pyx":450
 * 
 *         score.model = <Model>weakref.proxy(self)
 *         score.scorename = scorename             # <<<<<<<<<<<<<<
 *         Py_INCREF(score)
 * 
*/
  __pyx_t_3 = __pyx_v_scorename;
  __Pyx_INCREF(__pyx_t_3);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 450, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_score->scorename);
  __Pyx_DECREF(__pyx_v_score->scorename);
  __pyx_v_score->scorename = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "pygcgopt/gcg.pyx":451
 *         score.model = <Model>weakref.proxy(self)
 *         score.scorename = scorename
 *         Py_INCREF(score)             # <<<<<<<<<<<<<<
 * 
 *     def listDetectors(self):
*/
  Py_INCREF(((PyObject *)__pyx_v_score));

  /* "pygcgopt/gcg.pyx":434
 *         Py_INCREF(detector)
 * 
 *     def includeScore(self, Score score, scorename, shortname, desc):             # <<<<<<<<<<<<<<
 *         """includes a score
 * 
*/

  /* 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_8);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.includeScore", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_scorename);
  __Pyx_XDECREF(__pyx_v_c_shortname);
  __Pyx_XDECREF(__pyx_v_c_desc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":453
 *         Py_INCREF(score)
 * 
 *     def listDetectors(self):             # <<<<<<<<<<<<<<
 *         """Lists all detectors that are currently included
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_63listDetectors(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_62listDetectors, "Model.listDetectors(self)\n\nLists all detectors that are currently included\n\n:return: A list of strings of the detector names\n\n.. note:: The detectors can be enabled or disabled using the appropriate methods by passing the name.\n\n.. seealso:: * :meth:`setDetectorEnabled`\n             * :meth:`setDetectorFinishingEnabled`\n             * :meth:`setDetectorPostprocessingEnabled`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_63listDetectors = {"listDetectors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_63listDetectors, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_62listDetectors};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_63listDetectors(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("listDetectors (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("listDetectors", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("listDetectors", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_62listDetectors(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_62listDetectors(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  int __pyx_v_n_detectors;
  GCG_DETECTOR **__pyx_v_detectors;
  int __pyx_9genexpr23__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  char const *__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("listDetectors", 0);

  /* "pygcgopt/gcg.pyx":464
 *                      * :meth:`setDetectorPostprocessingEnabled`
 *         """
 *         cdef int n_detectors = GCGconshdlrDecompGetNDetectors(self._gcg)             # <<<<<<<<<<<<<<
 *         cdef GCG_DETECTOR** detectors = GCGconshdlrDecompGetDetectors(self._gcg)
 * 
*/
  __pyx_v_n_detectors = GCGconshdlrDecompGetNDetectors(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":465
 *         """
 *         cdef int n_detectors = GCGconshdlrDecompGetNDetectors(self._gcg)
 *         cdef GCG_DETECTOR** detectors = GCGconshdlrDecompGetDetectors(self._gcg)             # <<<<<<<<<<<<<<
 * 
 *         return [GCGdetectorGetName(detectors[i]).decode('utf-8') for i in range(n_detectors)]
*/
  __pyx_v_detectors = GCGconshdlrDecompGetDetectors(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":467
 *         cdef GCG_DETECTOR** detectors = GCGconshdlrDecompGetDetectors(self._gcg)
 * 
 *         return [GCGdetectorGetName(detectors[i]).decode('utf-8') for i in range(n_detectors)]             # <<<<<<<<<<<<<<
 * 
 *     def listScores(self):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_n_detectors;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_9genexpr23__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = GCGdetectorGetName((__pyx_v_detectors[__pyx_9genexpr23__pyx_v_i]));
      __pyx_t_6 = __Pyx_ssize_strlen(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 467, __pyx_L1_error)
      __pyx_t_7 = __Pyx_decode_c_string(__pyx_t_5, 0, __pyx_t_6, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 467, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 467, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":453
 *         Py_INCREF(score)
 * 
 *     def listDetectors(self):             # <<<<<<<<<<<<<<
 *         """Lists all detectors that are currently included
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.listDetectors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":469
 *         return [GCGdetectorGetName(detectors[i]).decode('utf-8') for i in range(n_detectors)]
 * 
 *     def listScores(self):             # <<<<<<<<<<<<<<
 *         """Lists all scores that are currently included
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_65listScores(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_64listScores, "Model.listScores(self)\n\nLists all scores that are currently included\n\n:return: A list of strings of the score names");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_65listScores = {"listScores", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_65listScores, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_64listScores};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_65listScores(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("listScores (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("listScores", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("listScores", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_64listScores(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_64listScores(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  int __pyx_v_n_scores;
  GCG_SCORE **__pyx_v_scores;
  int __pyx_9genexpr24__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  char const *__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("listScores", 0);

  /* "pygcgopt/gcg.pyx":474
 *         :return: A list of strings of the score names
 *         """
 *         cdef int n_scores = GCGgetNScores(self._gcg)             # <<<<<<<<<<<<<<
 *         cdef GCG_SCORE** scores = GCGgetScores(self._gcg)
 * 
*/
  __pyx_v_n_scores = GCGgetNScores(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":475
 *         """
 *         cdef int n_scores = GCGgetNScores(self._gcg)
 *         cdef GCG_SCORE** scores = GCGgetScores(self._gcg)             # <<<<<<<<<<<<<<
 * 
 *         return [GCGscoreGetName(scores[i]).decode('utf-8') for i in range(n_scores)]
*/
  __pyx_v_scores = GCGgetScores(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":477
 *         cdef GCG_SCORE** scores = GCGgetScores(self._gcg)
 * 
 *         return [GCGscoreGetName(scores[i]).decode('utf-8') for i in range(n_scores)]             # <<<<<<<<<<<<<<
 * 
 *     def setDetectorEnabled(self, detector_name, is_enabled=True):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 477, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_n_scores;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_9genexpr24__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = GCGscoreGetName((__pyx_v_scores[__pyx_9genexpr24__pyx_v_i]));
      __pyx_t_6 = __Pyx_ssize_strlen(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 477, __pyx_L1_error)
      __pyx_t_7 = __Pyx_decode_c_string(__pyx_t_5, 0, __pyx_t_6, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 477, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 477, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":469
 *         return [GCGdetectorGetName(detectors[i]).decode('utf-8') for i in range(n_detectors)]
 * 
 *     def listScores(self):             # <<<<<<<<<<<<<<
 *         """Lists all scores that are currently included
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.listScores", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":479
 *         return [GCGscoreGetName(scores[i]).decode('utf-8') for i in range(n_scores)]
 * 
 *     def setDetectorEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for detecting partial decompositions.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_67setDetectorEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_66setDetectorEnabled, "Model.setDetectorEnabled(self, detector_name, is_enabled=True)\n\nEnables or disables a detector for detecting partial decompositions.\n\n:param detector_name: The name of the detector.\n:param is_enabled: Decides weather the detector should be enabled or diabled.\n\nThis is a convenience method to access the boolean parameter \"detection/detectors/<name>/enabled\".\n\n.. note:: Disabling a detector using this method is not enough to ensure that it will not run. In addition setDetectorFinishingEnabled() and setDetectorPostProcessingEnabled() have to be used.\n\nUse listDetectors() to obtain a list of all detectors.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_67setDetectorEnabled = {"setDetectorEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_67setDetectorEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_66setDetectorEnabled};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_67setDetectorEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_detector_name = 0;
  PyObject *__pyx_v_is_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setDetectorEnabled (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detector_name,&__pyx_mstate_global->__pyx_n_u_is_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 479, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 479, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 479, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setDetectorEnabled", 0) < (0)) __PYX_ERR(0, 479, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setDetectorEnabled", 0, 1, 2, i); __PYX_ERR(0, 479, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 479, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 479, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_detector_name = values[0];
    __pyx_v_is_enabled = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setDetectorEnabled", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 479, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setDetectorEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_66setDetectorEnabled(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_detector_name, __pyx_v_is_enabled);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_66setDetectorEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_detector_name, PyObject *__pyx_v_is_enabled) {
  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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setDetectorEnabled", 0);

  /* "pygcgopt/gcg.pyx":492
 *         """
 *         # TODO test if detector_name exists
 *         self.setBoolParam("detection/detectors/{}/enabled".format(detector_name), is_enabled)             # <<<<<<<<<<<<<<
 * 
 *     def setDetectorFinishingEnabled(self, detector_name, is_enabled=True):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = __pyx_mstate_global->__pyx_kp_u_detection_detectors_enabled;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_detector_name};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_v_is_enabled};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setBoolParam, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":479
 *         return [GCGscoreGetName(scores[i]).decode('utf-8') for i in range(n_scores)]
 * 
 *     def setDetectorEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for detecting partial decompositions.
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setDetectorEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":494
 *         self.setBoolParam("detection/detectors/{}/enabled".format(detector_name), is_enabled)
 * 
 *     def setDetectorFinishingEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for finishing partial decompositions.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_69setDetectorFinishingEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_68setDetectorFinishingEnabled, "Model.setDetectorFinishingEnabled(self, detector_name, is_enabled=True)\n\nEnables or disables a detector for finishing partial decompositions.\n\n:param detector_name: The name of the detector.\n:param is_enabled: Decides weather the detector should be enabled or diabled.\n\nThis is a convenience method to access the boolean parameter \"detection/detectors/<name>/finishingenabled\".\n\n.. seealso:: * :meth:`setDetectorEnabled`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_69setDetectorFinishingEnabled = {"setDetectorFinishingEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_69setDetectorFinishingEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_68setDetectorFinishingEnabled};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_69setDetectorFinishingEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_detector_name = 0;
  PyObject *__pyx_v_is_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setDetectorFinishingEnabled (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detector_name,&__pyx_mstate_global->__pyx_n_u_is_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 494, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 494, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 494, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setDetectorFinishingEnabled", 0) < (0)) __PYX_ERR(0, 494, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setDetectorFinishingEnabled", 0, 1, 2, i); __PYX_ERR(0, 494, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 494, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 494, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_detector_name = values[0];
    __pyx_v_is_enabled = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setDetectorFinishingEnabled", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 494, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setDetectorFinishingEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_68setDetectorFinishingEnabled(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_detector_name, __pyx_v_is_enabled);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_68setDetectorFinishingEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_detector_name, PyObject *__pyx_v_is_enabled) {
  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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setDetectorFinishingEnabled", 0);

  /* "pygcgopt/gcg.pyx":505
 *         """
 *         # TODO test if detector_name exists
 *         self.setBoolParam("detection/detectors/{}/finishingenabled".format(detector_name), is_enabled)             # <<<<<<<<<<<<<<
 * 
 *     def setDetectorPostprocessingEnabled(self, detector_name, is_enabled=True):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = __pyx_mstate_global->__pyx_kp_u_detection_detectors_finishingena;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_detector_name};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_v_is_enabled};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setBoolParam, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":494
 *         self.setBoolParam("detection/detectors/{}/enabled".format(detector_name), is_enabled)
 * 
 *     def setDetectorFinishingEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for finishing partial decompositions.
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setDetectorFinishingEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":507
 *         self.setBoolParam("detection/detectors/{}/finishingenabled".format(detector_name), is_enabled)
 * 
 *     def setDetectorPostprocessingEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for postprocessing partial decompositions.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_71setDetectorPostprocessingEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_70setDetectorPostprocessingEnabled, "Model.setDetectorPostprocessingEnabled(self, detector_name, is_enabled=True)\n\nEnables or disables a detector for postprocessing partial decompositions.\n\n:param detector_name: The name of the detector.\n:param is_enabled: Decides weather the detector should be enabled or diabled.\n\nThis is a convenience method to access the boolean parameter \"detection/detectors/<name>/postprocessingenabled\".\n\n.. seealso:: * :meth:`setDetectorEnabled`");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_71setDetectorPostprocessingEnabled = {"setDetectorPostprocessingEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_71setDetectorPostprocessingEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_70setDetectorPostprocessingEnabled};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_71setDetectorPostprocessingEnabled(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_detector_name = 0;
  PyObject *__pyx_v_is_enabled = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setDetectorPostprocessingEnabled (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_detector_name,&__pyx_mstate_global->__pyx_n_u_is_enabled,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 507, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 507, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 507, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setDetectorPostprocessingEnabled", 0) < (0)) __PYX_ERR(0, 507, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setDetectorPostprocessingEnabled", 0, 1, 2, i); __PYX_ERR(0, 507, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 507, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 507, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_detector_name = values[0];
    __pyx_v_is_enabled = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setDetectorPostprocessingEnabled", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 507, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setDetectorPostprocessingEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_70setDetectorPostprocessingEnabled(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_detector_name, __pyx_v_is_enabled);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_70setDetectorPostprocessingEnabled(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_detector_name, PyObject *__pyx_v_is_enabled) {
  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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setDetectorPostprocessingEnabled", 0);

  /* "pygcgopt/gcg.pyx":518
 *         """
 *         # TODO test if detector_name exists
 *         self.setBoolParam("detection/detectors/{}/postprocessingenabled".format(detector_name), is_enabled)             # <<<<<<<<<<<<<<
 * 
 *     def getMasterProb(self):
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = __pyx_mstate_global->__pyx_kp_u_detection_detectors_postprocessi;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_detector_name};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 518, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_v_is_enabled};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_setBoolParam, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":507
 *         self.setBoolParam("detection/detectors/{}/finishingenabled".format(detector_name), is_enabled)
 * 
 *     def setDetectorPostprocessingEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for postprocessing partial decompositions.
 * 
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setDetectorPostprocessingEnabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":520
 *         self.setBoolParam("detection/detectors/{}/postprocessingenabled".format(detector_name), is_enabled)
 * 
 *     def getMasterProb(self):             # <<<<<<<<<<<<<<
 *         """Provides access to the GCG master problem.
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_73getMasterProb(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_72getMasterProb, "Model.getMasterProb(self)\n\nProvides access to the GCG master problem.\n\n:return: An instance of scip#Model that represents the master problem.");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_73getMasterProb = {"getMasterProb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_73getMasterProb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_72getMasterProb};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_73getMasterProb(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getMasterProb (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("getMasterProb", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("getMasterProb", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_72getMasterProb(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_72getMasterProb(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self) {
  SCIP *__pyx_v_master_prob;
  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("getMasterProb", 0);

  /* "pygcgopt/gcg.pyx":525
 *         :return: An instance of scip#Model that represents the master problem.
 *         """
 *         cdef SCIP * master_prob = GCGgetMasterprob(self._gcg)             # <<<<<<<<<<<<<<
 *         return GCGMasterModel.create(master_prob)
 * 
*/
  __pyx_v_master_prob = GCGgetMasterprob(__pyx_v_self->_gcg);

  /* "pygcgopt/gcg.pyx":526
 *         """
 *         cdef SCIP * master_prob = GCGgetMasterprob(self._gcg)
 *         return GCGMasterModel.create(master_prob)             # <<<<<<<<<<<<<<
 * 
 *     def setGCGSeparating(self, setting):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pygcgopt_3gcg_14GCGMasterModel_create(__pyx_v_master_prob); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":520
 *         self.setBoolParam("detection/detectors/{}/postprocessingenabled".format(detector_name), is_enabled)
 * 
 *     def getMasterProb(self):             # <<<<<<<<<<<<<<
 *         """Provides access to the GCG master problem.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getMasterProb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":528
 *         return GCGMasterModel.create(master_prob)
 * 
 *     def setGCGSeparating(self, setting):             # <<<<<<<<<<<<<<
 *         """Sets parameter settings of all separators
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_75setGCGSeparating(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_74setGCGSeparating, "Model.setGCGSeparating(self, setting)\n\nSets parameter settings of all separators\n\n:param setting: the parameter settings (SCIP_PARAMSETTING)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_75setGCGSeparating = {"setGCGSeparating", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_75setGCGSeparating, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_74setGCGSeparating};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_75setGCGSeparating(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_setting = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setGCGSeparating (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_setting,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 528, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 528, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "setGCGSeparating", 0) < (0)) __PYX_ERR(0, 528, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("setGCGSeparating", 1, 1, 1, i); __PYX_ERR(0, 528, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 528, __pyx_L3_error)
    }
    __pyx_v_setting = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setGCGSeparating", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 528, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.setGCGSeparating", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_74setGCGSeparating(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_setting);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_74setGCGSeparating(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_setting) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  SCIP_PARAMSETTING __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setGCGSeparating", 0);

  /* "pygcgopt/gcg.pyx":534
 *         """
 *         # GCG API is inconsistant with SCIP, SCIPsetSeparating
 *         PY_SCIP_CALL(GCGsetSeparators(self._gcg, setting))             # <<<<<<<<<<<<<<
 * 
 *     def writeAllDecomps(self, directory="alldecompositions/", extension="dec", bool original=True, bool presolved=True, createDirectory=True):
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 534, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_As_SCIP_PARAMSETTING(__pyx_v_setting); if (unlikely((__pyx_t_4 == ((SCIP_PARAMSETTING)-1)) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyLong_From_SCIP_RETCODE(GCGsetSeparators(__pyx_v_self->_gcg, __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 534, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":528
 *         return GCGMasterModel.create(master_prob)
 * 
 *     def setGCGSeparating(self, setting):             # <<<<<<<<<<<<<<
 *         """Sets parameter settings of all separators
 * 
*/

  /* 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_AddTraceback("pygcgopt.gcg.Model.setGCGSeparating", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":536
 *         PY_SCIP_CALL(GCGsetSeparators(self._gcg, setting))
 * 
 *     def writeAllDecomps(self, directory="alldecompositions/", extension="dec", bool original=True, bool presolved=True, createDirectory=True):             # <<<<<<<<<<<<<<
 *         """Writes all decompositions to disk
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_77writeAllDecomps(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_76writeAllDecomps, "Model.writeAllDecomps(self, directory='alldecompositions/', extension='dec', bool original=True, bool presolved=True, createDirectory=True)\n\nWrites all decompositions to disk\n\n:param directory: A path to a folder where to store the decomposition files\n:param extension: Extension without a dot. Decides the output format. Use \"dec\" to output decomposition files\n:param createDirectory: Automatically create the directory specified in ``directory`` if it does not exist");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_77writeAllDecomps = {"writeAllDecomps", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_77writeAllDecomps, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_76writeAllDecomps};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_77writeAllDecomps(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_directory = 0;
  PyObject *__pyx_v_extension = 0;
  bool __pyx_v_original;
  bool __pyx_v_presolved;
  PyObject *__pyx_v_createDirectory = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[5] = {0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("writeAllDecomps (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_directory,&__pyx_mstate_global->__pyx_n_u_extension,&__pyx_mstate_global->__pyx_n_u_original,&__pyx_mstate_global->__pyx_n_u_presolved,&__pyx_mstate_global->__pyx_n_u_createDirectory,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 536, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "writeAllDecomps", 0) < (0)) __PYX_ERR(0, 536, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_kp_u_alldecompositions));
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_dec));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_True));
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 536, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_kp_u_alldecompositions));
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_dec));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_True));
    }
    __pyx_v_directory = values[0];
    __pyx_v_extension = values[1];
    if (values[2]) {
      __pyx_v_original = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_original == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L3_error)
    } else {
      __pyx_v_original = ((bool)1);
    }
    if (values[3]) {
      __pyx_v_presolved = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_presolved == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L3_error)
    } else {
      __pyx_v_presolved = ((bool)1);
    }
    __pyx_v_createDirectory = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("writeAllDecomps", 0, 0, 5, __pyx_nargs); __PYX_ERR(0, 536, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.writeAllDecomps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_76writeAllDecomps(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_directory, __pyx_v_extension, __pyx_v_original, __pyx_v_presolved, __pyx_v_createDirectory);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_76writeAllDecomps(struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_directory, PyObject *__pyx_v_extension, bool __pyx_v_original, bool __pyx_v_presolved, PyObject *__pyx_v_createDirectory) {
  PyObject *__pyx_v_c_directory = NULL;
  PyObject *__pyx_v_c_extension = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  char *__pyx_t_8;
  char *__pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("writeAllDecomps", 0);

  /* "pygcgopt/gcg.pyx":543
 *         :param createDirectory: Automatically create the directory specified in ``directory`` if it does not exist
 *         """
 *         if createDirectory:             # <<<<<<<<<<<<<<
 *             Path(directory).mkdir(exist_ok=True, parents=True)
 *         c_directory = str_conversion(directory)
*/
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_createDirectory); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 543, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "pygcgopt/gcg.pyx":544
 *         """
 *         if createDirectory:
 *             Path(directory).mkdir(exist_ok=True, parents=True)             # <<<<<<<<<<<<<<
 *         c_directory = str_conversion(directory)
 *         c_extension = str_conversion(extension)
*/
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_Path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 544, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_directory};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_3 = __pyx_t_4;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_3, NULL};
      __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_exist_ok, Py_True, __pyx_t_6, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 544, __pyx_L1_error)
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_parents, Py_True, __pyx_t_6, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 544, __pyx_L1_error)
      __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_mkdir, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pygcgopt/gcg.pyx":543
 *         :param createDirectory: Automatically create the directory specified in ``directory`` if it does not exist
 *         """
 *         if createDirectory:             # <<<<<<<<<<<<<<
 *             Path(directory).mkdir(exist_ok=True, parents=True)
 *         c_directory = str_conversion(directory)
*/
  }

  /* "pygcgopt/gcg.pyx":545
 *         if createDirectory:
 *             Path(directory).mkdir(exist_ok=True, parents=True)
 *         c_directory = str_conversion(directory)             # <<<<<<<<<<<<<<
 *         c_extension = str_conversion(extension)
 *         PY_SCIP_CALL(GCGwriteAllDecomps(self._gcg, c_directory, c_extension, original, presolved))
*/
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_directory};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_c_directory = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":546
 *             Path(directory).mkdir(exist_ok=True, parents=True)
 *         c_directory = str_conversion(directory)
 *         c_extension = str_conversion(extension)             # <<<<<<<<<<<<<<
 *         PY_SCIP_CALL(GCGwriteAllDecomps(self._gcg, c_directory, c_extension, original, presolved))
 * 
*/
  __pyx_t_6 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_str_conversion); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_6);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_extension};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_c_extension = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":547
 *         c_directory = str_conversion(directory)
 *         c_extension = str_conversion(extension)
 *         PY_SCIP_CALL(GCGwriteAllDecomps(self._gcg, c_directory, c_extension, original, presolved))             # <<<<<<<<<<<<<<
 * 
 *     def getMastervars(self, var):
*/
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 547, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = __Pyx_PyObject_AsWritableString(__pyx_v_c_directory); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 547, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyObject_AsWritableString(__pyx_v_c_extension); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(0, 547, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyLong_From_SCIP_RETCODE(GCGwriteAllDecomps(__pyx_v_self->_gcg, __pyx_t_8, __pyx_t_9, __pyx_v_original, __pyx_v_presolved)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 547, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 547, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":536
 *         PY_SCIP_CALL(GCGsetSeparators(self._gcg, setting))
 * 
 *     def writeAllDecomps(self, directory="alldecompositions/", extension="dec", bool original=True, bool presolved=True, createDirectory=True):             # <<<<<<<<<<<<<<
 *         """Writes all decompositions to disk
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.writeAllDecomps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c_directory);
  __Pyx_XDECREF(__pyx_v_c_extension);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":549
 *         PY_SCIP_CALL(GCGwriteAllDecomps(self._gcg, c_directory, c_extension, original, presolved))
 * 
 *     def getMastervars(self, var):             # <<<<<<<<<<<<<<
 *         """Returns the master variables corresponding to the variable of original problem
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_79getMastervars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_78getMastervars, "Model.getMastervars(self, var)\n\nReturns the master variables corresponding to the variable of original problem\n\n:param var: Variable of original problem\n:return: List of master variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_79getMastervars = {"getMastervars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_79getMastervars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_78getMastervars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_79getMastervars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getMastervars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 549, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 549, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getMastervars", 0) < (0)) __PYX_ERR(0, 549, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getMastervars", 1, 1, 1, i); __PYX_ERR(0, 549, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 549, __pyx_L3_error)
    }
    __pyx_v_var = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getMastervars", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 549, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getMastervars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_78getMastervars(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_5Model_78getMastervars(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_Model *__pyx_v_self, PyObject *__pyx_v_var) {
  int __pyx_v_n_vars;
  SCIP_VAR **__pyx_v_mastervars;
  int __pyx_9genexpr25__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getMastervars", 0);

  /* "pygcgopt/gcg.pyx":555
 *         :return: List of master variables
 *         """
 *         cdef int n_vars = GCGoriginalVarGetNMastervars((<Variable>var).scip_var)             # <<<<<<<<<<<<<<
 *         cdef SCIP_VAR** mastervars = GCGoriginalVarGetMastervars((<Variable>var).scip_var)
 *         return [Variable.create(mastervars[i]) for i in range(n_vars)]
*/
  __pyx_v_n_vars = GCGoriginalVarGetNMastervars(((struct __pyx_obj_9pyscipopt_4scip_Variable *)__pyx_v_var)->scip_var);

  /* "pygcgopt/gcg.pyx":556
 *         """
 *         cdef int n_vars = GCGoriginalVarGetNMastervars((<Variable>var).scip_var)
 *         cdef SCIP_VAR** mastervars = GCGoriginalVarGetMastervars((<Variable>var).scip_var)             # <<<<<<<<<<<<<<
 *         return [Variable.create(mastervars[i]) for i in range(n_vars)]
 * 
*/
  __pyx_v_mastervars = GCGoriginalVarGetMastervars(((struct __pyx_obj_9pyscipopt_4scip_Variable *)__pyx_v_var)->scip_var);

  /* "pygcgopt/gcg.pyx":557
 *         cdef int n_vars = GCGoriginalVarGetNMastervars((<Variable>var).scip_var)
 *         cdef SCIP_VAR** mastervars = GCGoriginalVarGetMastervars((<Variable>var).scip_var)
 *         return [Variable.create(mastervars[i]) for i in range(n_vars)]             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_n_vars;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_9genexpr25__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create((__pyx_v_mastervars[__pyx_9genexpr25__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 557, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":549
 *         PY_SCIP_CALL(GCGwriteAllDecomps(self._gcg, c_directory, c_extension, original, presolved))
 * 
 *     def getMastervars(self, var):             # <<<<<<<<<<<<<<
 *         """Returns the master variables corresponding to the variable of original problem
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.Model.getMastervars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_81__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_80__reduce_cython__, "Model.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_81__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_81__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_80__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_81__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_80__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self));

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

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

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self._gcg,self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self._gcg,self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self__gcg_self__iis_self__scip_s, 0, 0);
  __PYX_ERR(2, 2, __pyx_L1_error)

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

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_83__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_5Model_82__setstate_cython__, "Model.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5Model_83__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_83__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_82__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5Model_83__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.Model.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_5Model_82__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":4
 *     raise TypeError, "self._gcg,self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self._gcg,self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self__gcg_self__iis_self__scip_s, 0, 0);
  __PYX_ERR(2, 4, __pyx_L1_error)

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

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

/* "pygcgopt/gcg.pyx":561
 * 
 * cdef class GCGPricingModel(SCIPModel):
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(SCIP* scip):
 *         """Creates a pricing problem model and appropriately assigns the scip and bestsol parameters
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_15GCGPricingModel_create(SCIP *__pyx_v_scip) {
  struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *__pyx_v_model = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "pygcgopt/gcg.pyx":565
 *         """Creates a pricing problem model and appropriately assigns the scip and bestsol parameters
 *         """
 *         if scip == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create Model with SCIP* == NULL")
 *         model = GCGPricingModel(createscip=False)
*/
  __pyx_t_1 = (__pyx_v_scip == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "pygcgopt/gcg.pyx":566
 *         """
 *         if scip == NULL:
 *             raise Warning("cannot create Model with SCIP* == NULL")             # <<<<<<<<<<<<<<
 *         model = GCGPricingModel(createscip=False)
 *         model._scip = scip
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_cannot_create_Model_with_SCIP_NU};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_Warning)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 566, __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, 566, __pyx_L1_error)

    /* "pygcgopt/gcg.pyx":565
 *         """Creates a pricing problem model and appropriately assigns the scip and bestsol parameters
 *         """
 *         if scip == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create Model with SCIP* == NULL")
 *         model = GCGPricingModel(createscip=False)
*/
  }

  /* "pygcgopt/gcg.pyx":567
 *         if scip == NULL:
 *             raise Warning("cannot create Model with SCIP* == NULL")
 *         model = GCGPricingModel(createscip=False)             # <<<<<<<<<<<<<<
 *         model._scip = scip
 *         model._bestSol = Solution.create(scip, SCIPgetBestSol(scip))
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, NULL};
    __pyx_t_5 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 567, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_createscip, Py_False, __pyx_t_5, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 567, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __pyx_v_model = ((struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":568
 *             raise Warning("cannot create Model with SCIP* == NULL")
 *         model = GCGPricingModel(createscip=False)
 *         model._scip = scip             # <<<<<<<<<<<<<<
 *         model._bestSol = Solution.create(scip, SCIPgetBestSol(scip))
 *         return model
*/
  __pyx_v_model->__pyx_base._scip = __pyx_v_scip;

  /* "pygcgopt/gcg.pyx":569
 *         model = GCGPricingModel(createscip=False)
 *         model._scip = scip
 *         model._bestSol = Solution.create(scip, SCIPgetBestSol(scip))             # <<<<<<<<<<<<<<
 *         return model
 * 
*/
  __pyx_t_2 = __pyx_vtabptr_9pyscipopt_4scip_Solution->create(__pyx_v_scip, SCIPgetBestSol(__pyx_v_scip)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 569, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Solution))))) __PYX_ERR(0, 569, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF((PyObject *)__pyx_v_model->__pyx_base._bestSol);
  __Pyx_DECREF((PyObject *)__pyx_v_model->__pyx_base._bestSol);
  __pyx_v_model->__pyx_base._bestSol = ((struct __pyx_obj_9pyscipopt_4scip_Solution *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":570
 *         model._scip = scip
 *         model._bestSol = Solution.create(scip, SCIPgetBestSol(scip))
 *         return model             # <<<<<<<<<<<<<<
 * 
 *     def createGcgCol(self, probnr, variables, vals, bool isray, redcost):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_model);
  __pyx_r = ((PyObject *)__pyx_v_model);
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":561
 * 
 * cdef class GCGPricingModel(SCIPModel):
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(SCIP* scip):
 *         """Creates a pricing problem model and appropriately assigns the scip and bestsol parameters
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.GCGPricingModel.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_model);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":572
 *         return model
 * 
 *     def createGcgCol(self, probnr, variables, vals, bool isray, redcost):             # <<<<<<<<<<<<<<
 *         """create a gcg column
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_1createGcgCol(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_createGcgCol, "GCGPricingModel.createGcgCol(self, probnr, variables, vals, bool isray, redcost)\n\ncreate a gcg column\n\n:param prob: number of corresponding pricing problem\n:param variables: (sorted) array of variables of corresponding pricing problem\n:param vals: array of solution values (belonging to vars)\n:param isray: is the column a ray?\n:param redcost: last known reduced cost");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_15GCGPricingModel_1createGcgCol = {"createGcgCol", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_1createGcgCol, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_createGcgCol};
static PyObject *__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_1createGcgCol(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_probnr = 0;
  PyObject *__pyx_v_variables = 0;
  PyObject *__pyx_v_vals = 0;
  bool __pyx_v_isray;
  PyObject *__pyx_v_redcost = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[5] = {0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("createGcgCol (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_probnr,&__pyx_mstate_global->__pyx_n_u_variables,&__pyx_mstate_global->__pyx_n_u_vals,&__pyx_mstate_global->__pyx_n_u_isray,&__pyx_mstate_global->__pyx_n_u_redcost,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 572, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 572, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 572, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 572, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 572, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 572, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "createGcgCol", 0) < (0)) __PYX_ERR(0, 572, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("createGcgCol", 1, 5, 5, i); __PYX_ERR(0, 572, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 5)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 572, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 572, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 572, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 572, __pyx_L3_error)
      values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 572, __pyx_L3_error)
    }
    __pyx_v_probnr = values[0];
    __pyx_v_variables = values[1];
    __pyx_v_vals = values[2];
    __pyx_v_isray = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_isray == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 572, __pyx_L3_error)
    __pyx_v_redcost = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("createGcgCol", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 572, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.GCGPricingModel.createGcgCol", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_15GCGPricingModel_createGcgCol(((struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *)__pyx_v_self), __pyx_v_probnr, __pyx_v_variables, __pyx_v_vals, __pyx_v_isray, __pyx_v_redcost);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_15GCGPricingModel_createGcgCol(struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *__pyx_v_self, PyObject *__pyx_v_probnr, PyObject *__pyx_v_variables, PyObject *__pyx_v_vals, bool __pyx_v_isray, PyObject *__pyx_v_redcost) {
  GCG_COL *__pyx_v_gcg_col;
  GCG *__pyx_v_gcg;
  PyObject *__pyx_v_nvars = NULL;
  SCIP_VAR **__pyx_v_c_vars;
  SCIP_Real *__pyx_v_c_vals;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_pyGCGCol = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  SCIP_VAR *__pyx_t_6;
  SCIP_Real __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("createGcgCol", 0);

  /* "pygcgopt/gcg.pyx":582
 *         """
 *         cdef GCG_COL * gcg_col
 *         cdef GCG* gcg = GCGpricerGetGcg(self._scip)             # <<<<<<<<<<<<<<
 *         nvars = len(variables)
 *         cdef SCIP_VAR ** c_vars = <SCIP_VAR**>malloc(nvars * sizeof(SCIP_VAR*))
*/
  __pyx_v_gcg = GCGpricerGetGcg(__pyx_v_self->__pyx_base._scip);

  /* "pygcgopt/gcg.pyx":583
 *         cdef GCG_COL * gcg_col
 *         cdef GCG* gcg = GCGpricerGetGcg(self._scip)
 *         nvars = len(variables)             # <<<<<<<<<<<<<<
 *         cdef SCIP_VAR ** c_vars = <SCIP_VAR**>malloc(nvars * sizeof(SCIP_VAR*))
 *         cdef SCIP_Real * c_vals = <SCIP_Real*>malloc(nvars * sizeof(SCIP_Real))
*/
  __pyx_t_1 = PyObject_Length(__pyx_v_variables); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 583, __pyx_L1_error)
  __pyx_t_2 = PyLong_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_nvars = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":584
 *         cdef GCG* gcg = GCGpricerGetGcg(self._scip)
 *         nvars = len(variables)
 *         cdef SCIP_VAR ** c_vars = <SCIP_VAR**>malloc(nvars * sizeof(SCIP_VAR*))             # <<<<<<<<<<<<<<
 *         cdef SCIP_Real * c_vals = <SCIP_Real*>malloc(nvars * sizeof(SCIP_Real))
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_FromSize_t((sizeof(SCIP_VAR *))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(__pyx_v_nvars, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 584, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_c_vars = ((SCIP_VAR **)malloc(__pyx_t_4));

  /* "pygcgopt/gcg.pyx":585
 *         nvars = len(variables)
 *         cdef SCIP_VAR ** c_vars = <SCIP_VAR**>malloc(nvars * sizeof(SCIP_VAR*))
 *         cdef SCIP_Real * c_vals = <SCIP_Real*>malloc(nvars * sizeof(SCIP_Real))             # <<<<<<<<<<<<<<
 * 
 *         for i in range(nvars):
*/
  __pyx_t_3 = __Pyx_PyLong_FromSize_t((sizeof(SCIP_Real))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyNumber_Multiply(__pyx_v_nvars, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 585, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_c_vals = ((SCIP_Real *)malloc(__pyx_t_4));

  /* "pygcgopt/gcg.pyx":587
 *         cdef SCIP_Real * c_vals = <SCIP_Real*>malloc(nvars * sizeof(SCIP_Real))
 * 
 *         for i in range(nvars):             # <<<<<<<<<<<<<<
 *             c_vars[i] = (<Variable>variables[i]).scip_var
 *             c_vals[i] = vals[i]
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_nvars};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 587, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    {
      __pyx_t_2 = __pyx_t_5(__pyx_t_3);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 587, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "pygcgopt/gcg.pyx":588
 * 
 *         for i in range(nvars):
 *             c_vars[i] = (<Variable>variables[i]).scip_var             # <<<<<<<<<<<<<<
 *             c_vals[i] = vals[i]
 * 
*/
    __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_variables, __pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 588, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = ((struct __pyx_obj_9pyscipopt_4scip_Variable *)__pyx_t_2)->scip_var;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 588, __pyx_L1_error)
    (__pyx_v_c_vars[__pyx_t_1]) = __pyx_t_6;

    /* "pygcgopt/gcg.pyx":589
 *         for i in range(nvars):
 *             c_vars[i] = (<Variable>variables[i]).scip_var
 *             c_vals[i] = vals[i]             # <<<<<<<<<<<<<<
 * 
 *         GCGcreateGcgCol(gcg, self._scip, &gcg_col, probnr, c_vars, c_vals, nvars, isray, redcost)
*/
    __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_vals, __pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = __Pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_7 == ((SCIP_Real)-1)) && PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L1_error)
    (__pyx_v_c_vals[__pyx_t_1]) = __pyx_t_7;

    /* "pygcgopt/gcg.pyx":587
 *         cdef SCIP_Real * c_vals = <SCIP_Real*>malloc(nvars * sizeof(SCIP_Real))
 * 
 *         for i in range(nvars):             # <<<<<<<<<<<<<<
 *             c_vars[i] = (<Variable>variables[i]).scip_var
 *             c_vals[i] = vals[i]
*/
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pygcgopt/gcg.pyx":591
 *             c_vals[i] = vals[i]
 * 
 *         GCGcreateGcgCol(gcg, self._scip, &gcg_col, probnr, c_vars, c_vals, nvars, isray, redcost)             # <<<<<<<<<<<<<<
 * 
 *         pyGCGCol = GCGColumn.create(gcg_col)
*/
  __pyx_t_8 = __Pyx_PyLong_As_int(__pyx_v_probnr); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyLong_As_int(__pyx_v_nvars); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyFloat_AsDouble(__pyx_v_redcost); if (unlikely((__pyx_t_7 == ((SCIP_Real)-1)) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L1_error)
  (void)(GCGcreateGcgCol(__pyx_v_gcg, __pyx_v_self->__pyx_base._scip, (&__pyx_v_gcg_col), __pyx_t_8, __pyx_v_c_vars, __pyx_v_c_vals, __pyx_t_9, __pyx_v_isray, __pyx_t_7));

  /* "pygcgopt/gcg.pyx":593
 *         GCGcreateGcgCol(gcg, self._scip, &gcg_col, probnr, c_vars, c_vals, nvars, isray, redcost)
 * 
 *         pyGCGCol = GCGColumn.create(gcg_col)             # <<<<<<<<<<<<<<
 * 
 *         free(c_vars)
*/
  __pyx_t_3 = __pyx_f_8pygcgopt_3gcg_9GCGColumn_create(__pyx_v_gcg_col); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_pyGCGCol = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pygcgopt/gcg.pyx":595
 *         pyGCGCol = GCGColumn.create(gcg_col)
 * 
 *         free(c_vars)             # <<<<<<<<<<<<<<
 *         free(c_vals)
 * 
*/
  free(__pyx_v_c_vars);

  /* "pygcgopt/gcg.pyx":596
 * 
 *         free(c_vars)
 *         free(c_vals)             # <<<<<<<<<<<<<<
 * 
 *         return pyGCGCol
*/
  free(__pyx_v_c_vals);

  /* "pygcgopt/gcg.pyx":598
 *         free(c_vals)
 * 
 *         return pyGCGCol             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_pyGCGCol);
  __pyx_r = __pyx_v_pyGCGCol;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":572
 *         return model
 * 
 *     def createGcgCol(self, probnr, variables, vals, bool isray, redcost):             # <<<<<<<<<<<<<<
 *         """create a gcg column
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.GCGPricingModel.createGcgCol", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_nvars);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_pyGCGCol);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_3__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_2__reduce_cython__, "GCGPricingModel.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_15GCGPricingModel_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_2__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_3__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_15GCGPricingModel_2__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *)__pyx_v_self));

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

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

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self__iis_self__scip_self__valid, 0, 0);
  __PYX_ERR(2, 2, __pyx_L1_error)

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

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_5__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_4__setstate_cython__, "GCGPricingModel.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_15GCGPricingModel_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_4__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_5__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.GCGPricingModel.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_15GCGPricingModel_4__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":4
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self__iis_self__scip_self__valid, 0, 0);
  __PYX_ERR(2, 4, __pyx_L1_error)

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

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

/* "pygcgopt/gcg.pyx":602
 * 
 * cdef class GCGMasterModel(SCIPModel):
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(SCIP* scip):
 *         """Creates a pricing problem model and appropriately assigns the scip and bestsol parameters
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_14GCGMasterModel_create(SCIP *__pyx_v_scip) {
  struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *__pyx_v_model = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "pygcgopt/gcg.pyx":606
 *         """Creates a pricing problem model and appropriately assigns the scip and bestsol parameters
 *         """
 *         if scip == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create Model with SCIP* == NULL")
 *         model = GCGMasterModel(createscip=False)
*/
  __pyx_t_1 = (__pyx_v_scip == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "pygcgopt/gcg.pyx":607
 *         """
 *         if scip == NULL:
 *             raise Warning("cannot create Model with SCIP* == NULL")             # <<<<<<<<<<<<<<
 *         model = GCGMasterModel(createscip=False)
 *         model._scip = scip
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_cannot_create_Model_with_SCIP_NU};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_Warning)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 607, __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, 607, __pyx_L1_error)

    /* "pygcgopt/gcg.pyx":606
 *         """Creates a pricing problem model and appropriately assigns the scip and bestsol parameters
 *         """
 *         if scip == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create Model with SCIP* == NULL")
 *         model = GCGMasterModel(createscip=False)
*/
  }

  /* "pygcgopt/gcg.pyx":608
 *         if scip == NULL:
 *             raise Warning("cannot create Model with SCIP* == NULL")
 *         model = GCGMasterModel(createscip=False)             # <<<<<<<<<<<<<<
 *         model._scip = scip
 *         model._bestSol = Solution.create(scip, SCIPgetBestSol(scip))
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, NULL};
    __pyx_t_5 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_createscip, Py_False, __pyx_t_5, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 608, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __pyx_v_model = ((struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":609
 *             raise Warning("cannot create Model with SCIP* == NULL")
 *         model = GCGMasterModel(createscip=False)
 *         model._scip = scip             # <<<<<<<<<<<<<<
 *         model._bestSol = Solution.create(scip, SCIPgetBestSol(scip))
 *         return model
*/
  __pyx_v_model->__pyx_base._scip = __pyx_v_scip;

  /* "pygcgopt/gcg.pyx":610
 *         model = GCGMasterModel(createscip=False)
 *         model._scip = scip
 *         model._bestSol = Solution.create(scip, SCIPgetBestSol(scip))             # <<<<<<<<<<<<<<
 *         return model
 * 
*/
  __pyx_t_2 = __pyx_vtabptr_9pyscipopt_4scip_Solution->create(__pyx_v_scip, SCIPgetBestSol(__pyx_v_scip)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Solution))))) __PYX_ERR(0, 610, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF((PyObject *)__pyx_v_model->__pyx_base._bestSol);
  __Pyx_DECREF((PyObject *)__pyx_v_model->__pyx_base._bestSol);
  __pyx_v_model->__pyx_base._bestSol = ((struct __pyx_obj_9pyscipopt_4scip_Solution *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":611
 *         model._scip = scip
 *         model._bestSol = Solution.create(scip, SCIPgetBestSol(scip))
 *         return model             # <<<<<<<<<<<<<<
 * 
 *     def addCol(self, GCGColumn col):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_model);
  __pyx_r = ((PyObject *)__pyx_v_model);
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":602
 * 
 * cdef class GCGMasterModel(SCIPModel):
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(SCIP* scip):
 *         """Creates a pricing problem model and appropriately assigns the scip and bestsol parameters
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.GCGMasterModel.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_model);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":613
 *         return model
 * 
 *     def addCol(self, GCGColumn col):             # <<<<<<<<<<<<<<
 *         cdef GCG* gcg = GCGmasterGetGcg(self._scip)
 *         PY_SCIP_CALL(GCGpricerAddCol(gcg, col.gcg_col))
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_1addCol(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_addCol, "GCGMasterModel.addCol(self, GCGColumn col)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_14GCGMasterModel_1addCol = {"addCol", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_1addCol, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_addCol};
static PyObject *__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_1addCol(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_col = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("addCol (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_col,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 613, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 613, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "addCol", 0) < (0)) __PYX_ERR(0, 613, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("addCol", 1, 1, 1, i); __PYX_ERR(0, 613, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 613, __pyx_L3_error)
    }
    __pyx_v_col = ((struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("addCol", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 613, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.GCGMasterModel.addCol", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_col), __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGColumn, 1, "col", 0))) __PYX_ERR(0, 613, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_addCol(((struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *)__pyx_v_self), __pyx_v_col);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_addCol(struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *__pyx_v_self, struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_col) {
  GCG *__pyx_v_gcg;
  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;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("addCol", 0);

  /* "pygcgopt/gcg.pyx":614
 * 
 *     def addCol(self, GCGColumn col):
 *         cdef GCG* gcg = GCGmasterGetGcg(self._scip)             # <<<<<<<<<<<<<<
 *         PY_SCIP_CALL(GCGpricerAddCol(gcg, col.gcg_col))
 * 
*/
  __pyx_v_gcg = GCGmasterGetGcg(__pyx_v_self->__pyx_base._scip);

  /* "pygcgopt/gcg.pyx":615
 *     def addCol(self, GCGColumn col):
 *         cdef GCG* gcg = GCGmasterGetGcg(self._scip)
 *         PY_SCIP_CALL(GCGpricerAddCol(gcg, col.gcg_col))             # <<<<<<<<<<<<<<
 * 
 *     def getOrigvars(self, var):
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_SCIP_RETCODE(GCGpricerAddCol(__pyx_v_gcg, __pyx_v_col->gcg_col)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pygcgopt/gcg.pyx":613
 *         return model
 * 
 *     def addCol(self, GCGColumn col):             # <<<<<<<<<<<<<<
 *         cdef GCG* gcg = GCGmasterGetGcg(self._scip)
 *         PY_SCIP_CALL(GCGpricerAddCol(gcg, col.gcg_col))
*/

  /* 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_4);
  __Pyx_AddTraceback("pygcgopt.gcg.GCGMasterModel.addCol", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":617
 *         PY_SCIP_CALL(GCGpricerAddCol(gcg, col.gcg_col))
 * 
 *     def getOrigvars(self, var):             # <<<<<<<<<<<<<<
 *         """Returns the original variables corresponding to the variable of master problem
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_3getOrigvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_2getOrigvars, "GCGMasterModel.getOrigvars(self, var)\n\nReturns the original variables corresponding to the variable of master problem\n\n:param var: Variable of master problem\n:return: List of original variables");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_14GCGMasterModel_3getOrigvars = {"getOrigvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_3getOrigvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_2getOrigvars};
static PyObject *__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_3getOrigvars(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_var = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getOrigvars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_var,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 617, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 617, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "getOrigvars", 0) < (0)) __PYX_ERR(0, 617, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("getOrigvars", 1, 1, 1, i); __PYX_ERR(0, 617, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 617, __pyx_L3_error)
    }
    __pyx_v_var = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getOrigvars", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 617, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.GCGMasterModel.getOrigvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_2getOrigvars(((struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *)__pyx_v_self), __pyx_v_var);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_2getOrigvars(CYTHON_UNUSED struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *__pyx_v_self, PyObject *__pyx_v_var) {
  int __pyx_v_n_vars;
  SCIP_VAR **__pyx_v_originalvars;
  int __pyx_9genexpr26__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("getOrigvars", 0);

  /* "pygcgopt/gcg.pyx":623
 *         :return: List of original variables
 *         """
 *         cdef int n_vars = GCGmasterVarGetNOrigvars((<Variable>var).scip_var)             # <<<<<<<<<<<<<<
 *         cdef SCIP_VAR** originalvars = GCGmasterVarGetOrigvars((<Variable>var).scip_var)
 *         return [Variable.create(originalvars[i]) for i in range(n_vars)]
*/
  __pyx_v_n_vars = GCGmasterVarGetNOrigvars(((struct __pyx_obj_9pyscipopt_4scip_Variable *)__pyx_v_var)->scip_var);

  /* "pygcgopt/gcg.pyx":624
 *         """
 *         cdef int n_vars = GCGmasterVarGetNOrigvars((<Variable>var).scip_var)
 *         cdef SCIP_VAR** originalvars = GCGmasterVarGetOrigvars((<Variable>var).scip_var)             # <<<<<<<<<<<<<<
 *         return [Variable.create(originalvars[i]) for i in range(n_vars)]
 * 
*/
  __pyx_v_originalvars = GCGmasterVarGetOrigvars(((struct __pyx_obj_9pyscipopt_4scip_Variable *)__pyx_v_var)->scip_var);

  /* "pygcgopt/gcg.pyx":625
 *         cdef int n_vars = GCGmasterVarGetNOrigvars((<Variable>var).scip_var)
 *         cdef SCIP_VAR** originalvars = GCGmasterVarGetOrigvars((<Variable>var).scip_var)
 *         return [Variable.create(originalvars[i]) for i in range(n_vars)]             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_n_vars;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_9genexpr26__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = __pyx_vtabptr_9pyscipopt_4scip_Variable->create((__pyx_v_originalvars[__pyx_9genexpr26__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 625, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":617
 *         PY_SCIP_CALL(GCGpricerAddCol(gcg, col.gcg_col))
 * 
 *     def getOrigvars(self, var):             # <<<<<<<<<<<<<<
 *         """Returns the original variables corresponding to the variable of master problem
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pygcgopt.gcg.GCGMasterModel.getOrigvars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_4__reduce_cython__, "GCGMasterModel.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_14GCGMasterModel_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_4__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_4__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *)__pyx_v_self));

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

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

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self__iis_self__scip_self__valid, 0, 0);
  __PYX_ERR(2, 2, __pyx_L1_error)

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

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_6__setstate_cython__, "GCGMasterModel.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_14GCGMasterModel_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_6__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.GCGMasterModel.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14GCGMasterModel_6__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":4
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self__iis_self__scip_self__valid, 0, 0);
  __PYX_ERR(2, 4, __pyx_L1_error)

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

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

/* "pygcgopt/gcg.pyx":631
 *     """Base class holding a pointer to corresponding GCG_COL"""
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(GCG_COL* gcgcol):
 *         if gcgcol == NULL:
*/

static PyObject *__pyx_f_8pygcgopt_3gcg_9GCGColumn_create(GCG_COL *__pyx_v_gcgcol) {
  struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_col = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "pygcgopt/gcg.pyx":633
 *     @staticmethod
 *     cdef create(GCG_COL* gcgcol):
 *         if gcgcol == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create Column with GCG_COL* == NULL")
 *         col = GCGColumn()
*/
  __pyx_t_1 = (__pyx_v_gcgcol == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "pygcgopt/gcg.pyx":634
 *     cdef create(GCG_COL* gcgcol):
 *         if gcgcol == NULL:
 *             raise Warning("cannot create Column with GCG_COL* == NULL")             # <<<<<<<<<<<<<<
 *         col = GCGColumn()
 *         col.gcg_col = gcgcol
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_cannot_create_Column_with_GCG_CO};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_Warning)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 634, __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, 634, __pyx_L1_error)

    /* "pygcgopt/gcg.pyx":633
 *     @staticmethod
 *     cdef create(GCG_COL* gcgcol):
 *         if gcgcol == NULL:             # <<<<<<<<<<<<<<
 *             raise Warning("cannot create Column with GCG_COL* == NULL")
 *         col = GCGColumn()
*/
  }

  /* "pygcgopt/gcg.pyx":635
 *         if gcgcol == NULL:
 *             raise Warning("cannot create Column with GCG_COL* == NULL")
 *         col = GCGColumn()             # <<<<<<<<<<<<<<
 *         col.gcg_col = gcgcol
 *         return col
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGColumn, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 635, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __pyx_v_col = ((struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":636
 *             raise Warning("cannot create Column with GCG_COL* == NULL")
 *         col = GCGColumn()
 *         col.gcg_col = gcgcol             # <<<<<<<<<<<<<<
 *         return col
 * 
*/
  __pyx_v_col->gcg_col = __pyx_v_gcgcol;

  /* "pygcgopt/gcg.pyx":637
 *         col = GCGColumn()
 *         col.gcg_col = gcgcol
 *         return col             # <<<<<<<<<<<<<<
 * 
 *     def __hash__(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_col);
  __pyx_r = ((PyObject *)__pyx_v_col);
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":631
 *     """Base class holding a pointer to corresponding GCG_COL"""
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef create(GCG_COL* gcgcol):
 *         if gcgcol == NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.GCGColumn.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_col);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pygcgopt/gcg.pyx":639
 *         return col
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         return hash(<size_t>self.gcg_col)
 * 
*/

/* Python wrapper */
static Py_hash_t __pyx_pw_8pygcgopt_3gcg_9GCGColumn_1__hash__(PyObject *__pyx_v_self); /*proto*/
static Py_hash_t __pyx_pw_8pygcgopt_3gcg_9GCGColumn_1__hash__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_9GCGColumn___hash__(((struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *)__pyx_v_self));

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

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

  /* "pygcgopt/gcg.pyx":640
 * 
 *     def __hash__(self):
 *         return hash(<size_t>self.gcg_col)             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
*/
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(((size_t)__pyx_v_self->gcg_col)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 640, __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, 640, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":639
 *         return col
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         return hash(<size_t>self.gcg_col)
 * 
*/

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

/* "pygcgopt/gcg.pyx":642
 *         return hash(<size_t>self.gcg_col)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         return (self.__class__ == other.__class__ and self.gcg_col == (<GCGColumn>other).gcg_col)
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_9GCGColumn_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_8pygcgopt_3gcg_9GCGColumn_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_9GCGColumn_2__eq__(((struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_8pygcgopt_3gcg_9GCGColumn_2__eq__(struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pygcgopt/gcg.pyx":643
 * 
 *     def __eq__(self, other):
 *         return (self.__class__ == other.__class__ and self.gcg_col == (<GCGColumn>other).gcg_col)             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_mstate_global->__pyx_n_u_class); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 643, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 643, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_self->gcg_col == ((struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *)__pyx_v_other)->gcg_col);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pygcgopt/gcg.pyx":642
 *         return hash(<size_t>self.gcg_col)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         return (self.__class__ == other.__class__ and self.gcg_col == (<GCGColumn>other).gcg_col)
*/

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_9GCGColumn_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_9GCGColumn_4__reduce_cython__, "GCGColumn.__reduce_cython__(self)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_9GCGColumn_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_9GCGColumn_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_9GCGColumn_4__reduce_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_9GCGColumn_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_9GCGColumn_4__reduce_cython__(((struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *)__pyx_v_self));

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

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

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.gcg_col cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.gcg_col cannot be converted to a Python object for pickling"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self_gcg_col_cannot_be_converted, 0, 0);
  __PYX_ERR(2, 2, __pyx_L1_error)

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

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

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

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_9GCGColumn_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_9GCGColumn_6__setstate_cython__, "GCGColumn.__setstate_cython__(self, __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_9GCGColumn_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_9GCGColumn_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_9GCGColumn_6__setstate_cython__};
static PyObject *__pyx_pw_8pygcgopt_3gcg_9GCGColumn_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(2, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(2, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.GCGColumn.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_9GCGColumn_6__setstate_cython__(((struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

  /* "(tree fragment)":4
 *     raise TypeError, "self.gcg_col cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.gcg_col cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_self_gcg_col_cannot_be_converted, 0, 0);
  __PYX_ERR(2, 4, __pyx_L1_error)

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

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

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Detector(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xdad04ef, 0x67e9880, 0xf7f977a, b'detectorname, model')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_1__pyx_unpickle_Detector(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg___pyx_unpickle_Detector, "__pyx_unpickle_Detector(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_1__pyx_unpickle_Detector = {"__pyx_unpickle_Detector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_1__pyx_unpickle_Detector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg___pyx_unpickle_Detector};
static PyObject *__pyx_pw_8pygcgopt_3gcg_1__pyx_unpickle_Detector(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_Detector (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_Detector", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Detector", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Detector", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_Detector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg___pyx_unpickle_Detector(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg___pyx_unpickle_Detector(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_Detector", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_Detector(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xdad04ef, 0x67e9880, 0xf7f977a, b'detectorname, model')             # <<<<<<<<<<<<<<
 *     __pyx_result = Detector.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0xdad04ef, 0x67e9880, 0xf7f977a, __pyx_k_detectorname_model); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xdad04ef, 0x67e9880, 0xf7f977a, b'detectorname, model')
 *     __pyx_result = Detector.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Detector__set_state(<Detector> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xdad04ef, 0x67e9880, 0xf7f977a, b'detectorname, model')
 *     __pyx_result = Detector.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_Detector__set_state(<Detector> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = Detector.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Detector__set_state(<Detector> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_Detector__set_state(Detector __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_Detector__set_state(((struct __pyx_obj_8pygcgopt_3gcg_Detector *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xdad04ef, 0x67e9880, 0xf7f977a, b'detectorname, model')
 *     __pyx_result = Detector.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_Detector__set_state(<Detector> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Detector__set_state(<Detector> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_Detector__set_state(Detector __pyx_result, __pyx_state: tuple):
 *     __pyx_result.detectorname = __pyx_state[0]; __pyx_result.model = __pyx_state[1]
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Detector(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xdad04ef, 0x67e9880, 0xf7f977a, b'detectorname, model')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_Detector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_Detector__set_state(<Detector> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_Detector__set_state(Detector __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.detectorname = __pyx_state[0]; __pyx_result.model = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_Detector__set_state(struct __pyx_obj_8pygcgopt_3gcg_Detector *__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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_Detector__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_Detector__set_state(Detector __pyx_result, __pyx_state: tuple):
 *     __pyx_result.detectorname = __pyx_state[0]; __pyx_result.model = __pyx_state[1]             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->detectorname);
  __Pyx_DECREF(__pyx_v___pyx_result->detectorname);
  __pyx_v___pyx_result->detectorname = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->model);
  __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->model);
  __pyx_v___pyx_result->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_Detector__set_state(Detector __pyx_result, __pyx_state: tuple):
 *     __pyx_result.detectorname = __pyx_state[0]; __pyx_result.model = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)             # <<<<<<<<<<<<<<
*/
  __pyx_t_2 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 2); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_Detector__set_state(<Detector> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_Detector__set_state(Detector __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.detectorname = __pyx_state[0]; __pyx_result.model = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

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

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PricingSolver(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x9896ff5, 0x8734839, 0x7a6ef99, b'model, solvername')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_3__pyx_unpickle_PricingSolver(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_2__pyx_unpickle_PricingSolver, "__pyx_unpickle_PricingSolver(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_3__pyx_unpickle_PricingSolver = {"__pyx_unpickle_PricingSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_3__pyx_unpickle_PricingSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_2__pyx_unpickle_PricingSolver};
static PyObject *__pyx_pw_8pygcgopt_3gcg_3__pyx_unpickle_PricingSolver(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_PricingSolver (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_PricingSolver", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PricingSolver", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PricingSolver", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PricingSolver", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_2__pyx_unpickle_PricingSolver(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_2__pyx_unpickle_PricingSolver(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PricingSolver", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_PricingSolver(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x9896ff5, 0x8734839, 0x7a6ef99, b'model, solvername')             # <<<<<<<<<<<<<<
 *     __pyx_result = PricingSolver.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0x9896ff5, 0x8734839, 0x7a6ef99, __pyx_k_model_solvername); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x9896ff5, 0x8734839, 0x7a6ef99, b'model, solvername')
 *     __pyx_result = PricingSolver.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PricingSolver__set_state(<PricingSolver> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x9896ff5, 0x8734839, 0x7a6ef99, b'model, solvername')
 *     __pyx_result = PricingSolver.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PricingSolver__set_state(<PricingSolver> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = PricingSolver.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PricingSolver__set_state(<PricingSolver> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_PricingSolver__set_state(PricingSolver __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PricingSolver__set_state(((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x9896ff5, 0x8734839, 0x7a6ef99, b'model, solvername')
 *     __pyx_result = PricingSolver.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PricingSolver__set_state(<PricingSolver> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PricingSolver__set_state(<PricingSolver> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_PricingSolver__set_state(PricingSolver __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.solvername = __pyx_state[1]
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PricingSolver(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x9896ff5, 0x8734839, 0x7a6ef99, b'model, solvername')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PricingSolver", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_PricingSolver__set_state(<PricingSolver> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PricingSolver__set_state(PricingSolver __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.solvername = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PricingSolver__set_state(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *__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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PricingSolver__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_PricingSolver__set_state(PricingSolver __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.solvername = __pyx_state[1]             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->model);
  __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->model);
  __pyx_v___pyx_result->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->solvername);
  __Pyx_DECREF(__pyx_v___pyx_result->solvername);
  __pyx_v___pyx_result->solvername = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_PricingSolver__set_state(PricingSolver __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.solvername = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)             # <<<<<<<<<<<<<<
*/
  __pyx_t_2 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 2); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_PricingSolver__set_state(<PricingSolver> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PricingSolver__set_state(PricingSolver __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.solvername = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

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

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Score(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x636e5c2, 0x16f8d05, 0xb871c0f, b'model, scorename')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_5__pyx_unpickle_Score(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_4__pyx_unpickle_Score, "__pyx_unpickle_Score(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_5__pyx_unpickle_Score = {"__pyx_unpickle_Score", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5__pyx_unpickle_Score, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_4__pyx_unpickle_Score};
static PyObject *__pyx_pw_8pygcgopt_3gcg_5__pyx_unpickle_Score(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_Score (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_Score", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Score", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Score", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_Score", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_4__pyx_unpickle_Score(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_4__pyx_unpickle_Score(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_Score", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_Score(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x636e5c2, 0x16f8d05, 0xb871c0f, b'model, scorename')             # <<<<<<<<<<<<<<
 *     __pyx_result = Score.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0x636e5c2, 0x16f8d05, 0xb871c0f, __pyx_k_model_scorename); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x636e5c2, 0x16f8d05, 0xb871c0f, b'model, scorename')
 *     __pyx_result = Score.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Score__set_state(<Score> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Score);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x636e5c2, 0x16f8d05, 0xb871c0f, b'model, scorename')
 *     __pyx_result = Score.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_Score__set_state(<Score> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = Score.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Score__set_state(<Score> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_Score__set_state(Score __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_Score__set_state(((struct __pyx_obj_8pygcgopt_3gcg_Score *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x636e5c2, 0x16f8d05, 0xb871c0f, b'model, scorename')
 *     __pyx_result = Score.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_Score__set_state(<Score> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Score__set_state(<Score> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_Score__set_state(Score __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.scorename = __pyx_state[1]
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Score(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x636e5c2, 0x16f8d05, 0xb871c0f, b'model, scorename')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_Score", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_Score__set_state(<Score> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_Score__set_state(Score __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.scorename = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_Score__set_state(struct __pyx_obj_8pygcgopt_3gcg_Score *__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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_Score__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_Score__set_state(Score __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.scorename = __pyx_state[1]             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->model);
  __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->model);
  __pyx_v___pyx_result->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->scorename);
  __Pyx_DECREF(__pyx_v___pyx_result->scorename);
  __pyx_v___pyx_result->scorename = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_Score__set_state(Score __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.scorename = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)             # <<<<<<<<<<<<<<
*/
  __pyx_t_2 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 2); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_Score__set_state(<Score> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_Score__set_state(Score __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.scorename = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

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

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_ConsClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_7__pyx_unpickle_ConsClassifier(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_6__pyx_unpickle_ConsClassifier, "__pyx_unpickle_ConsClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_7__pyx_unpickle_ConsClassifier = {"__pyx_unpickle_ConsClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7__pyx_unpickle_ConsClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_6__pyx_unpickle_ConsClassifier};
static PyObject *__pyx_pw_8pygcgopt_3gcg_7__pyx_unpickle_ConsClassifier(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_ConsClassifier (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_ConsClassifier", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ConsClassifier", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ConsClassifier", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_ConsClassifier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_6__pyx_unpickle_ConsClassifier(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_6__pyx_unpickle_ConsClassifier(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_ConsClassifier", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_ConsClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')             # <<<<<<<<<<<<<<
 *     __pyx_result = ConsClassifier.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, __pyx_k_model_name); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
 *     __pyx_result = ConsClassifier.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_ConsClassifier__set_state(<ConsClassifier> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
 *     __pyx_result = ConsClassifier.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_ConsClassifier__set_state(<ConsClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = ConsClassifier.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_ConsClassifier__set_state(<ConsClassifier> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_ConsClassifier__set_state(ConsClassifier __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_ConsClassifier__set_state(((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
 *     __pyx_result = ConsClassifier.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_ConsClassifier__set_state(<ConsClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_ConsClassifier__set_state(<ConsClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_ConsClassifier__set_state(ConsClassifier __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_ConsClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_ConsClassifier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_ConsClassifier__set_state(<ConsClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_ConsClassifier__set_state(ConsClassifier __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_ConsClassifier__set_state(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *__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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_ConsClassifier__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_ConsClassifier__set_state(ConsClassifier __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->model);
  __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->model);
  __pyx_v___pyx_result->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __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;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_ConsClassifier__set_state(ConsClassifier __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)             # <<<<<<<<<<<<<<
*/
  __pyx_t_2 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 2); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_ConsClassifier__set_state(<ConsClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_ConsClassifier__set_state(ConsClassifier __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

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

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_VarClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_9__pyx_unpickle_VarClassifier(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_8__pyx_unpickle_VarClassifier, "__pyx_unpickle_VarClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_9__pyx_unpickle_VarClassifier = {"__pyx_unpickle_VarClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_9__pyx_unpickle_VarClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8__pyx_unpickle_VarClassifier};
static PyObject *__pyx_pw_8pygcgopt_3gcg_9__pyx_unpickle_VarClassifier(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_VarClassifier (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_VarClassifier", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_VarClassifier", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_VarClassifier", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_VarClassifier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_8__pyx_unpickle_VarClassifier(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_8__pyx_unpickle_VarClassifier(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_VarClassifier", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_VarClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')             # <<<<<<<<<<<<<<
 *     __pyx_result = VarClassifier.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, __pyx_k_model_name); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
 *     __pyx_result = VarClassifier.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_VarClassifier__set_state(<VarClassifier> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarClassifier);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
 *     __pyx_result = VarClassifier.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_VarClassifier__set_state(<VarClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = VarClassifier.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_VarClassifier__set_state(<VarClassifier> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_VarClassifier__set_state(VarClassifier __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_VarClassifier__set_state(((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
 *     __pyx_result = VarClassifier.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_VarClassifier__set_state(<VarClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_VarClassifier__set_state(<VarClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_VarClassifier__set_state(VarClassifier __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_VarClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_VarClassifier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_VarClassifier__set_state(<VarClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_VarClassifier__set_state(VarClassifier __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_VarClassifier__set_state(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *__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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_VarClassifier__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_VarClassifier__set_state(VarClassifier __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->model);
  __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->model);
  __pyx_v___pyx_result->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); 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) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __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;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_VarClassifier__set_state(VarClassifier __pyx_result, __pyx_state: tuple):
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)             # <<<<<<<<<<<<<<
*/
  __pyx_t_2 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 2); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_VarClassifier__set_state(<VarClassifier> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_VarClassifier__set_state(VarClassifier __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result.model = __pyx_state[0]; __pyx_result.name = __pyx_state[1]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 2)
*/

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

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_GCG_PRICINGSTATUS(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_11__pyx_unpickle_PY_GCG_PRICINGSTATUS(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_10__pyx_unpickle_PY_GCG_PRICINGSTATUS, "__pyx_unpickle_PY_GCG_PRICINGSTATUS(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_11__pyx_unpickle_PY_GCG_PRICINGSTATUS = {"__pyx_unpickle_PY_GCG_PRICINGSTATUS", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11__pyx_unpickle_PY_GCG_PRICINGSTATUS, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_10__pyx_unpickle_PY_GCG_PRICINGSTATUS};
static PyObject *__pyx_pw_8pygcgopt_3gcg_11__pyx_unpickle_PY_GCG_PRICINGSTATUS(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_GCG_PRICINGSTATUS (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_PY_GCG_PRICINGSTATUS", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PY_GCG_PRICINGSTATUS", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PY_GCG_PRICINGSTATUS", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_GCG_PRICINGSTATUS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_10__pyx_unpickle_PY_GCG_PRICINGSTATUS(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_10__pyx_unpickle_PY_GCG_PRICINGSTATUS(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_GCG_PRICINGSTATUS", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_PY_GCG_PRICINGSTATUS(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')             # <<<<<<<<<<<<<<
 *     __pyx_result = PY_GCG_PRICINGSTATUS.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, __pyx_k__6); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_GCG_PRICINGSTATUS.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(<PY_GCG_PRICINGSTATUS> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_GCG_PRICINGSTATUS.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(<PY_GCG_PRICINGSTATUS> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = PY_GCG_PRICINGSTATUS.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(<PY_GCG_PRICINGSTATUS> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(PY_GCG_PRICINGSTATUS __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(((struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_GCG_PRICINGSTATUS.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(<PY_GCG_PRICINGSTATUS> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(<PY_GCG_PRICINGSTATUS> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(PY_GCG_PRICINGSTATUS __pyx_result, __pyx_state: tuple):
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_GCG_PRICINGSTATUS(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_GCG_PRICINGSTATUS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(<PY_GCG_PRICINGSTATUS> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(PY_GCG_PRICINGSTATUS __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(PY_GCG_PRICINGSTATUS __pyx_result, __pyx_state: tuple):
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 12, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(<PY_GCG_PRICINGSTATUS> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(PY_GCG_PRICINGSTATUS __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_USERGIVEN(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_13__pyx_unpickle_PY_USERGIVEN(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_12__pyx_unpickle_PY_USERGIVEN, "__pyx_unpickle_PY_USERGIVEN(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_13__pyx_unpickle_PY_USERGIVEN = {"__pyx_unpickle_PY_USERGIVEN", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13__pyx_unpickle_PY_USERGIVEN, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_12__pyx_unpickle_PY_USERGIVEN};
static PyObject *__pyx_pw_8pygcgopt_3gcg_13__pyx_unpickle_PY_USERGIVEN(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_USERGIVEN (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_PY_USERGIVEN", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PY_USERGIVEN", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PY_USERGIVEN", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_USERGIVEN", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_12__pyx_unpickle_PY_USERGIVEN(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_12__pyx_unpickle_PY_USERGIVEN(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_USERGIVEN", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_PY_USERGIVEN(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')             # <<<<<<<<<<<<<<
 *     __pyx_result = PY_USERGIVEN.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, __pyx_k__6); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_USERGIVEN.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_USERGIVEN__set_state(<PY_USERGIVEN> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_USERGIVEN.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PY_USERGIVEN__set_state(<PY_USERGIVEN> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = PY_USERGIVEN.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_USERGIVEN__set_state(<PY_USERGIVEN> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_USERGIVEN__set_state(PY_USERGIVEN __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_USERGIVEN__set_state(((struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_USERGIVEN.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PY_USERGIVEN__set_state(<PY_USERGIVEN> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_USERGIVEN__set_state(<PY_USERGIVEN> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_PY_USERGIVEN__set_state(PY_USERGIVEN __pyx_result, __pyx_state: tuple):
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_USERGIVEN(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_USERGIVEN", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_PY_USERGIVEN__set_state(<PY_USERGIVEN> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_USERGIVEN__set_state(PY_USERGIVEN __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_USERGIVEN__set_state(struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_USERGIVEN__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_USERGIVEN__set_state(PY_USERGIVEN __pyx_result, __pyx_state: tuple):
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 12, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_PY_USERGIVEN__set_state(<PY_USERGIVEN> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_USERGIVEN__set_state(PY_USERGIVEN __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_USERGIVEN__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_VAR_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_15__pyx_unpickle_PY_VAR_DECOMPINFO(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_14__pyx_unpickle_PY_VAR_DECOMPINFO, "__pyx_unpickle_PY_VAR_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_15__pyx_unpickle_PY_VAR_DECOMPINFO = {"__pyx_unpickle_PY_VAR_DECOMPINFO", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_15__pyx_unpickle_PY_VAR_DECOMPINFO, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14__pyx_unpickle_PY_VAR_DECOMPINFO};
static PyObject *__pyx_pw_8pygcgopt_3gcg_15__pyx_unpickle_PY_VAR_DECOMPINFO(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_VAR_DECOMPINFO (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_PY_VAR_DECOMPINFO", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PY_VAR_DECOMPINFO", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PY_VAR_DECOMPINFO", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_VAR_DECOMPINFO", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_14__pyx_unpickle_PY_VAR_DECOMPINFO(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_14__pyx_unpickle_PY_VAR_DECOMPINFO(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_VAR_DECOMPINFO", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_PY_VAR_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')             # <<<<<<<<<<<<<<
 *     __pyx_result = PY_VAR_DECOMPINFO.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, __pyx_k__6); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_VAR_DECOMPINFO.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(<PY_VAR_DECOMPINFO> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_VAR_DECOMPINFO.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(<PY_VAR_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = PY_VAR_DECOMPINFO.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(<PY_VAR_DECOMPINFO> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(PY_VAR_DECOMPINFO __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_VAR_DECOMPINFO__set_state(((struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_VAR_DECOMPINFO.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(<PY_VAR_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(<PY_VAR_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(PY_VAR_DECOMPINFO __pyx_result, __pyx_state: tuple):
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_VAR_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_VAR_DECOMPINFO", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(<PY_VAR_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(PY_VAR_DECOMPINFO __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_VAR_DECOMPINFO__set_state(struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_VAR_DECOMPINFO__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(PY_VAR_DECOMPINFO __pyx_result, __pyx_state: tuple):
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 12, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(<PY_VAR_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(PY_VAR_DECOMPINFO __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_VAR_DECOMPINFO__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_CONS_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/

/* Python wrapper */
static PyObject *__pyx_pw_8pygcgopt_3gcg_17__pyx_unpickle_PY_CONS_DECOMPINFO(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pygcgopt_3gcg_16__pyx_unpickle_PY_CONS_DECOMPINFO, "__pyx_unpickle_PY_CONS_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state)");
static PyMethodDef __pyx_mdef_8pygcgopt_3gcg_17__pyx_unpickle_PY_CONS_DECOMPINFO = {"__pyx_unpickle_PY_CONS_DECOMPINFO", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_17__pyx_unpickle_PY_CONS_DECOMPINFO, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_16__pyx_unpickle_PY_CONS_DECOMPINFO};
static PyObject *__pyx_pw_8pygcgopt_3gcg_17__pyx_unpickle_PY_CONS_DECOMPINFO(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_CONS_DECOMPINFO (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__pyx_unpickle_PY_CONS_DECOMPINFO", 0) < (0)) __PYX_ERR(2, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PY_CONS_DECOMPINFO", 1, 3, 3, i); __PYX_ERR(2, 4, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PY_CONS_DECOMPINFO", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_CONS_DECOMPINFO", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(2, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pygcgopt_3gcg_16__pyx_unpickle_PY_CONS_DECOMPINFO(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pygcgopt_3gcg_16__pyx_unpickle_PY_CONS_DECOMPINFO(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  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;
  size_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_CONS_DECOMPINFO", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_PY_CONS_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')             # <<<<<<<<<<<<<<
 *     __pyx_result = PY_CONS_DECOMPINFO.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, __pyx_k__6); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_CONS_DECOMPINFO.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(<PY_CONS_DECOMPINFO> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_CONS_DECOMPINFO.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(<PY_CONS_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = PY_CONS_DECOMPINFO.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(<PY_CONS_DECOMPINFO> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(PY_CONS_DECOMPINFO __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(2, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_CONS_DECOMPINFO__set_state(((struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
 *     __pyx_result = PY_CONS_DECOMPINFO.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(<PY_CONS_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(<PY_CONS_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(PY_CONS_DECOMPINFO __pyx_result, __pyx_state: tuple):
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_CONS_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_CONS_DECOMPINFO", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(<PY_CONS_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(PY_CONS_DECOMPINFO __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/

static PyObject *__pyx_f_8pygcgopt_3gcg___pyx_unpickle_PY_CONS_DECOMPINFO__set_state(struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_PY_CONS_DECOMPINFO__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(PY_CONS_DECOMPINFO __pyx_result, __pyx_state: tuple):
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 12, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(<PY_CONS_DECOMPINFO> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(PY_CONS_DECOMPINFO __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 0)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pygcgopt.gcg.__pyx_unpickle_PY_CONS_DECOMPINFO__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* #### Code section: module_exttypes ### */
static struct __pyx_vtabstruct_8pygcgopt_3gcg_DetProbData __pyx_vtable_8pygcgopt_3gcg_DetProbData;

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_DetProbData(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_DetProbData *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)o);
  p->__pyx_vtab = __pyx_vtabptr_8pygcgopt_3gcg_DetProbData;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_DetProbData(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_DetProbData) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_DetProbData[] = {
  {"createConsPart", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_1createConsPart, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_createConsPart},
  {"createVarPart", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_3createVarPart, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_2createVarPart},
  {"candidatesNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_5candidatesNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_4candidatesNBlocks},
  {"candidatesNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_7candidatesNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_6candidatesNBlocks},
  {"conspartitioncollection", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_9conspartitioncollection, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_8conspartitioncollection},
  {"conspartitioncollection", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_11conspartitioncollection, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_10conspartitioncollection},
  {"varpartitioncollection", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_13varpartitioncollection, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_12varpartitioncollection},
  {"varpartitioncollection", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_15varpartitioncollection, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_14varpartitioncollection},
  {"classificationtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_17classificationtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_16classificationtime},
  {"classificationtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_19classificationtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_18classificationtime},
  {"nblockscandidatescalctime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_21nblockscandidatescalctime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_20nblockscandidatescalctime},
  {"nblockscandidatescalctime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_23nblockscandidatescalctime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_22nblockscandidatescalctime},
  {"postprocessingtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_25postprocessingtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_24postprocessingtime},
  {"postprocessingtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_27postprocessingtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_26postprocessingtime},
  {"translatingtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_29translatingtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_28translatingtime},
  {"translatingtime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_31translatingtime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_30translatingtime},
  {"addConsPartition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_33addConsPartition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_32addConsPartition},
  {"addCandidatesNBlocksNVotes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_35addCandidatesNBlocksNVotes, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_34addCandidatesNBlocksNVotes},
  {"addPartialdecToAncestor", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_37addPartialdecToAncestor, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_36addPartialdecToAncestor},
  {"addPartialdecToOpen", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_39addPartialdecToOpen, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_38addPartialdecToOpen},
  {"addPartialdecToFinished", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_41addPartialdecToFinished, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_40addPartialdecToFinished},
  {"addPartialdecToFinishedUnchecked", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_43addPartialdecToFinishedUnchecked, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_42addPartialdecToFinishedUnchecked},
  {"addVarPartition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_45addVarPartition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_44addVarPartition},
  {"clearAncestorPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_47clearAncestorPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_46clearAncestorPartialdecs},
  {"clearCurrentPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_49clearCurrentPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_48clearCurrentPartialdecs},
  {"clearFinishedPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_51clearFinishedPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_50clearFinishedPartialdecs},
  {"createConssAdjacency", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_53createConssAdjacency, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_52createConssAdjacency},
  {"freeTemporaryData", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_55freeTemporaryData, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_54freeTemporaryData},
  {"getAncestorPartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_57getAncestorPartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_56getAncestorPartialdec},
  {"getConsPartition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_59getConsPartition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_58getConsPartition},
  {"getConsPartitions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_61getConsPartitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_60getConsPartitions},
  {"getCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_63getCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_62getCons},
  {"getConssForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_65getConssForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_64getConssForCons},
  {"getConssForVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_67getConssForVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_66getConssForVar},
  {"getOpenPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_69getOpenPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_68getOpenPartialdecs},
  {"getFinishedPartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_71getFinishedPartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_70getFinishedPartialdec},
  {"getFinishedPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_73getFinishedPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_72getFinishedPartialdecs},
  {"getIndexForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_75getIndexForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_74getIndexForCons},
  {"getIndexForVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_77getIndexForVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_76getIndexForVar},
  {"getNAncestorPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_79getNAncestorPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_78getNAncestorPartialdecs},
  {"getNConsPartitions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_81getNConsPartitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_80getNConsPartitions},
  {"getNConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_83getNConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_82getNConss},
  {"getNConssForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_85getNConssForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_84getNConssForCons},
  {"getNConssForVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_87getNConssForVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_86getNConssForVar},
  {"getNOpenPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_89getNOpenPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_88getNOpenPartialdecs},
  {"getNFinishedPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_91getNFinishedPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_90getNFinishedPartialdecs},
  {"getNPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_93getNPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_92getNPartialdecs},
  {"getNNonzeros", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_95getNNonzeros, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_94getNNonzeros},
  {"getNVarPartitions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_97getNVarPartitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_96getNVarPartitions},
  {"getNVars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_99getNVars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_98getNVars},
  {"getNVarsForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_101getNVarsForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_100getNVarsForCons},
  {"getOrigVarsFixedZero", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_103getOrigVarsFixedZero, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_102getOrigVarsFixedZero},
  {"getRelevantConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_105getRelevantConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_104getRelevantConss},
  {"getRelevantVars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_107getRelevantVars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_106getRelevantVars},
  {"getSortedCandidatesNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_109getSortedCandidatesNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_108getSortedCandidatesNBlocks},
  {"getVal", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_111getVal, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_110getVal},
  {"getValsForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_113getValsForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_112getValsForCons},
  {"getVarPartition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_115getVarPartition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_114getVarPartition},
  {"getVarPartitions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_117getVarPartitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_116getVarPartitions},
  {"getVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_119getVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_118getVar},
  {"getVarsForCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_121getVarsForCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_120getVarsForCons},
  {"isConsCardinalityCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_123isConsCardinalityCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_122isConsCardinalityCons},
  {"isConssAdjInitialized", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_125isConssAdjInitialized, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_124isConssAdjInitialized},
  {"isConsSetpp", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_127isConsSetpp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_126isConsSetpp},
  {"isConsSetppc", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_129isConsSetppc, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_128isConsSetppc},
  {"isPartialdecDuplicateofFinished", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_131isPartialdecDuplicateofFinished, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_130isPartialdecDuplicateofFinished},
  {"isAssignedToOrigProb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_133isAssignedToOrigProb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_132isAssignedToOrigProb},
  {"partialdecIsNoDuplicateOfPartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_135partialdecIsNoDuplicateOfPartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_134partialdecIsNoDuplicateOfPartialdecs},
  {"sortFinishedForScore", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_137sortFinishedForScore, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_136sortFinishedForScore},
  {"translatePartialdecs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_139translatePartialdecs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_138translatePartialdecs},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_141__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_140__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_11DetProbData_143__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_11DetProbData_142__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_DetProbData_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_DetProbData},
  {Py_tp_doc, (void *)PyDoc_STR("Base class holding a pointer to corresponding DETPROBDATA")},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_DetProbData},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_DetProbData},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_DetProbData_spec = {
  "pygcgopt.gcg.DetProbData",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_DetProbData),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_8pygcgopt_3gcg_DetProbData_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_DetProbData = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""DetProbData", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_DetProbData), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_DetProbData, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  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*/
  PyDoc_STR("Base class holding a pointer to corresponding DETPROBDATA"), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_DetProbData, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_DetProbData, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_8pygcgopt_3gcg_ConsPart __pyx_vtable_8pygcgopt_3gcg_ConsPart;

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_ConsPart(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_ConsPart *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)o);
  p->__pyx_vtab = __pyx_vtabptr_8pygcgopt_3gcg_ConsPart;
  p->detProbData = ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_ConsPart(PyObject *o) {
  struct __pyx_obj_8pygcgopt_3gcg_ConsPart *p = (struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_ConsPart) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->detProbData);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_ConsPart(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_8pygcgopt_3gcg_ConsPart *p = (struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->detProbData) {
    e = (*v)(((PyObject *)p->detProbData), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_ConsPart(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_8pygcgopt_3gcg_ConsPart *p = (struct __pyx_obj_8pygcgopt_3gcg_ConsPart *)o;
  tmp = ((PyObject*)p->detProbData);
  p->detProbData = ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_ConsPart[] = {
  {"getClassDescription", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_1getClassDescription, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_getClassDescription},
  {"getClassName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_3getClassName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_2getClassName},
  {"getName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_5getName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_4getName},
  {"getNClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_7getNClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_6getNClasses},
  {"removeEmptyClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_9removeEmptyClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_8removeEmptyClasses},
  {"setClassDescription", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_11setClassDescription, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_10setClassDescription},
  {"setClassName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_13setClassName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_12setClassName},
  {"addClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_15addClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_14addClass},
  {"assignConsToClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_17assignConsToClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_16assignConsToClass},
  {"getAllSubsets", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_19getAllSubsets, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_18getAllSubsets},
  {"getClassDecompInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_21getClassDecompInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_20getClassDecompInfo},
  {"getClassNameOfCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_23getClassNameOfCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_22getClassNameOfCons},
  {"getClassOfCons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_25getClassOfCons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_24getClassOfCons},
  {"getNConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_27getNConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_26getNConss},
  {"getNConssOfClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_29getNConssOfClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_28getNConssOfClasses},
  {"isConsClassified", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_31isConsClassified, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_30isConsClassified},
  {"reduceClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_33reduceClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_32reduceClasses},
  {"setClassDecompInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_35setClassDecompInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_34setClassDecompInfo},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_37__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_36__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8ConsPart_39__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8ConsPart_38__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_ConsPart_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_ConsPart},
  {Py_tp_doc, (void *)PyDoc_STR("Base class holding a pointer to corresponding ConsPartition")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_ConsPart},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_ConsPart},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_ConsPart},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_ConsPart},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_ConsPart_spec = {
  "pygcgopt.gcg.ConsPart",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_ConsPart),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_ConsPart_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_ConsPart = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""ConsPart", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_ConsPart), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_ConsPart, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("Base class holding a pointer to corresponding ConsPartition"), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_ConsPart, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_ConsPart, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_ConsPart, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_ConsPart, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_8pygcgopt_3gcg_VarPart __pyx_vtable_8pygcgopt_3gcg_VarPart;

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_VarPart(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_VarPart *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_VarPart *)o);
  p->__pyx_vtab = __pyx_vtabptr_8pygcgopt_3gcg_VarPart;
  p->detProbData = ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_VarPart(PyObject *o) {
  struct __pyx_obj_8pygcgopt_3gcg_VarPart *p = (struct __pyx_obj_8pygcgopt_3gcg_VarPart *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_VarPart) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->detProbData);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_VarPart(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_8pygcgopt_3gcg_VarPart *p = (struct __pyx_obj_8pygcgopt_3gcg_VarPart *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->detProbData) {
    e = (*v)(((PyObject *)p->detProbData), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_VarPart(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_8pygcgopt_3gcg_VarPart *p = (struct __pyx_obj_8pygcgopt_3gcg_VarPart *)o;
  tmp = ((PyObject*)p->detProbData);
  p->detProbData = ((struct __pyx_obj_8pygcgopt_3gcg_DetProbData *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_VarPart[] = {
  {"getClassDescription", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_1getClassDescription, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_getClassDescription},
  {"getClassName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_3getClassName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_2getClassName},
  {"getName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_5getName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_4getName},
  {"getNClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_7getNClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_6getNClasses},
  {"removeEmptyClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_9removeEmptyClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_8removeEmptyClasses},
  {"setClassDescription", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_11setClassDescription, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_10setClassDescription},
  {"setClassName", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_13setClassName, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_12setClassName},
  {"addClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_15addClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_14addClass},
  {"assignVarToClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_17assignVarToClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_16assignVarToClass},
  {"getAllSubsets", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_19getAllSubsets, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_18getAllSubsets},
  {"getClassDecompInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_21getClassDecompInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_20getClassDecompInfo},
  {"getClassNameOfVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_23getClassNameOfVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_22getClassNameOfVar},
  {"getClassOfVar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_25getClassOfVar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_24getClassOfVar},
  {"getNVars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_27getNVars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_26getNVars},
  {"getNVarsOfClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_29getNVarsOfClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_28getNVarsOfClasses},
  {"isVarClassified", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_31isVarClassified, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_30isVarClassified},
  {"reduceClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_33reduceClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_32reduceClasses},
  {"setClassDecompInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_35setClassDecompInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_34setClassDecompInfo},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_37__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_36__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_7VarPart_39__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_7VarPart_38__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_VarPart_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_VarPart},
  {Py_tp_doc, (void *)PyDoc_STR("Base class holding a pointer to corresponding VarPartition")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_VarPart},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_VarPart},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_VarPart},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_VarPart},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_VarPart_spec = {
  "pygcgopt.gcg.VarPart",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_VarPart),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_VarPart_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_VarPart = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""VarPart", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_VarPart), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_VarPart, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("Base class holding a pointer to corresponding VarPartition"), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_VarPart, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_VarPart, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_VarPart, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_VarPart, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGColumn __pyx_vtable_8pygcgopt_3gcg_GCGColumn;

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_GCGColumn(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_GCGColumn *)o);
  p->__pyx_vtab = __pyx_vtabptr_8pygcgopt_3gcg_GCGColumn;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_GCGColumn(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_GCGColumn) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_tp_richcompare_8pygcgopt_3gcg_GCGColumn(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_8pygcgopt_3gcg_9GCGColumn_3__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_8pygcgopt_3gcg_9GCGColumn_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 PyMethodDef __pyx_methods_8pygcgopt_3gcg_GCGColumn[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_9GCGColumn_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_9GCGColumn_4__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_9GCGColumn_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_9GCGColumn_6__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_GCGColumn_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_GCGColumn},
  {Py_tp_hash, (void *)__pyx_pw_8pygcgopt_3gcg_9GCGColumn_1__hash__},
  {Py_tp_doc, (void *)PyDoc_STR("Base class holding a pointer to corresponding GCG_COL")},
  {Py_tp_richcompare, (void *)__pyx_tp_richcompare_8pygcgopt_3gcg_GCGColumn},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_GCGColumn},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_GCGColumn},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_GCGColumn_spec = {
  "pygcgopt.gcg.GCGColumn",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_GCGColumn),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_8pygcgopt_3gcg_GCGColumn_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_GCGColumn = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""GCGColumn", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_GCGColumn), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_GCGColumn, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  __pyx_pw_8pygcgopt_3gcg_9GCGColumn_1__hash__, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  PyDoc_STR("Base class holding a pointer to corresponding GCG_COL"), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_tp_richcompare_8pygcgopt_3gcg_GCGColumn, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_GCGColumn, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_GCGColumn, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_Detector(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_Detector *)o);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  p->detectorname = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_Detector(PyObject *o) {
  struct __pyx_obj_8pygcgopt_3gcg_Detector *p = (struct __pyx_obj_8pygcgopt_3gcg_Detector *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_Detector) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->model);
  Py_CLEAR(p->detectorname);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_Detector(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_8pygcgopt_3gcg_Detector *p = (struct __pyx_obj_8pygcgopt_3gcg_Detector *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->model) {
    e = (*v)(((PyObject *)p->model), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_Detector(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_8pygcgopt_3gcg_Detector *p = (struct __pyx_obj_8pygcgopt_3gcg_Detector *)o;
  tmp = ((PyObject*)p->model);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_8Detector_model(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_8Detector_5model_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_8Detector_model(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_8Detector_5model_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_8Detector_5model_5__del__(o);
  }
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_8Detector_detectorname(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_8Detector_12detectorname_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_8Detector_detectorname(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_8Detector_12detectorname_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_8Detector_12detectorname_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_Detector[] = {
  {"freeDetector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_1freeDetector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_freeDetector},
  {"initDetector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_3initDetector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_2initDetector},
  {"exitDetector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_5exitDetector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_4exitDetector},
  {"propagatePartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_7propagatePartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_6propagatePartialdec},
  {"finishPartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_9finishPartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_8finishPartialdec},
  {"postprocessPartialdec", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_11postprocessPartialdec, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_10postprocessPartialdec},
  {"setParamAggressive", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_13setParamAggressive, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_12setParamAggressive},
  {"setParamDefault", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_15setParamDefault, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_14setParamDefault},
  {"setParamFast", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_17setParamFast, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_16setParamFast},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_19__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_18__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_8Detector_21__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_8Detector_20__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_8pygcgopt_3gcg_Detector[] = {
  {"model", __pyx_getprop_8pygcgopt_3gcg_8Detector_model, __pyx_setprop_8pygcgopt_3gcg_8Detector_model, PyDoc_STR("model: pygcgopt.gcg.Model"), 0},
  {"detectorname", __pyx_getprop_8pygcgopt_3gcg_8Detector_detectorname, __pyx_setprop_8pygcgopt_3gcg_8Detector_detectorname, PyDoc_STR("detectorname: str"), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_Detector_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_Detector},
  {Py_tp_doc, (void *)PyDoc_STR("Base class of the Detector Plugin")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_Detector},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_Detector},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_Detector},
  {Py_tp_getset, (void *)__pyx_getsets_8pygcgopt_3gcg_Detector},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_Detector},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_Detector_spec = {
  "pygcgopt.gcg.Detector",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_Detector),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_Detector_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_Detector = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""Detector", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_Detector), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_Detector, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("Base class of the Detector Plugin"), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_Detector, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_Detector, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_Detector, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_8pygcgopt_3gcg_Detector, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_Detector, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PricingSolver(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)o);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  p->solvername = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_PricingSolver(PyObject *o) {
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *p = (struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_PricingSolver) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->model);
  Py_CLEAR(p->solvername);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_PricingSolver(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *p = (struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->model) {
    e = (*v)(((PyObject *)p->model), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_PricingSolver(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *p = (struct __pyx_obj_8pygcgopt_3gcg_PricingSolver *)o;
  tmp = ((PyObject*)p->model);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_13PricingSolver_model(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_13PricingSolver_5model_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_13PricingSolver_model(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_13PricingSolver_5model_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_13PricingSolver_5model_5__del__(o);
  }
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_13PricingSolver_solvername(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_13PricingSolver_10solvername_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_13PricingSolver_solvername(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_13PricingSolver_10solvername_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_13PricingSolver_10solvername_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_PricingSolver[] = {
  {"freeSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_1freeSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_freeSolver},
  {"initSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_3initSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_2initSolver},
  {"exitSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_5exitSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_4exitSolver},
  {"initSolution", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_7initSolution, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_6initSolution},
  {"exitSolution", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_9exitSolution, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_8exitSolution},
  {"updateSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_11updateSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_10updateSolver},
  {"solve", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_13solve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_12solve},
  {"solveHeuristic", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_15solveHeuristic, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_14solveHeuristic},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_17__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_16__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13PricingSolver_19__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13PricingSolver_18__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_8pygcgopt_3gcg_PricingSolver[] = {
  {"model", __pyx_getprop_8pygcgopt_3gcg_13PricingSolver_model, __pyx_setprop_8pygcgopt_3gcg_13PricingSolver_model, PyDoc_STR("model: pygcgopt.gcg.Model"), 0},
  {"solvername", __pyx_getprop_8pygcgopt_3gcg_13PricingSolver_solvername, __pyx_setprop_8pygcgopt_3gcg_13PricingSolver_solvername, PyDoc_STR("solvername: str"), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_PricingSolver_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_PricingSolver},
  {Py_tp_doc, (void *)PyDoc_STR("Base class of the Pricing Solver Plugin")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_PricingSolver},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_PricingSolver},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_PricingSolver},
  {Py_tp_getset, (void *)__pyx_getsets_8pygcgopt_3gcg_PricingSolver},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_PricingSolver},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_PricingSolver_spec = {
  "pygcgopt.gcg.PricingSolver",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_PricingSolver_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_PricingSolver = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""PricingSolver", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PricingSolver), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_PricingSolver, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("Base class of the Pricing Solver Plugin"), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_PricingSolver, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_PricingSolver, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_PricingSolver, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_8pygcgopt_3gcg_PricingSolver, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_PricingSolver, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_Score(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_Score *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_Score *)o);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  p->scorename = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_Score(PyObject *o) {
  struct __pyx_obj_8pygcgopt_3gcg_Score *p = (struct __pyx_obj_8pygcgopt_3gcg_Score *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_Score) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->model);
  Py_CLEAR(p->scorename);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_Score(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_8pygcgopt_3gcg_Score *p = (struct __pyx_obj_8pygcgopt_3gcg_Score *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->model) {
    e = (*v)(((PyObject *)p->model), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_Score(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_8pygcgopt_3gcg_Score *p = (struct __pyx_obj_8pygcgopt_3gcg_Score *)o;
  tmp = ((PyObject*)p->model);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_5Score_model(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_5Score_5model_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_5Score_model(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_5Score_5model_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_5Score_5model_5__del__(o);
  }
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_5Score_scorename(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_5Score_9scorename_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_5Score_scorename(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_5Score_9scorename_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_5Score_9scorename_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_Score[] = {
  {"scorefree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Score_1scorefree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Score_scorefree},
  {"scorecalculate", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Score_3scorecalculate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Score_2scorecalculate},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Score_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Score_4__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Score_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Score_6__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_8pygcgopt_3gcg_Score[] = {
  {"model", __pyx_getprop_8pygcgopt_3gcg_5Score_model, __pyx_setprop_8pygcgopt_3gcg_5Score_model, PyDoc_STR("model: pygcgopt.gcg.Model"), 0},
  {"scorename", __pyx_getprop_8pygcgopt_3gcg_5Score_scorename, __pyx_setprop_8pygcgopt_3gcg_5Score_scorename, PyDoc_STR("scorename: str"), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_Score_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_Score},
  {Py_tp_doc, (void *)PyDoc_STR("Base class of the Score Plugin")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_Score},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_Score},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_Score},
  {Py_tp_getset, (void *)__pyx_getsets_8pygcgopt_3gcg_Score},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_Score},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_Score_spec = {
  "pygcgopt.gcg.Score",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_Score),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_Score_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_Score = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""Score", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_Score), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_Score, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("Base class of the Score Plugin"), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_Score, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_Score, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_Score, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_8pygcgopt_3gcg_Score, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_Score, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_8pygcgopt_3gcg_PartialDecomposition __pyx_vtable_8pygcgopt_3gcg_PartialDecomposition;

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PartialDecomposition(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)o);
  p->__pyx_vtab = __pyx_vtabptr_8pygcgopt_3gcg_PartialDecomposition;
  p->_visualizations = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->py_block_id_map = ((PyObject*)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_PartialDecomposition(PyObject *o) {
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *p = (struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_PartialDecomposition) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->_visualizations);
  Py_CLEAR(p->py_block_id_map);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_PartialDecomposition(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *p = (struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_visualizations) {
    e = (*v)(p->_visualizations, a); if (e) return e;
  }
  if (p->py_block_id_map) {
    e = (*v)(p->py_block_id_map, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_PartialDecomposition(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *p = (struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *)o;
  tmp = ((PyObject*)p->_visualizations);
  p->_visualizations = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->py_block_id_map);
  p->py_block_id_map = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_isSelected(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_10isSelected_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_20PartialDecomposition_isSelected(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_10isSelected_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_max_white_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15max_white_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_classic_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_13classic_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_border_area_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_17border_area_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_max_for_white_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_19max_for_white_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_set_part_for_white_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_24set_part_for_white_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_max_for_white_agg_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_23max_for_white_agg_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_set_part_for_white_agg_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_28set_part_for_white_agg_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_benders_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_13benders_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_strong_decomp_score(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_19strong_decomp_score_1__get__(o);
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition__visualizations(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_20PartialDecomposition__visualizations(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15_visualizations_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_PartialDecomposition[] = {
  {"__copy__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_5__copy__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_4__copy__},
  {"copy", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_7copy, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_6copy},
  {"addBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_9addBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_8addBlock},
  {"assignOpenConssToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_11assignOpenConssToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_10assignOpenConssToMaster},
  {"isComplete", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_13isComplete, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_12isComplete},
  {"isTrivial", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_15isTrivial, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_14isTrivial},
  {"getNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_17getNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_16getNBlocks},
  {"getNConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_19getNConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_18getNConss},
  {"getNVars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_21getNVars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_20getNVars},
  {"getID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_23getID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_22getID},
  {"getHashValue", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_25getHashValue, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_24getHashValue},
  {"getDetprobdata", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_27getDetprobdata, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_26getDetprobdata},
  {"fixConsToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_29fixConsToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_28fixConsToMaster},
  {"fixConssToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_31fixConssToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_30fixConssToMaster},
  {"fixConsToBlockId", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_33fixConsToBlockId, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_32fixConsToBlockId},
  {"fixConssToBlockId", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_35fixConssToBlockId, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_34fixConssToBlockId},
  {"fixConsToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_37fixConsToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_36fixConsToBlock},
  {"fixConssToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_39fixConssToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_38fixConssToBlock},
  {"hasSetppccardMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_41hasSetppccardMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_40hasSetppccardMaster},
  {"hasSetppcMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_43hasSetppcMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_42hasSetppcMaster},
  {"hasSetppMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_45hasSetppMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_44hasSetppMaster},
  {"getNOpenconss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_47getNOpenconss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_46getNOpenconss},
  {"getOpenconss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_49getOpenconss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_48getOpenconss},
  {"getNLinkingvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_51getNLinkingvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_50getNLinkingvars},
  {"getLinkingvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_53getLinkingvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_52getLinkingvars},
  {"getNMasterconss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_55getNMasterconss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_54getNMasterconss},
  {"getMasterconss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_57getMasterconss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_56getMasterconss},
  {"getNMastervars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_59getNMastervars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_58getNMastervars},
  {"getMastervars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_61getMastervars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_60getMastervars},
  {"getNOpenvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_63getNOpenvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_62getNOpenvars},
  {"getOpenvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_65getOpenvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_64getOpenvars},
  {"getNStairlinkingvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_67getNStairlinkingvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_66getNStairlinkingvars},
  {"getConssForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_69getConssForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_68getConssForBlock},
  {"getConssForBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_71getConssForBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_70getConssForBlocks},
  {"getNVarsForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_73getNVarsForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_72getNVarsForBlock},
  {"getVarsForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_75getVarsForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_74getVarsForBlock},
  {"setConsToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_77setConsToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_76setConsToMaster},
  {"setVarToBlockId", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_79setVarToBlockId, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_78setVarToBlockId},
  {"setVarToLinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_81setVarToLinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_80setVarToLinking},
  {"fixVarToLinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_83fixVarToLinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_82fixVarToLinking},
  {"setVarToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_85setVarToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_84setVarToMaster},
  {"fixVarToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_87fixVarToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_86fixVarToMaster},
  {"setVarToStairlinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_89setVarToStairlinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_88setVarToStairlinking},
  {"fixVarToStairlinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_91fixVarToStairlinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_90fixVarToStairlinking},
  {"isConsMastercons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_93isConsMastercons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_92isConsMastercons},
  {"isConsOpencons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_95isConsOpencons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_94isConsOpencons},
  {"isVarBlockvarOfBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_97isVarBlockvarOfBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_96isVarBlockvarOfBlock},
  {"isVarLinkingvar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_99isVarLinkingvar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_98isVarLinkingvar},
  {"isVarMastervar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_101isVarMastervar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_100isVarMastervar},
  {"isVarOpenvar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_103isVarOpenvar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_102isVarOpenvar},
  {"isVarStairlinkingvar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_105isVarStairlinkingvar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_104isVarStairlinkingvar},
  {"isVarStairlinkingvarOfBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_107isVarStairlinkingvarOfBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_106isVarStairlinkingvarOfBlock},
  {"deleteOpencons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_109deleteOpencons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_108deleteOpencons},
  {"deleteOpenvar", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_111deleteOpenvar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_110deleteOpenvar},
  {"setUsergiven", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_113setUsergiven, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_112setUsergiven},
  {"getUsergiven", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_115getUsergiven, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_114getUsergiven},
  {"addClockTime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_117addClockTime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_116addClockTime},
  {"addPctConssFromFree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_119addPctConssFromFree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_118addPctConssFromFree},
  {"addPctConssToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_121addPctConssToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_120addPctConssToBlock},
  {"addPctConssToBorder", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_123addPctConssToBorder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_122addPctConssToBorder},
  {"addPctVarsFromFree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_125addPctVarsFromFree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_124addPctVarsFromFree},
  {"addPctVarsToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_127addPctVarsToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_126addPctVarsToBlock},
  {"addPctVarsToBorder", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_129addPctVarsToBorder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_128addPctVarsToBorder},
  {"getPctVarsToBorder", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_131getPctVarsToBorder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_130getPctVarsToBorder},
  {"getPctVarsToBorderVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_133getPctVarsToBorderVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_132getPctVarsToBorderVector},
  {"getPctVarsToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_135getPctVarsToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_134getPctVarsToBlock},
  {"getPctVarsToBlockVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_137getPctVarsToBlockVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_136getPctVarsToBlockVector},
  {"getPctVarsFromFree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_139getPctVarsFromFree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_138getPctVarsFromFree},
  {"getPctVarsFromFreeVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_141getPctVarsFromFreeVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_140getPctVarsFromFreeVector},
  {"getPctConssToBorder", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_143getPctConssToBorder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_142getPctConssToBorder},
  {"getPctConssToBorderVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_145getPctConssToBorderVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_144getPctConssToBorderVector},
  {"getPctConssToBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_147getPctConssToBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_146getPctConssToBlock},
  {"getPctConssToBlockVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_149getPctConssToBlockVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_148getPctConssToBlockVector},
  {"getPctConssFromFree", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_151getPctConssFromFree, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_150getPctConssFromFree},
  {"getPctConssFromFreeVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_153getPctConssFromFreeVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_152getPctConssFromFreeVector},
  {"getScore", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_155getScore, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_154getScore},
  {"checkAllConssAssigned", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_157checkAllConssAssigned, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_156checkAllConssAssigned},
  {"checkConsistency", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_159checkConsistency, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_158checkConsistency},
  {"complete", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_161complete, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_160complete},
  {"sort", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_163sort, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_162sort},
  {"completeByConnected", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_165completeByConnected, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_164completeByConnected},
  {"completeByConnectedConssAdjacency", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_167completeByConnectedConssAdjacency, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_166completeByConnectedConssAdjacency},
  {"completeGreedily", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_169completeGreedily, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_168completeGreedily},
  {"prepare", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_171prepare, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_170prepare},
  {"getNDetectors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_173getNDetectors, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_172getNDetectors},
  {"getNEquivalenceClasses", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_175getNEquivalenceClasses, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_174getNEquivalenceClasses},
  {"getNCoeffsForMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_177getNCoeffsForMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_176getNCoeffsForMaster},
  {"setNBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_179setNBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_178setNBlocks},
  {"getNTotalStairlinkingvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_181getNTotalStairlinkingvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_180getNTotalStairlinkingvars},
  {"getNVarsForBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_183getNVarsForBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_182getNVarsForBlocks},
  {"findVarsLinkingToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_185findVarsLinkingToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_184findVarsLinkingToMaster},
  {"findVarsLinkingToStairlinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_187findVarsLinkingToStairlinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_186findVarsLinkingToStairlinking},
  {"getNCoeffsForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_189getNCoeffsForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_188getNCoeffsForBlock},
  {"addNNewBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_191addNNewBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_190addNNewBlocks},
  {"getNConssForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_193getNConssForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_192getNConssForBlock},
  {"removeMastercons", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_195removeMastercons, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_194removeMastercons},
  {"isAssignedToOrigProb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_197isAssignedToOrigProb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_196isAssignedToOrigProb},
  {"refineToBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_199refineToBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_198refineToBlocks},
  {"refineToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_201refineToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_200refineToMaster},
  {"alreadyAssignedConssToBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_203alreadyAssignedConssToBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_202alreadyAssignedConssToBlocks},
  {"assignCurrentStairlinking", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_205assignCurrentStairlinking, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_204assignCurrentStairlinking},
  {"aggInfoCalculated", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_207aggInfoCalculated, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_206aggInfoCalculated},
  {"considerImplicits", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_209considerImplicits, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_208considerImplicits},
  {"displayInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_211displayInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_210displayInfo},
  {"getAncestorList", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_213getAncestorList, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_212getAncestorList},
  {"assignSmallestComponentsButOneConssAdjacency", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_215assignSmallestComponentsButOneConssAdjacency, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_214assignSmallestComponentsButOneConssAdjacency},
  {"deleteEmptyBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_217deleteEmptyBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_216deleteEmptyBlocks},
  {"getTranslatedpartialdecid", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_219getTranslatedpartialdecid, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_218getTranslatedpartialdecid},
  {"setTranslatedpartialdecid", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_221setTranslatedpartialdecid, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_220setTranslatedpartialdecid},
  {"buildDecChainString", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_223buildDecChainString, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_222buildDecChainString},
  {"addDecChangesFromAncestor", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_225addDecChangesFromAncestor, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_224addDecChangesFromAncestor},
  {"addDetectorChainInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_227addDetectorChainInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_226addDetectorChainInfo},
  {"getAncestorID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_229getAncestorID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_228getAncestorID},
  {"copyPartitionStatistics", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_231copyPartitionStatistics, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_230copyPartitionStatistics},
  {"removeAncestorID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_233removeAncestorID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_232removeAncestorID},
  {"addAncestorID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_235addAncestorID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_234addAncestorID},
  {"getBlocksForEqClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_237getBlocksForEqClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_236getBlocksForEqClass},
  {"getNNewBlocksVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_239getNNewBlocksVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_238getNNewBlocksVector},
  {"getNAncestors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_241getNAncestors, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_240getNAncestors},
  {"getNNewBlocks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_243getNNewBlocks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_242getNNewBlocks},
  {"getFinishedByFinisher", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_245getFinishedByFinisher, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_244getFinishedByFinisher},
  {"getDetectorchainInfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_247getDetectorchainInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_246getDetectorchainInfo},
  {"shouldCompletedByConsToMaster", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_249shouldCompletedByConsToMaster, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_248shouldCompletedByConsToMaster},
  {"setFinishedByFinisher", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_251setFinishedByFinisher, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_250setFinishedByFinisher},
  {"calcAggregationInformation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_253calcAggregationInformation, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_252calcAggregationInformation},
  {"setDetectorPropagated", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_255setDetectorPropagated, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_254setDetectorPropagated},
  {"setDetectorFinished", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_257setDetectorFinished, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_256setDetectorFinished},
  {"setDetectorFinishedOrig", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_259setDetectorFinishedOrig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_258setDetectorFinishedOrig},
  {"setPctConssToBlockVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_261setPctConssToBlockVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_260setPctConssToBlockVector},
  {"setPctConssFromFreeVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_263setPctConssFromFreeVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_262setPctConssFromFreeVector},
  {"setPctConssToBorderVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_265setPctConssToBorderVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_264setPctConssToBorderVector},
  {"setPctVarsToBorderVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_267setPctVarsToBorderVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_266setPctVarsToBorderVector},
  {"setPctVarsToBlockVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_269setPctVarsToBlockVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_268setPctVarsToBlockVector},
  {"setPctVarsFromFreeVector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_271setPctVarsFromFreeVector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_270setPctVarsFromFreeVector},
  {"setDetectorClockTimes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_273setDetectorClockTimes, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_272setDetectorClockTimes},
  {"setFinishedByFinisherOrig", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_275setFinishedByFinisherOrig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_274setFinishedByFinisherOrig},
  {"setStemsFromOrig", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_277setStemsFromOrig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_276setStemsFromOrig},
  {"getDetectorClockTime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_279getDetectorClockTime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_278getDetectorClockTime},
  {"getEqClassForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_281getEqClassForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_280getEqClassForBlock},
  {"showVisualization", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_283showVisualization, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_282showVisualization},
  {"_repr_svg_", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_285_repr_svg_, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_284_repr_svg_},
  {"_repr_png_", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_287_repr_png_, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_286_repr_png_},
  {"setAncestorList", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_291setAncestorList, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_290setAncestorList},
  {"getDetectorClockTimes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_293getDetectorClockTimes, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_292getDetectorClockTimes},
  {"getRepVarmap", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_295getRepVarmap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_294getRepVarmap},
  {"getVarProbindexForBlock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_297getVarProbindexForBlock, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_296getVarProbindexForBlock},
  {"setConsPartitionStatistics", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_299setConsPartitionStatistics, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_298setConsPartitionStatistics},
  {"setVarPartitionStatistics", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_301setVarPartitionStatistics, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_300setVarPartitionStatistics},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_303__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_302__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_305__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PartialDecomposition_304__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_8pygcgopt_3gcg_PartialDecomposition[] = {
  {"isSelected", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_isSelected, __pyx_setprop_8pygcgopt_3gcg_20PartialDecomposition_isSelected, PyDoc_STR("gets whether the partialdec is currently selected in explore menue\n\n        :return: True iff the partialdec is currently selected in explore menue.\n        "), 0},
  {"max_white_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_max_white_score, 0, PyDoc_STR("gets the maximum white area score\n\n        \"maximum white score\" is fraction of the area of the decomposed matrix that is neither block or border\n        .. note:: -1 iff not calculated yet\n\n        :return: maximum  white area score\n        "), 0},
  {"classic_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_classic_score, 0, 0, 0},
  {"border_area_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_border_area_score, 0, 0, 0},
  {"max_for_white_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_max_for_white_score, 0, 0, 0},
  {"set_part_for_white_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_set_part_for_white_score, 0, 0, 0},
  {"max_for_white_agg_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_max_for_white_agg_score, 0, 0, 0},
  {"set_part_for_white_agg_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_set_part_for_white_agg_score, 0, 0, 0},
  {"benders_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_benders_score, 0, 0, 0},
  {"strong_decomp_score", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition_strong_decomp_score, 0, 0, 0},
  {"_visualizations", __pyx_getprop_8pygcgopt_3gcg_20PartialDecomposition__visualizations, __pyx_setprop_8pygcgopt_3gcg_20PartialDecomposition__visualizations, PyDoc_STR("_visualizations: dict"), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_PartialDecomposition_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_PartialDecomposition},
  {Py_tp_repr, (void *)__pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_289__repr__},
  {Py_tp_doc, (void *)PyDoc_STR("class to manage partial decompositions\n\n    each partialdec corresponds to one :class:`DetProbData` which contains the problem information,\n    there is one detprobdata for the original and the transformed problem.\n    ")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_PartialDecomposition},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_PartialDecomposition},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_PartialDecomposition},
  {Py_tp_getset, (void *)__pyx_getsets_8pygcgopt_3gcg_PartialDecomposition},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_PartialDecomposition},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_PartialDecomposition_spec = {
  "pygcgopt.gcg.PartialDecomposition",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_PartialDecomposition_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_PartialDecomposition = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""PartialDecomposition", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_PartialDecomposition, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  __pyx_pw_8pygcgopt_3gcg_20PartialDecomposition_289__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("class to manage partial decompositions\n\n    each partialdec corresponds to one :class:`DetProbData` which contains the problem information,\n    there is one detprobdata for the original and the transformed problem.\n    "), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_PartialDecomposition, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_PartialDecomposition, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_PartialDecomposition, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_8pygcgopt_3gcg_PartialDecomposition, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_PartialDecomposition, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_ConsClassifier(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)o);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_ConsClassifier(PyObject *o) {
  struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *p = (struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_ConsClassifier) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->model);
  Py_CLEAR(p->name);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_ConsClassifier(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *p = (struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->model) {
    e = (*v)(((PyObject *)p->model), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_ConsClassifier(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *p = (struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier *)o;
  tmp = ((PyObject*)p->model);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_14ConsClassifier_model(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5model_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_14ConsClassifier_model(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5model_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5model_5__del__(o);
  }
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_14ConsClassifier_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_4name_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_14ConsClassifier_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_4name_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_14ConsClassifier_4name_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_ConsClassifier[] = {
  {"freeConsClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_1freeConsClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14ConsClassifier_freeConsClassifier},
  {"classify", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_3classify, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14ConsClassifier_2classify},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14ConsClassifier_4__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14ConsClassifier_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14ConsClassifier_6__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_8pygcgopt_3gcg_ConsClassifier[] = {
  {"model", __pyx_getprop_8pygcgopt_3gcg_14ConsClassifier_model, __pyx_setprop_8pygcgopt_3gcg_14ConsClassifier_model, PyDoc_STR("model: pygcgopt.gcg.Model"), 0},
  {"name", __pyx_getprop_8pygcgopt_3gcg_14ConsClassifier_name, __pyx_setprop_8pygcgopt_3gcg_14ConsClassifier_name, PyDoc_STR("name: str"), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_ConsClassifier_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_ConsClassifier},
  {Py_tp_doc, (void *)PyDoc_STR("Base class of the Constraint Classifier Plugin")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_ConsClassifier},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_ConsClassifier},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_ConsClassifier},
  {Py_tp_getset, (void *)__pyx_getsets_8pygcgopt_3gcg_ConsClassifier},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_ConsClassifier},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_ConsClassifier_spec = {
  "pygcgopt.gcg.ConsClassifier",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_ConsClassifier_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_ConsClassifier = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""ConsClassifier", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_ConsClassifier), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_ConsClassifier, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("Base class of the Constraint Classifier Plugin"), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_ConsClassifier, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_ConsClassifier, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_ConsClassifier, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_8pygcgopt_3gcg_ConsClassifier, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_ConsClassifier, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_VarClassifier(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)o);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_VarClassifier(PyObject *o) {
  struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *p = (struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_VarClassifier) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->model);
  Py_CLEAR(p->name);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_VarClassifier(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *p = (struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->model) {
    e = (*v)(((PyObject *)p->model), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_VarClassifier(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *p = (struct __pyx_obj_8pygcgopt_3gcg_VarClassifier *)o;
  tmp = ((PyObject*)p->model);
  p->model = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_13VarClassifier_model(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_13VarClassifier_5model_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_13VarClassifier_model(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_13VarClassifier_5model_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_13VarClassifier_5model_5__del__(o);
  }
}

static PyObject *__pyx_getprop_8pygcgopt_3gcg_13VarClassifier_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_8pygcgopt_3gcg_13VarClassifier_4name_1__get__(o);
}

static int __pyx_setprop_8pygcgopt_3gcg_13VarClassifier_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_8pygcgopt_3gcg_13VarClassifier_4name_3__set__(o, v);
  }
  else {
    return __pyx_pw_8pygcgopt_3gcg_13VarClassifier_4name_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_VarClassifier[] = {
  {"freeVarClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13VarClassifier_1freeVarClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13VarClassifier_freeVarClassifier},
  {"classify", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13VarClassifier_3classify, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13VarClassifier_2classify},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13VarClassifier_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13VarClassifier_4__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_13VarClassifier_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_13VarClassifier_6__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_8pygcgopt_3gcg_VarClassifier[] = {
  {"model", __pyx_getprop_8pygcgopt_3gcg_13VarClassifier_model, __pyx_setprop_8pygcgopt_3gcg_13VarClassifier_model, PyDoc_STR("model: pygcgopt.gcg.Model"), 0},
  {"name", __pyx_getprop_8pygcgopt_3gcg_13VarClassifier_name, __pyx_setprop_8pygcgopt_3gcg_13VarClassifier_name, PyDoc_STR("name: str"), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_VarClassifier_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_VarClassifier},
  {Py_tp_doc, (void *)PyDoc_STR("Base class of the Variable Classifier Plugin")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_VarClassifier},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_VarClassifier},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_VarClassifier},
  {Py_tp_getset, (void *)__pyx_getsets_8pygcgopt_3gcg_VarClassifier},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_VarClassifier},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_VarClassifier_spec = {
  "pygcgopt.gcg.VarClassifier",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_VarClassifier_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_VarClassifier = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""VarClassifier", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_VarClassifier), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_VarClassifier, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("Base class of the Variable Classifier Plugin"), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_VarClassifier, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_VarClassifier, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_VarClassifier, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_8pygcgopt_3gcg_VarClassifier, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_VarClassifier, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS___reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_2__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS_spec = {
  "pygcgopt.gcg.PY_GCG_PRICINGSTATUS",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""PY_GCG_PRICINGSTATUS", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  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_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PY_USERGIVEN(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_PY_USERGIVEN(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_PY_USERGIVEN) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_PY_USERGIVEN[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_12PY_USERGIVEN_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_12PY_USERGIVEN___reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_12PY_USERGIVEN_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_12PY_USERGIVEN_2__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_PY_USERGIVEN_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_PY_USERGIVEN},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_PY_USERGIVEN},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_PY_USERGIVEN},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_PY_USERGIVEN_spec = {
  "pygcgopt.gcg.PY_USERGIVEN",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_8pygcgopt_3gcg_PY_USERGIVEN_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_PY_USERGIVEN = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""PY_USERGIVEN", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PY_USERGIVEN), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_PY_USERGIVEN, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  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_8pygcgopt_3gcg_PY_USERGIVEN, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_PY_USERGIVEN, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PY_VAR_DECOMPINFO(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_PY_VAR_DECOMPINFO(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_PY_VAR_DECOMPINFO) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_PY_VAR_DECOMPINFO[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO___reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_2__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_PY_VAR_DECOMPINFO},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_PY_VAR_DECOMPINFO},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_PY_VAR_DECOMPINFO},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO_spec = {
  "pygcgopt.gcg.PY_VAR_DECOMPINFO",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""PY_VAR_DECOMPINFO", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PY_VAR_DECOMPINFO), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  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_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_PY_CONS_DECOMPINFO(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_PY_CONS_DECOMPINFO(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_PY_CONS_DECOMPINFO) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_PY_CONS_DECOMPINFO[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO___reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_2__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_PY_CONS_DECOMPINFO},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_PY_CONS_DECOMPINFO},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_PY_CONS_DECOMPINFO},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO_spec = {
  "pygcgopt.gcg.PY_CONS_DECOMPINFO",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""PY_CONS_DECOMPINFO", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_PY_CONS_DECOMPINFO), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_PY_CONS_DECOMPINFO, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  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_8pygcgopt_3gcg_PY_CONS_DECOMPINFO, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_PY_CONS_DECOMPINFO, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_8pygcgopt_3gcg_Model __pyx_vtable_8pygcgopt_3gcg_Model;

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_Model(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_Model *p;
  PyObject *o = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_new, newfunc)(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_Model *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_9pyscipopt_4scip_Model*)__pyx_vtabptr_8pygcgopt_3gcg_Model;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_Model(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_Model) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  if (PyType_IS_GC(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) PyObject_GC_Track(o);
  #if !CYTHON_USE_MODULE_STATE
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_dealloc, destructor)(o); else
  #endif
  __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8pygcgopt_3gcg_Model);
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_Model(PyObject *o, visitproc v, void *a) {
  int e;
  #if !CYTHON_USE_MODULE_STATE
  e = 0;
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) {
    traverseproc traverse = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_traverse, traverseproc);
    if (traverse) { e = traverse(o, v, a); }
  } else
  #endif
  { e = __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8pygcgopt_3gcg_Model); }
  if (e) return e;
  {
    e = __Pyx_call_type_traverse(o, 0, v, a);
    if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_Model(PyObject *o) {
  #if !CYTHON_USE_MODULE_STATE
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) {
    inquiry clear = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_clear, inquiry);
    if (clear) clear(o);
  } else
  #endif
  { __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8pygcgopt_3gcg_Model); }
  return 0;
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_Model[] = {
  {"includeDefaultPlugins", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_3includeDefaultPlugins, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_2includeDefaultPlugins},
  {"addVar", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_5addVar, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_4addVar},
  {"presolve", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_7presolve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_6presolve},
  {"detect", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_9detect, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_8detect},
  {"printStatistics", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_11printStatistics, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_10printStatistics},
  {"printVersion", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_13printVersion, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_12printVersion},
  {"optimize", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_15optimize, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_14optimize},
  {"getDualbound", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_17getDualbound, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_16getDualbound},
  {"getDetprobdataOrig", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_19getDetprobdataOrig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_18getDetprobdataOrig},
  {"getDetprobdataPresolved", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_21getDetprobdataPresolved, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_20getDetprobdataPresolved},
  {"listDecompositions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_23listDecompositions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_22listDecompositions},
  {"getPartDecompFromID", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_25getPartDecompFromID, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_24getPartDecompFromID},
  {"addDecompositionFromConss", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_27addDecompositionFromConss, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_26addDecompositionFromConss},
  {"addPreexistingPartialDecomposition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_29addPreexistingPartialDecomposition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_28addPreexistingPartialDecomposition},
  {"addDecomposition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_31addDecomposition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_30addDecomposition},
  {"createDecomposition", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_33createDecomposition, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_32createDecomposition},
  {"includePricingSolver", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_35includePricingSolver, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_34includePricingSolver},
  {"listPricingSolvers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_37listPricingSolvers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_36listPricingSolvers},
  {"setPricingSolverEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_39setPricingSolverEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_38setPricingSolverEnabled},
  {"setPricingSolverExactEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_41setPricingSolverExactEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_40setPricingSolverExactEnabled},
  {"setPricingSolverHeuristicEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_43setPricingSolverHeuristicEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_42setPricingSolverHeuristicEnabled},
  {"includeConsClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_45includeConsClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_44includeConsClassifier},
  {"getNConsClassifiers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_47getNConsClassifiers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_46getNConsClassifiers},
  {"listConsClassifiers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_49listConsClassifiers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_48listConsClassifiers},
  {"includeVarClassifier", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_51includeVarClassifier, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_50includeVarClassifier},
  {"getNVarClassifiers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_53getNVarClassifiers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_52getNVarClassifiers},
  {"listVarClassifiers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_55listVarClassifiers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_54listVarClassifiers},
  {"setVarClassifierEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_57setVarClassifierEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_56setVarClassifierEnabled},
  {"includeDetector", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_59includeDetector, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_58includeDetector},
  {"includeScore", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_61includeScore, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_60includeScore},
  {"listDetectors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_63listDetectors, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_62listDetectors},
  {"listScores", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_65listScores, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_64listScores},
  {"setDetectorEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_67setDetectorEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_66setDetectorEnabled},
  {"setDetectorFinishingEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_69setDetectorFinishingEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_68setDetectorFinishingEnabled},
  {"setDetectorPostprocessingEnabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_71setDetectorPostprocessingEnabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_70setDetectorPostprocessingEnabled},
  {"getMasterProb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_73getMasterProb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_72getMasterProb},
  {"setGCGSeparating", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_75setGCGSeparating, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_74setGCGSeparating},
  {"writeAllDecomps", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_77writeAllDecomps, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_76writeAllDecomps},
  {"getMastervars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_79getMastervars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_78getMastervars},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_81__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_80__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_5Model_83__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_5Model_82__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_Model_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_Model},
  {Py_tp_doc, (void *)PyDoc_STR("Model(problemName='model', defaultPlugins=True, Model sourceModel=None, creategcg=True)\n\nMain class for interaction with the GCG solver.")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_Model},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_Model},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_Model},
  {Py_tp_init, (void *)__pyx_pw_8pygcgopt_3gcg_5Model_1__init__},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_Model},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_Model_spec = {
  "pygcgopt.gcg.Model",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_Model),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_Model_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_Model = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""Model", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_Model), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_Model, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("Model(problemName='model', defaultPlugins=True, Model sourceModel=None, creategcg=True)\n\nMain class for interaction with the GCG solver."), /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_Model, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_Model, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_Model, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  __pyx_pw_8pygcgopt_3gcg_5Model_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_Model, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGPricingModel __pyx_vtable_8pygcgopt_3gcg_GCGPricingModel;

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_GCGPricingModel(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *p;
  PyObject *o = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_new, newfunc)(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_9pyscipopt_4scip_Model*)__pyx_vtabptr_8pygcgopt_3gcg_GCGPricingModel;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_GCGPricingModel(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_GCGPricingModel) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  if (PyType_IS_GC(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) PyObject_GC_Track(o);
  #if !CYTHON_USE_MODULE_STATE
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_dealloc, destructor)(o); else
  #endif
  __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8pygcgopt_3gcg_GCGPricingModel);
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_GCGPricingModel(PyObject *o, visitproc v, void *a) {
  int e;
  #if !CYTHON_USE_MODULE_STATE
  e = 0;
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) {
    traverseproc traverse = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_traverse, traverseproc);
    if (traverse) { e = traverse(o, v, a); }
  } else
  #endif
  { e = __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8pygcgopt_3gcg_GCGPricingModel); }
  if (e) return e;
  {
    e = __Pyx_call_type_traverse(o, 0, v, a);
    if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_GCGPricingModel(PyObject *o) {
  #if !CYTHON_USE_MODULE_STATE
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) {
    inquiry clear = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_clear, inquiry);
    if (clear) clear(o);
  } else
  #endif
  { __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8pygcgopt_3gcg_GCGPricingModel); }
  return 0;
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_GCGPricingModel[] = {
  {"createGcgCol", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_1createGcgCol, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_createGcgCol},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_2__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_15GCGPricingModel_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_15GCGPricingModel_4__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_GCGPricingModel_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_GCGPricingModel},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_GCGPricingModel},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_GCGPricingModel},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_GCGPricingModel},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_GCGPricingModel},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_GCGPricingModel_spec = {
  "pygcgopt.gcg.GCGPricingModel",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_GCGPricingModel_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_GCGPricingModel = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""GCGPricingModel", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_GCGPricingModel, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_GCGPricingModel, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_GCGPricingModel, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_GCGPricingModel, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_GCGPricingModel, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_8pygcgopt_3gcg_GCGMasterModel __pyx_vtable_8pygcgopt_3gcg_GCGMasterModel;

static PyObject *__pyx_tp_new_8pygcgopt_3gcg_GCGMasterModel(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *p;
  PyObject *o = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_new, newfunc)(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_9pyscipopt_4scip_Model*)__pyx_vtabptr_8pygcgopt_3gcg_GCGMasterModel;
  return o;
}

static void __pyx_tp_dealloc_8pygcgopt_3gcg_GCGMasterModel(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pygcgopt_3gcg_GCGMasterModel) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  if (PyType_IS_GC(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) PyObject_GC_Track(o);
  #if !CYTHON_USE_MODULE_STATE
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_dealloc, destructor)(o); else
  #endif
  __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8pygcgopt_3gcg_GCGMasterModel);
}

static int __pyx_tp_traverse_8pygcgopt_3gcg_GCGMasterModel(PyObject *o, visitproc v, void *a) {
  int e;
  #if !CYTHON_USE_MODULE_STATE
  e = 0;
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) {
    traverseproc traverse = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_traverse, traverseproc);
    if (traverse) { e = traverse(o, v, a); }
  } else
  #endif
  { e = __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8pygcgopt_3gcg_GCGMasterModel); }
  if (e) return e;
  {
    e = __Pyx_call_type_traverse(o, 0, v, a);
    if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_8pygcgopt_3gcg_GCGMasterModel(PyObject *o) {
  #if !CYTHON_USE_MODULE_STATE
  if (likely(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model)) {
    inquiry clear = __Pyx_PyType_GetSlot(__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model, tp_clear, inquiry);
    if (clear) clear(o);
  } else
  #endif
  { __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8pygcgopt_3gcg_GCGMasterModel); }
  return 0;
}

static PyMethodDef __pyx_methods_8pygcgopt_3gcg_GCGMasterModel[] = {
  {"addCol", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_1addCol, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_addCol},
  {"getOrigvars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_3getOrigvars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_2getOrigvars},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_4__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pygcgopt_3gcg_14GCGMasterModel_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pygcgopt_3gcg_14GCGMasterModel_6__setstate_cython__},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_8pygcgopt_3gcg_GCGMasterModel_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pygcgopt_3gcg_GCGMasterModel},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pygcgopt_3gcg_GCGMasterModel},
  {Py_tp_clear, (void *)__pyx_tp_clear_8pygcgopt_3gcg_GCGMasterModel},
  {Py_tp_methods, (void *)__pyx_methods_8pygcgopt_3gcg_GCGMasterModel},
  {Py_tp_new, (void *)__pyx_tp_new_8pygcgopt_3gcg_GCGMasterModel},
  {0, 0},
};
static PyType_Spec __pyx_type_8pygcgopt_3gcg_GCGMasterModel_spec = {
  "pygcgopt.gcg.GCGMasterModel",
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_8pygcgopt_3gcg_GCGMasterModel_slots,
};
#else

static PyTypeObject __pyx_type_8pygcgopt_3gcg_GCGMasterModel = {
  PyVarObject_HEAD_INIT(0, 0)
  "pygcgopt.gcg.""GCGMasterModel", /*tp_name*/
  sizeof(struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_8pygcgopt_3gcg_GCGMasterModel, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_8pygcgopt_3gcg_GCGMasterModel, /*tp_traverse*/
  __pyx_tp_clear_8pygcgopt_3gcg_GCGMasterModel, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_8pygcgopt_3gcg_GCGMasterModel, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_8pygcgopt_3gcg_GCGMasterModel, /*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 CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};
/* #### Code section: initfunc_declarations ### */
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate); /*proto*/
/* #### Code section: init_module ### */

static int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
  /*--- Global init code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  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("__Pyx_modinit_type_init_code", 0);
  /*--- Type init code ---*/
  __pyx_vtabptr_8pygcgopt_3gcg_DetProbData = &__pyx_vtable_8pygcgopt_3gcg_DetProbData;
  __pyx_vtable_8pygcgopt_3gcg_DetProbData.create = (PyObject *(*)(gcg::DETPROBDATA *))__pyx_f_8pygcgopt_3gcg_11DetProbData_create;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_DetProbData_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData)) __PYX_ERR(9, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_DetProbData_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData) < (0)) __PYX_ERR(9, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData = &__pyx_type_8pygcgopt_3gcg_DetProbData;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData) < (0)) __PYX_ERR(9, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_vtabptr_8pygcgopt_3gcg_DetProbData) < (0)) __PYX_ERR(9, 1, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData) < (0)) __PYX_ERR(9, 1, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_DetProbData, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData) < (0)) __PYX_ERR(9, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_DetProbData) < (0)) __PYX_ERR(9, 1, __pyx_L1_error)
  __pyx_vtabptr_8pygcgopt_3gcg_ConsPart = &__pyx_vtable_8pygcgopt_3gcg_ConsPart;
  __pyx_vtable_8pygcgopt_3gcg_ConsPart.create = (PyObject *(*)(gcg::ConsPartition *, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *))__pyx_f_8pygcgopt_3gcg_8ConsPart_create;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_ConsPart_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart)) __PYX_ERR(7, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_ConsPart_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart = &__pyx_type_8pygcgopt_3gcg_ConsPart;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_vtabptr_8pygcgopt_3gcg_ConsPart) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_ConsPart, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsPart) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  __pyx_vtabptr_8pygcgopt_3gcg_VarPart = &__pyx_vtable_8pygcgopt_3gcg_VarPart;
  __pyx_vtable_8pygcgopt_3gcg_VarPart.create = (PyObject *(*)(gcg::VarPartition *, struct __pyx_obj_8pygcgopt_3gcg_DetProbData *))__pyx_f_8pygcgopt_3gcg_7VarPart_create;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_VarPart_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart)) __PYX_ERR(7, 200, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_VarPart_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart) < (0)) __PYX_ERR(7, 200, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart = &__pyx_type_8pygcgopt_3gcg_VarPart;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart) < (0)) __PYX_ERR(7, 200, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_vtabptr_8pygcgopt_3gcg_VarPart) < (0)) __PYX_ERR(7, 200, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart) < (0)) __PYX_ERR(7, 200, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_VarPart, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart) < (0)) __PYX_ERR(7, 200, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarPart) < (0)) __PYX_ERR(7, 200, __pyx_L1_error)
  __pyx_vtabptr_8pygcgopt_3gcg_GCGColumn = &__pyx_vtable_8pygcgopt_3gcg_GCGColumn;
  __pyx_vtable_8pygcgopt_3gcg_GCGColumn.create = (PyObject *(*)(GCG_COL *))__pyx_f_8pygcgopt_3gcg_9GCGColumn_create;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_GCGColumn_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn)) __PYX_ERR(0, 628, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_GCGColumn_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn) < (0)) __PYX_ERR(0, 628, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn = &__pyx_type_8pygcgopt_3gcg_GCGColumn;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn) < (0)) __PYX_ERR(0, 628, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn, __pyx_vtabptr_8pygcgopt_3gcg_GCGColumn) < (0)) __PYX_ERR(0, 628, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn) < (0)) __PYX_ERR(0, 628, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_GCGColumn, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn) < (0)) __PYX_ERR(0, 628, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGColumn) < (0)) __PYX_ERR(0, 628, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_Detector_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector)) __PYX_ERR(4, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_Detector_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector = &__pyx_type_8pygcgopt_3gcg_Detector;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Detector, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Detector) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_PricingSolver_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver)) __PYX_ERR(5, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_PricingSolver_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver = &__pyx_type_8pygcgopt_3gcg_PricingSolver;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_PricingSolver, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PricingSolver) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_Score_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score)) __PYX_ERR(6, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_Score_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score = &__pyx_type_8pygcgopt_3gcg_Score;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Score, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Score) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  __pyx_vtabptr_8pygcgopt_3gcg_PartialDecomposition = &__pyx_vtable_8pygcgopt_3gcg_PartialDecomposition;
  __pyx_vtable_8pygcgopt_3gcg_PartialDecomposition.create = (PyObject *(*)(gcg::PARTIALDECOMP *))__pyx_f_8pygcgopt_3gcg_20PartialDecomposition_create;
  __pyx_vtable_8pygcgopt_3gcg_PartialDecomposition._PartialDecomposition__generate_visualization = (PyObject *(*)(struct __pyx_obj_8pygcgopt_3gcg_PartialDecomposition *, struct __pyx_opt_args_8pygcgopt_3gcg_20PartialDecomposition___generate_visualization *__pyx_optional_args))__pyx_f_8pygcgopt_3gcg_20PartialDecomposition__PartialDecomposition__generate_visualization;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_PartialDecomposition_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition)) __PYX_ERR(8, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_PartialDecomposition_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition) < (0)) __PYX_ERR(8, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition = &__pyx_type_8pygcgopt_3gcg_PartialDecomposition;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition) < (0)) __PYX_ERR(8, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_vtabptr_8pygcgopt_3gcg_PartialDecomposition) < (0)) __PYX_ERR(8, 1, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition) < (0)) __PYX_ERR(8, 1, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_PartialDecomposition, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition) < (0)) __PYX_ERR(8, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition) < (0)) __PYX_ERR(8, 1, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_ConsClassifier_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier)) __PYX_ERR(1, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_ConsClassifier_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier) < (0)) __PYX_ERR(1, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier = &__pyx_type_8pygcgopt_3gcg_ConsClassifier;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier) < (0)) __PYX_ERR(1, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_ConsClassifier, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier) < (0)) __PYX_ERR(1, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier) < (0)) __PYX_ERR(1, 1, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_VarClassifier_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier)) __PYX_ERR(10, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_VarClassifier_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier) < (0)) __PYX_ERR(10, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier = &__pyx_type_8pygcgopt_3gcg_VarClassifier;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier) < (0)) __PYX_ERR(10, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_VarClassifier, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier) < (0)) __PYX_ERR(10, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_VarClassifier) < (0)) __PYX_ERR(10, 1, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS)) __PYX_ERR(0, 49, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS) < (0)) __PYX_ERR(0, 49, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS = &__pyx_type_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS) < (0)) __PYX_ERR(0, 49, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_PY_GCG_PRICINGSTATUS, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS) < (0)) __PYX_ERR(0, 49, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS) < (0)) __PYX_ERR(0, 49, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_PY_USERGIVEN_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN)) __PYX_ERR(0, 57, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_PY_USERGIVEN_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN) < (0)) __PYX_ERR(0, 57, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN = &__pyx_type_8pygcgopt_3gcg_PY_USERGIVEN;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN) < (0)) __PYX_ERR(0, 57, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_PY_USERGIVEN, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN) < (0)) __PYX_ERR(0, 57, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN) < (0)) __PYX_ERR(0, 57, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO)) __PYX_ERR(0, 63, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO) < (0)) __PYX_ERR(0, 63, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO = &__pyx_type_8pygcgopt_3gcg_PY_VAR_DECOMPINFO;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO) < (0)) __PYX_ERR(0, 63, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_PY_VAR_DECOMPINFO, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO) < (0)) __PYX_ERR(0, 63, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO) < (0)) __PYX_ERR(0, 63, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO)) __PYX_ERR(0, 69, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO) < (0)) __PYX_ERR(0, 69, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO = &__pyx_type_8pygcgopt_3gcg_PY_CONS_DECOMPINFO;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO) < (0)) __PYX_ERR(0, 69, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_PY_CONS_DECOMPINFO, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO) < (0)) __PYX_ERR(0, 69, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO) < (0)) __PYX_ERR(0, 69, __pyx_L1_error)
  __pyx_t_1 = PyImport_ImportModule("pyscipopt.scip"); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Model = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Model",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Model), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Model),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Model), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Model),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Model), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Model),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Model) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_Model = (struct __pyx_vtabstruct_9pyscipopt_4scip_Model*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Model); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_Model)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_vtabptr_8pygcgopt_3gcg_Model = &__pyx_vtable_8pygcgopt_3gcg_Model;
  __pyx_vtable_8pygcgopt_3gcg_Model.__pyx_base = *__pyx_vtabptr_9pyscipopt_4scip_Model;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_t_2 = PyTuple_Pack(1, (PyObject *)__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_Model_spec, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model)) __PYX_ERR(0, 74, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_Model_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model) < (0)) __PYX_ERR(0, 74, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model = &__pyx_type_8pygcgopt_3gcg_Model;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model->tp_base = __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model;
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model) < (0)) __PYX_ERR(0, 74, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 74, __pyx_L1_error)
    if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
      __pyx_wrapperbase_8pygcgopt_3gcg_5Model___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_8pygcgopt_3gcg_5Model___init__.doc = __pyx_doc_8pygcgopt_3gcg_5Model___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_8pygcgopt_3gcg_5Model___init__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_vtabptr_8pygcgopt_3gcg_Model) < (0)) __PYX_ERR(0, 74, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model) < (0)) __PYX_ERR(0, 74, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Model, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model) < (0)) __PYX_ERR(0, 74, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SLOTS
  if (__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model->tp_weaklistoffset == 0) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model->tp_weaklistoffset = offsetof(struct __pyx_obj_8pygcgopt_3gcg_Model, __pyx_base.__weakref__);
  #endif
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_Model) < (0)) __PYX_ERR(0, 74, __pyx_L1_error)
  __pyx_vtabptr_8pygcgopt_3gcg_GCGPricingModel = &__pyx_vtable_8pygcgopt_3gcg_GCGPricingModel;
  __pyx_vtable_8pygcgopt_3gcg_GCGPricingModel.__pyx_base = *__pyx_vtabptr_9pyscipopt_4scip_Model;
  __pyx_vtable_8pygcgopt_3gcg_GCGPricingModel.__pyx_base.create = (PyObject *(*)(SCIP *))__pyx_f_8pygcgopt_3gcg_15GCGPricingModel_create;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_t_2 = PyTuple_Pack(1, (PyObject *)__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_GCGPricingModel_spec, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel)) __PYX_ERR(0, 560, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_GCGPricingModel_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel) < (0)) __PYX_ERR(0, 560, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel = &__pyx_type_8pygcgopt_3gcg_GCGPricingModel;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel->tp_base = __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model;
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel) < (0)) __PYX_ERR(0, 560, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel, __pyx_vtabptr_8pygcgopt_3gcg_GCGPricingModel) < (0)) __PYX_ERR(0, 560, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel) < (0)) __PYX_ERR(0, 560, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_GCGPricingModel, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel) < (0)) __PYX_ERR(0, 560, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SLOTS
  if (__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel->tp_weaklistoffset == 0) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel->tp_weaklistoffset = offsetof(struct __pyx_obj_8pygcgopt_3gcg_GCGPricingModel, __pyx_base.__weakref__);
  #endif
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel) < (0)) __PYX_ERR(0, 560, __pyx_L1_error)
  __pyx_vtabptr_8pygcgopt_3gcg_GCGMasterModel = &__pyx_vtable_8pygcgopt_3gcg_GCGMasterModel;
  __pyx_vtable_8pygcgopt_3gcg_GCGMasterModel.__pyx_base = *__pyx_vtabptr_9pyscipopt_4scip_Model;
  __pyx_vtable_8pygcgopt_3gcg_GCGMasterModel.__pyx_base.create = (PyObject *(*)(SCIP *))__pyx_f_8pygcgopt_3gcg_14GCGMasterModel_create;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_t_2 = PyTuple_Pack(1, (PyObject *)__pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8pygcgopt_3gcg_GCGMasterModel_spec, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel)) __PYX_ERR(0, 601, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8pygcgopt_3gcg_GCGMasterModel_spec, __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel) < (0)) __PYX_ERR(0, 601, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel = &__pyx_type_8pygcgopt_3gcg_GCGMasterModel;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  __pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel->tp_base = __pyx_mstate_global->__pyx_ptype_9pyscipopt_4scip_Model;
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel) < (0)) __PYX_ERR(0, 601, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel->tp_dictoffset && __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel, __pyx_vtabptr_8pygcgopt_3gcg_GCGMasterModel) < (0)) __PYX_ERR(0, 601, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel) < (0)) __PYX_ERR(0, 601, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_GCGMasterModel, (PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel) < (0)) __PYX_ERR(0, 601, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SLOTS
  if (__pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel->tp_weaklistoffset == 0) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel->tp_weaklistoffset = offsetof(struct __pyx_obj_8pygcgopt_3gcg_GCGMasterModel, __pyx_base.__weakref__);
  #endif
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel) < (0)) __PYX_ERR(0, 601, __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_XDECREF(__pyx_t_2);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  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("pyscipopt.scip"); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 2110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Expr = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Expr",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Expr), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Expr),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Expr), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Expr),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Expr), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Expr),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Expr) __PYX_ERR(11, 2110, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Event = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Event",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Event), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Event),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Event), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Event),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Event), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Event),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Event) __PYX_ERR(11, 2113, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_Event = (struct __pyx_vtabstruct_9pyscipopt_4scip_Event*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Event); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_Event)) __PYX_ERR(11, 2113, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Column = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Column",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Column), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Column),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Column), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Column),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Column), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Column),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Column) __PYX_ERR(11, 2120, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_Column = (struct __pyx_vtabstruct_9pyscipopt_4scip_Column*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Column); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_Column)) __PYX_ERR(11, 2120, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_ColumnExact = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "ColumnExact",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_ColumnExact), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_ColumnExact),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_ColumnExact), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_ColumnExact),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_ColumnExact), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_ColumnExact),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_ColumnExact) __PYX_ERR(11, 2128, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_ColumnExact = (struct __pyx_vtabstruct_9pyscipopt_4scip_ColumnExact*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_ColumnExact); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_ColumnExact)) __PYX_ERR(11, 2128, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Row = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Row",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Row), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Row),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Row), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Row),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Row), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Row),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Row) __PYX_ERR(11, 2136, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_Row = (struct __pyx_vtabstruct_9pyscipopt_4scip_Row*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Row); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_Row)) __PYX_ERR(11, 2136, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_RowExact = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "RowExact",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_RowExact), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_RowExact),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_RowExact), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_RowExact),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_RowExact), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_RowExact),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_RowExact) __PYX_ERR(11, 2144, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_RowExact = (struct __pyx_vtabstruct_9pyscipopt_4scip_RowExact*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_RowExact); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_RowExact)) __PYX_ERR(11, 2144, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_NLRow = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "NLRow",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_NLRow), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_NLRow),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_NLRow), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_NLRow),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_NLRow), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_NLRow),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_NLRow) __PYX_ERR(11, 2152, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_NLRow = (struct __pyx_vtabstruct_9pyscipopt_4scip_NLRow*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_NLRow); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_NLRow)) __PYX_ERR(11, 2152, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Solution = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Solution",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Solution), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Solution),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Solution), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Solution),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Solution), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Solution),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Solution) __PYX_ERR(11, 2160, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_Solution = (struct __pyx_vtabstruct_9pyscipopt_4scip_Solution*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Solution); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_Solution)) __PYX_ERR(11, 2160, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_DomainChanges = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "DomainChanges",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_DomainChanges), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_DomainChanges),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_DomainChanges), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_DomainChanges),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_DomainChanges), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_DomainChanges),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_DomainChanges) __PYX_ERR(11, 2169, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_DomainChanges = (struct __pyx_vtabstruct_9pyscipopt_4scip_DomainChanges*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_DomainChanges); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_DomainChanges)) __PYX_ERR(11, 2169, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_BoundChange = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "BoundChange",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_BoundChange), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_BoundChange),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_BoundChange), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_BoundChange),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_BoundChange), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_BoundChange),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_BoundChange) __PYX_ERR(11, 2175, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_BoundChange = (struct __pyx_vtabstruct_9pyscipopt_4scip_BoundChange*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_BoundChange); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_BoundChange)) __PYX_ERR(11, 2175, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Node = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Node",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Node), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Node),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Node), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Node),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Node), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Node),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Node) __PYX_ERR(11, 2181, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_Node = (struct __pyx_vtabstruct_9pyscipopt_4scip_Node*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Node); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_Node)) __PYX_ERR(11, 2181, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Variable = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Variable",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Variable), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Variable),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Variable), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Variable),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Variable), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Variable),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Variable) __PYX_ERR(11, 2189, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_Variable = (struct __pyx_vtabstruct_9pyscipopt_4scip_Variable*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Variable); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_Variable)) __PYX_ERR(11, 2189, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Constraint = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "Constraint",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Constraint), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Constraint),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Constraint), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Constraint),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_Constraint), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_Constraint),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Constraint) __PYX_ERR(11, 2197, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_Constraint = (struct __pyx_vtabstruct_9pyscipopt_4scip_Constraint*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_Constraint); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_Constraint)) __PYX_ERR(11, 2197, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_9pyscipopt_4scip_IIS = __Pyx_ImportType_3_2_2(__pyx_t_1, "pyscipopt.scip", "IIS",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(struct __pyx_obj_9pyscipopt_4scip_IIS), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_IIS),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(struct __pyx_obj_9pyscipopt_4scip_IIS), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_IIS),
  #else
  sizeof(struct __pyx_obj_9pyscipopt_4scip_IIS), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(struct __pyx_obj_9pyscipopt_4scip_IIS),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_IIS) __PYX_ERR(11, 2205, __pyx_L1_error)
  __pyx_vtabptr_9pyscipopt_4scip_IIS = (struct __pyx_vtabstruct_9pyscipopt_4scip_IIS*)__Pyx_GetVtable(__pyx_mstate->__pyx_ptype_9pyscipopt_4scip_IIS); if (unlikely(!__pyx_vtabptr_9pyscipopt_4scip_IIS)) __PYX_ERR(11, 2205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_2_2(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(PyTypeObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  0, 0,
  #else
  sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(PyHeapTypeObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_7cpython_4type_type) __PYX_ERR(12, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType_3_2_2(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyLongObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(PyLongObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  0, 0,
  #else
  sizeof(PyLongObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(PyLongObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(13, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType_3_2_2(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyComplexObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(PyComplexObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  0, 0,
  #else
  sizeof(PyComplexObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_2(PyComplexObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_2); if (!__pyx_mstate->__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(14, 16, __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(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
  /*--- Variable import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
  /*--- Function import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

#if CYTHON_PEP489_MULTI_PHASE_INIT
static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
static int __pyx_pymod_exec_gcg(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec_gcg},
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  {Py_mod_gil, Py_MOD_GIL_USED},
  #endif
  #if PY_VERSION_HEX >= 0x030C0000 && CYTHON_USE_MODULE_STATE
  {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
  #endif
  {0, NULL}
};
#endif

#ifdef __cplusplus
namespace {
  struct PyModuleDef __pyx_moduledef =
  #else
  static struct PyModuleDef __pyx_moduledef =
  #endif
  {
      PyModuleDef_HEAD_INIT,
      "gcg",
      0, /* m_doc */
    #if CYTHON_USE_MODULE_STATE
      sizeof(__pyx_mstatetype), /* m_size */
    #else
      (CYTHON_PEP489_MULTI_PHASE_INIT) ? 0 : -1, /* m_size */
    #endif
      __pyx_methods /* m_methods */,
    #if CYTHON_PEP489_MULTI_PHASE_INIT
      __pyx_moduledef_slots, /* m_slots */
    #else
      NULL, /* m_reload */
    #endif
    #if CYTHON_USE_MODULE_STATE
      __pyx_m_traverse, /* m_traverse */
      __pyx_m_clear, /* m_clear */
      NULL /* m_free */
    #else
      NULL, /* m_traverse */
      NULL, /* m_clear */
      NULL /* m_free */
    #endif
  };
  #ifdef __cplusplus
} /* anonymous namespace */
#endif

/* PyModInitFuncType */
#ifndef CYTHON_NO_PYINIT_EXPORT
  #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
#else
  #ifdef __cplusplus
  #define __Pyx_PyMODINIT_FUNC extern "C" PyObject *
  #else
  #define __Pyx_PyMODINIT_FUNC PyObject *
  #endif
#endif

__Pyx_PyMODINIT_FUNC PyInit_gcg(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit_gcg(void)
#if CYTHON_PEP489_MULTI_PHASE_INIT
{
  return PyModuleDef_Init(&__pyx_moduledef);
}
/* ModuleCreationPEP489 */
#if CYTHON_COMPILING_IN_LIMITED_API && (__PYX_LIMITED_VERSION_HEX < 0x03090000\
      || ((defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)) && __PYX_LIMITED_VERSION_HEX < 0x030A0000))
static PY_INT64_T __Pyx_GetCurrentInterpreterId(void) {
    {
        PyObject *module = PyImport_ImportModule("_interpreters"); // 3.13+ I think
        if (!module) {
            PyErr_Clear(); // just try the 3.8-3.12 version
            module = PyImport_ImportModule("_xxsubinterpreters");
            if (!module) goto bad;
        }
        PyObject *current = PyObject_CallMethod(module, "get_current", NULL);
        Py_DECREF(module);
        if (!current) goto bad;
        if (PyTuple_Check(current)) {
            PyObject *new_current = PySequence_GetItem(current, 0);
            Py_DECREF(current);
            current = new_current;
            if (!new_current) goto bad;
        }
        long long as_c_int = PyLong_AsLongLong(current);
        Py_DECREF(current);
        return as_c_int;
    }
  bad:
    PySys_WriteStderr("__Pyx_GetCurrentInterpreterId failed. Try setting the C define CYTHON_PEP489_MULTI_PHASE_INIT=0\n");
    return -1;
}
#endif
#if !CYTHON_USE_MODULE_STATE
static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
    static PY_INT64_T main_interpreter_id = -1;
#if CYTHON_COMPILING_IN_GRAAL && defined(GRAALPY_VERSION_NUM) && GRAALPY_VERSION_NUM > 0x19000000
    PY_INT64_T current_id = GraalPyInterpreterState_GetIDFromThreadState(PyThreadState_Get());
#elif CYTHON_COMPILING_IN_GRAAL
    PY_INT64_T current_id = PyInterpreterState_GetIDFromThreadState(PyThreadState_Get());
#elif CYTHON_COMPILING_IN_LIMITED_API && (__PYX_LIMITED_VERSION_HEX < 0x03090000\
      || ((defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)) && __PYX_LIMITED_VERSION_HEX < 0x030A0000))
    PY_INT64_T current_id = __Pyx_GetCurrentInterpreterId();
#elif CYTHON_COMPILING_IN_LIMITED_API
    PY_INT64_T current_id = PyInterpreterState_GetID(PyInterpreterState_Get());
#else
    PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
#endif
    if (unlikely(current_id == -1)) {
        return -1;
    }
    if (main_interpreter_id == -1) {
        main_interpreter_id = current_id;
        return 0;
    } else if (unlikely(main_interpreter_id != current_id)) {
        PyErr_SetString(
            PyExc_ImportError,
            "Interpreter change detected - this module can only be loaded into one interpreter per process.");
        return -1;
    }
    return 0;
}
#endif
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, PyModuleDef *def) {
    PyObject *module = NULL, *moddict, *modname;
    CYTHON_UNUSED_VAR(def);
    #if !CYTHON_USE_MODULE_STATE
    if (__Pyx_check_single_interpreter())
        return NULL;
    #endif
    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_gcg(PyObject *__pyx_pyinit_module)
#endif
{
  int stringtab_initialized = 0;
  #if CYTHON_USE_MODULE_STATE
  int pystate_addmodule_run = 0;
  #endif
  __pyx_mstatetype *__pyx_mstate = NULL;
  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_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 'gcg' has already been imported. Re-initialisation is not supported.");
    return -1;
  }
  #else
  if (__pyx_m) return __Pyx_NewRef(__pyx_m);
  #endif
  /*--- Module creation code ---*/
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  __pyx_t_1 = __pyx_pyinit_module;
  Py_INCREF(__pyx_t_1);
  #else
  __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #if CYTHON_USE_MODULE_STATE
  {
    int add_module_result = __Pyx_State_AddModule(__pyx_t_1, &__pyx_moduledef);
    __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "gcg" pseudovariable */
    if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
    pystate_addmodule_run = 1;
  }
  #else
  __pyx_m = __pyx_t_1;
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  PyUnstable_Module_SetGIL(__pyx_m, Py_MOD_GIL_USED);
  #endif
  __pyx_mstate = __pyx_mstate_global;
  CYTHON_UNUSED_VAR(__pyx_t_1);
  __pyx_mstate->__pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_mstate->__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_mstate->__pyx_d);
  __pyx_mstate->__pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_mstate->__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_cython_runtime = __Pyx_PyImport_AddModuleRef("cython_runtime"); if (unlikely(!__pyx_mstate->__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_mstate->__pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /* ImportRefnannyAPI */
  #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("PyInit_gcg", 0);
  __Pyx_init_runtime_version();
  if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_mstate->__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_mstate->__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_mstate->__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Library function declarations ---*/
  /*--- Initialize various global constants etc. ---*/
  if (__Pyx_InitConstants(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  stringtab_initialized = 1;
  if (__Pyx_InitGlobals() < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__pyx_module_is_main_pygcgopt__gcg) {
    if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_name_2, __pyx_mstate_global->__pyx_n_u_main) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  }
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
    if (!PyDict_GetItemString(modules, "pygcgopt.gcg")) {
      if (unlikely((PyDict_SetItemString(modules, "pygcgopt.gcg", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
    }
  }
  /*--- Builtin init code ---*/
  if (__Pyx_InitCachedBuiltins(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Constants init code ---*/
  if (__Pyx_InitCachedConstants(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_CreateCodeObjects(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Global type/function init code ---*/
  (void)__Pyx_modinit_global_init_code(__pyx_mstate);
  (void)__Pyx_modinit_variable_export_code(__pyx_mstate);
  (void)__Pyx_modinit_function_export_code(__pyx_mstate);
  if (unlikely((__Pyx_modinit_type_init_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_type_import_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  (void)__Pyx_modinit_variable_import_code(__pyx_mstate);
  (void)__Pyx_modinit_function_import_code(__pyx_mstate);
  /*--- Execution code ---*/

  /* "pygcgopt/gcg.pyx":3
 * # distutils: language = c++
 * 
 * from pyscipopt.scip import PY_SCIP_CALL             # <<<<<<<<<<<<<<
 * from pyscipopt.scip cimport Model as SCIPModel
 * from pyscipopt.scip cimport Variable, Constraint, Solution, SCIP_RESULT, SCIP_DIDNOTRUN, SCIPgetStage, SCIP_STAGE, SCIP_STAGE_PRESOLVED, SCIPvarSetData, SCIPgetBestSol
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyscipopt_scip, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_PY_SCIP_CALL};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 3, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":13
 * from libcpp cimport bool
 * 
 * from typing import List             # <<<<<<<<<<<<<<
 * 
 * from pygcgopt.util import str_conversion
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_List};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_typing, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_List};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 13, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":15
 * from typing import List
 * 
 * from pygcgopt.util import str_conversion             # <<<<<<<<<<<<<<
 * 
 * from pathlib import Path
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_str_conversion};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pygcgopt_util, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_str_conversion};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":17
 * from pygcgopt.util import str_conversion
 * 
 * from pathlib import Path             # <<<<<<<<<<<<<<
 * import tempfile
 * import weakref
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Path};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pathlib, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Path};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 17, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 17, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":18
 * 
 * from pathlib import Path
 * import tempfile             # <<<<<<<<<<<<<<
 * import weakref
 * from copy import copy
*/
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_tempfile, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_tempfile, __pyx_t_2) < (0)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":19
 * from pathlib import Path
 * import tempfile
 * import weakref             # <<<<<<<<<<<<<<
 * from copy import copy
 * 
*/
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_weakref, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_weakref, __pyx_t_2) < (0)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":20
 * import tempfile
 * import weakref
 * from copy import copy             # <<<<<<<<<<<<<<
 * 
 * from collections.abc import Iterable
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_copy};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_copy, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_copy};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 20, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 20, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":22
 * from copy import copy
 * 
 * from collections.abc import Iterable             # <<<<<<<<<<<<<<
 * 
 * include "detector.pxi"
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Iterable};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_collections_abc, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Iterable};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 22, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 22, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":6
 *     cdef public str detectorname
 * 
 *     def freeDetector(self):             # <<<<<<<<<<<<<<
 *         '''calls destructor and frees memory of detector'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_1freeDetector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_freeDetector, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_freeDetector, __pyx_t_2) < (0)) __PYX_ERR(4, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":10
 *         pass
 * 
 *     def initDetector(self):             # <<<<<<<<<<<<<<
 *         '''initializes detector'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_3initDetector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_initDetector, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_initDetector, __pyx_t_2) < (0)) __PYX_ERR(4, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":14
 *         pass
 * 
 *     def exitDetector(self):             # <<<<<<<<<<<<<<
 *         '''calls exit method of detector'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_5exitDetector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_exitDetector, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_exitDetector, __pyx_t_2) < (0)) __PYX_ERR(4, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":18
 *         pass
 * 
 *     def propagatePartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''refines a partial decomposition inside detection loop'''
 *         return {}
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_7propagatePartialdec, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_propagatePartialdec, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_propagatePartialdec, __pyx_t_2) < (0)) __PYX_ERR(4, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":22
 *         return {}
 * 
 *     def finishPartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''completes a partial decomposition when called in detection loop'''
 *         return {}
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_9finishPartialdec, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_finishPartialdec, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_finishPartialdec, __pyx_t_2) < (0)) __PYX_ERR(4, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":26
 *         return {}
 * 
 *     def postprocessPartialdec(self, detprobdata, workonpartialdec):             # <<<<<<<<<<<<<<
 *         '''postprocess a complete decomposition, called after detection loop'''
 *         return {}
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_11postprocessPartialdec, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_postprocessPartialdec, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_postprocessPartialdec, __pyx_t_2) < (0)) __PYX_ERR(4, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":30
 *         return {}
 * 
 *     def setParamAggressive(self):             # <<<<<<<<<<<<<<
 *         '''called if the detection emphasis setting aggressive is chosen'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_13setParamAggressive, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_setParamAggressive, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_setParamAggressive, __pyx_t_2) < (0)) __PYX_ERR(4, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":34
 *         pass
 * 
 *     def setParamDefault(self):             # <<<<<<<<<<<<<<
 *         '''called if the detection emphasis setting default is chosen'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_15setParamDefault, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_setParamDefault, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_setParamDefault, __pyx_t_2) < (0)) __PYX_ERR(4, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detector.pxi":38
 *         pass
 * 
 *     def setParamFast(self):             # <<<<<<<<<<<<<<
 *         '''called if the detection emphasis setting fast is chosen'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_17setParamFast, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector_setParamFast, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_setParamFast, __pyx_t_2) < (0)) __PYX_ERR(4, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_19__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Detector__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8Detector_21__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Detector___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[10])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Detector, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":7
 *     cdef public str solvername
 * 
 *     def freeSolver(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_1freeSolver, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver_freeSolver, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[11])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_freeSolver, __pyx_t_2) < (0)) __PYX_ERR(5, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":10
 *         pass
 * 
 *     def initSolver(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_3initSolver, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver_initSolver, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[12])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_initSolver, __pyx_t_2) < (0)) __PYX_ERR(5, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":13
 *         pass
 * 
 *     def exitSolver(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_5exitSolver, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver_exitSolver, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[13])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_exitSolver, __pyx_t_2) < (0)) __PYX_ERR(5, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":16
 *         pass
 * 
 *     def initSolution(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_7initSolution, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver_initSolution, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[14])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_initSolution, __pyx_t_2) < (0)) __PYX_ERR(5, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":19
 *         pass
 * 
 *     def exitSolution(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_9exitSolution, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver_exitSolution, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[15])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_exitSolution, __pyx_t_2) < (0)) __PYX_ERR(5, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":22
 *         pass
 * 
 *     def updateSolver(self, pricingprob, probnr, varobjschanged, varbndschanged, consschanged):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_11updateSolver, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver_updateSolver, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[16])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_updateSolver, __pyx_t_2) < (0)) __PYX_ERR(5, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":25
 *         pass
 * 
 *     def solve(self, pricingprob, probnr, dualsolconv):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_13solve, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver_solve, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[17])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_solve, __pyx_t_2) < (0)) __PYX_ERR(5, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/pricing_solver.pxi":28
 *         return {}
 * 
 *     def solveHeuristic(self, pricingprob, probnr, dualsolconv):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_15solveHeuristic, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver_solveHeuristic, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[18])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_solveHeuristic, __pyx_t_2) < (0)) __PYX_ERR(5, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_17__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[19])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PricingSolver, (type(self), 0x9896ff5, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PricingSolver__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13PricingSolver_19__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PricingSolver___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[20])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PricingSolver, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/score.pxi":7
 *     cdef public str scorename
 * 
 *     def scorefree(self):             # <<<<<<<<<<<<<<
 *         '''calls destructor and frees memory of score'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Score_1scorefree, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Score_scorefree, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[21])); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Score, __pyx_mstate_global->__pyx_n_u_scorefree, __pyx_t_2) < (0)) __PYX_ERR(6, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/score.pxi":11
 *         pass
 * 
 *     def scorecalculate(self, partialdec):             # <<<<<<<<<<<<<<
 *         '''calls calculate method of score'''
 *         return {}
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Score_3scorecalculate, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Score_scorecalculate, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[22])); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Score, __pyx_mstate_global->__pyx_n_u_scorecalculate, __pyx_t_2) < (0)) __PYX_ERR(6, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Score_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Score___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[23])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Score, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Score__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Score_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Score___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[24])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Score, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":13
 *         return new_ConsPart
 * 
 *     def getClassDescription(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the description of the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_1getClassDescription, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getClassDescription, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[25])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getClassDescription, __pyx_t_2) < (0)) __PYX_ERR(7, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":23
 *         return self.consPartition.getClassDescription(classindex).decode('utf-8')
 * 
 *     def getClassName(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the name of the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_3getClassName, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getClassName, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[26])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getClassName, __pyx_t_2) < (0)) __PYX_ERR(7, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":33
 *         return self.consPartition.getClassName(classindex).decode('utf-8')
 * 
 *     def getName(self):             # <<<<<<<<<<<<<<
 *         """returns the name of the constraint partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_5getName, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getName, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[27])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getName, __pyx_t_2) < (0)) __PYX_ERR(7, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":41
 *         return self.consPartition.getName().decode('utf-8')
 * 
 *     def getNClasses(self):             # <<<<<<<<<<<<<<
 *         """returns the number of classes of the constraint partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_7getNClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getNClasses, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[28])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getNClasses, __pyx_t_2) < (0)) __PYX_ERR(7, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":49
 *         return self.consPartition.getNClasses()
 * 
 *     def removeEmptyClasses(self):             # <<<<<<<<<<<<<<
 *         """removes all classes which do not have any assigned indices (classindices may change)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_9removeEmptyClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_removeEmptyClasses, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[29])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_removeEmptyClasses, __pyx_t_2) < (0)) __PYX_ERR(7, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":57
 *         return self.consPartition.removeEmptyClasses()
 * 
 *     def setClassDescription(self, classindex, desc):             # <<<<<<<<<<<<<<
 *         """sets the description of the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_11setClassDescription, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_setClassDescription, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[30])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_setClassDescription, __pyx_t_2) < (0)) __PYX_ERR(7, 57, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":68
 *         self.consPartition.setClassDescription(classindex, c_desc)
 * 
 *     def setClassName(self, classindex, name):             # <<<<<<<<<<<<<<
 *         """sets the name of the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_13setClassName, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_setClassName, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[31])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_setClassName, __pyx_t_2) < (0)) __PYX_ERR(7, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":79
 *         self.consPartition.setClassName(classindex, name)
 * 
 *     def addClass(self, name, desc, decompInfo):             # <<<<<<<<<<<<<<
 *         """adds a new class to the constraint partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_15addClass, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_addClass, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[32])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_addClass, __pyx_t_2) < (0)) __PYX_ERR(7, 79, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":95
 *         return self.consPartition.addClass(c_name, c_desc, decompInfo)
 * 
 *     def assignConsToClass(self, Constraint cons, classindex):             # <<<<<<<<<<<<<<
 *         """assigns a constraint to the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_17assignConsToClass, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_assignConsToClass, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[33])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_assignConsToClass, __pyx_t_2) < (0)) __PYX_ERR(7, 95, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":106
 *         self.consPartition.assignConsToClass(cpp_consindex, classindex)
 * 
 *     def getAllSubsets(self, both, only_master, only_pricing):             # <<<<<<<<<<<<<<
 *         """returns a list containing all possible subsets of the chosen classindices
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_19getAllSubsets, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getAllSubsets, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[34])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getAllSubsets, __pyx_t_2) < (0)) __PYX_ERR(7, 106, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":120
 *         return self.consPartition.getAllSubsets(both, only_master, only_pricing)
 * 
 *     def getClassDecompInfo(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the decomposition information of a class
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_21getClassDecompInfo, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getClassDecompInfo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[35])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getClassDecompInfo, __pyx_t_2) < (0)) __PYX_ERR(7, 120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":130
 *         return self.consPartition.getClassDecompInfo(classindex)
 * 
 *     def getClassNameOfCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the name of the class a constraint is assigned to
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_23getClassNameOfCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getClassNameOfCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[36])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getClassNameOfCons, __pyx_t_2) < (0)) __PYX_ERR(7, 130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":141
 *         return self.consPartition.getClassNameOfCons(cpp_consindex).decode('utf-8')
 * 
 *     def getClassOfCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the index of the class a constraint is assigned to
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_25getClassOfCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getClassOfCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[37])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getClassOfCons, __pyx_t_2) < (0)) __PYX_ERR(7, 141, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":152
 *         return self.consPartition.getClassOfCons(cpp_consindex)
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints of the constraint partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_27getNConss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getNConss, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[38])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getNConss, __pyx_t_2) < (0)) __PYX_ERR(7, 152, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":160
 *         return self.consPartition.getNConss()
 * 
 *     def getNConssOfClasses(self):             # <<<<<<<<<<<<<<
 *         """returns list with the numbers of constraints that are assigned to the classes
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_29getNConssOfClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_getNConssOfClasses, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[39])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_getNConssOfClasses, __pyx_t_2) < (0)) __PYX_ERR(7, 160, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":168
 *         return self.consPartition.getNConssOfClasses()
 * 
 *     def isConsClassified(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns whether a constraint is already assigned to a class
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_31isConsClassified, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_isConsClassified, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_isConsClassified, __pyx_t_2) < (0)) __PYX_ERR(7, 168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":179
 *         return self.consPartition.isConsClassified(cpp_consindex)
 * 
 *     def reduceClasses(self, maxNumberOfClasses):             # <<<<<<<<<<<<<<
 *         """returns constraint partition with reduced number of classes
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_33reduceClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_reduceClasses, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_reduceClasses, __pyx_t_2) < (0)) __PYX_ERR(7, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":190
 *         return ConsPart.create(result, self.detProbData)
 * 
 *     def setClassDecompInfo(self, classindex, decompInfo):             # <<<<<<<<<<<<<<
 *         """sets the decomposition information of a class
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_35setClassDecompInfo, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart_setClassDecompInfo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[42])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsPart, __pyx_mstate_global->__pyx_n_u_setClassDecompInfo, __pyx_t_2) < (0)) __PYX_ERR(7, 190, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.consPartition cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_37__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.consPartition cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.consPartition cannot be converted to a Python object for pickling"
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_8ConsPart_39__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsPart___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":212
 *         return new_VarPart
 * 
 *     def getClassDescription(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the description of the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_1getClassDescription, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getClassDescription, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[45])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getClassDescription, __pyx_t_2) < (0)) __PYX_ERR(7, 212, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":222
 *         return self.varPartition.getClassDescription(classindex).decode('utf-8')
 * 
 *     def getClassName(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the name of the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_3getClassName, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getClassName, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[46])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getClassName, __pyx_t_2) < (0)) __PYX_ERR(7, 222, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":232
 *         return self.varPartition.getClassName(classindex).decode('utf-8')
 * 
 *     def getName(self):             # <<<<<<<<<<<<<<
 *         """returns the name of the variable partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_5getName, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getName, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[47])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getName, __pyx_t_2) < (0)) __PYX_ERR(7, 232, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":240
 *         return self.varPartition.getName().decode('utf-8')
 * 
 *     def getNClasses(self):             # <<<<<<<<<<<<<<
 *         """returns the number of classes of the variable partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_7getNClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getNClasses, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[48])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 240, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getNClasses, __pyx_t_2) < (0)) __PYX_ERR(7, 240, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":248
 *         return self.varPartition.getNClasses()
 * 
 *     def removeEmptyClasses(self):             # <<<<<<<<<<<<<<
 *         """removes all classes which do not have any assigned indices (classindices may change)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_9removeEmptyClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_removeEmptyClasses, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[49])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_removeEmptyClasses, __pyx_t_2) < (0)) __PYX_ERR(7, 248, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":256
 *         return self.varPartition.removeEmptyClasses()
 * 
 *     def setClassDescription(self, classindex, desc):             # <<<<<<<<<<<<<<
 *         """sets the description of the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_11setClassDescription, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_setClassDescription, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[50])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_setClassDescription, __pyx_t_2) < (0)) __PYX_ERR(7, 256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":267
 *         self.varPartition.setClassDescription(classindex, c_desc)
 * 
 *     def setClassName(self, classindex, name):             # <<<<<<<<<<<<<<
 *         """sets the name of the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_13setClassName, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_setClassName, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[51])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_setClassName, __pyx_t_2) < (0)) __PYX_ERR(7, 267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":278
 *         self.varPartition.setClassName(classindex, c_name)
 * 
 *     def addClass(self, name, desc, decompInfo):             # <<<<<<<<<<<<<<
 *         """adds a new class to the variable partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_15addClass, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_addClass, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[52])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_addClass, __pyx_t_2) < (0)) __PYX_ERR(7, 278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":294
 *         return self.varPartition.addClass(c_name, c_desc, decompInfo)
 * 
 *     def assignVarToClass(self, Variable var, classindex):             # <<<<<<<<<<<<<<
 *         """assigns a variable to the class corresponding to the classindex
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_17assignVarToClass, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_assignVarToClass, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[53])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_assignVarToClass, __pyx_t_2) < (0)) __PYX_ERR(7, 294, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":305
 *         self.varPartition.assignVarToClass(cpp_varindex, classindex)
 * 
 *     def getAllSubsets(self, all, linking, master, block):             # <<<<<<<<<<<<<<
 *         """returns a list containing all possible subsets of the chosen classindices
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_19getAllSubsets, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getAllSubsets, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[54])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getAllSubsets, __pyx_t_2) < (0)) __PYX_ERR(7, 305, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":321
 *         return self.varPartition.getAllSubsets(all, linking, master, block)
 * 
 *     def getClassDecompInfo(self, classindex):             # <<<<<<<<<<<<<<
 *         """returns the decomposition information of a class
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_21getClassDecompInfo, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getClassDecompInfo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[55])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getClassDecompInfo, __pyx_t_2) < (0)) __PYX_ERR(7, 321, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":331
 *         return self.varPartition.getClassDecompInfo(classindex)
 * 
 *     def getClassNameOfVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the name of the class a variable is assigned to
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_23getClassNameOfVar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getClassNameOfVar, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[56])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getClassNameOfVar, __pyx_t_2) < (0)) __PYX_ERR(7, 331, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":342
 *         return self.varPartition.getClassNameOfVar(cpp_varindex).decode('utf-8')
 * 
 *     def getClassOfVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the index of the class a variable is assigned to
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_25getClassOfVar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getClassOfVar, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[57])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getClassOfVar, __pyx_t_2) < (0)) __PYX_ERR(7, 342, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":353
 *         return self.varPartition.getClassOfVar(cpp_varindex)
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """returns the number of variables of the variable partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_27getNVars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getNVars, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[58])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getNVars, __pyx_t_2) < (0)) __PYX_ERR(7, 353, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":361
 *         return self.varPartition.getNVars()
 * 
 *     def getNVarsOfClasses(self):             # <<<<<<<<<<<<<<
 *         """returns list with the numbers of variables that are assigned to the classes
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_29getNVarsOfClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_getNVarsOfClasses, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[59])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_getNVarsOfClasses, __pyx_t_2) < (0)) __PYX_ERR(7, 361, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":369
 *         return self.varPartition.getNVarsOfClasses()
 * 
 *     def isVarClassified(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns whether a variable is already assigned to a class
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_31isVarClassified, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_isVarClassified, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[60])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_isVarClassified, __pyx_t_2) < (0)) __PYX_ERR(7, 369, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":380
 *         return self.varPartition.isVarClassified(cpp_varindex)
 * 
 *     def reduceClasses(self, maxNumberOfClasses):             # <<<<<<<<<<<<<<
 *         """returns variable partition with reduced number of classes
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_33reduceClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_reduceClasses, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[61])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_reduceClasses, __pyx_t_2) < (0)) __PYX_ERR(7, 380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/partition.pxi":391
 *         return VarPart.create(result, self.detProbData)
 * 
 *     def setClassDecompInfo(self, classindex, decompInfo):             # <<<<<<<<<<<<<<
 *         """sets the decomposition information of a class
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_35setClassDecompInfo, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart_setClassDecompInfo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[62])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarPart, __pyx_mstate_global->__pyx_n_u_setClassDecompInfo, __pyx_t_2) < (0)) __PYX_ERR(7, 391, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.varPartition cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_37__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[63])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.varPartition cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.varPartition cannot be converted to a Python object for pickling"
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7VarPart_39__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarPart___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[64])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":35
 *         return new_PartialDecomposition
 * 
 *     def __copy__(self):             # <<<<<<<<<<<<<<
 *         return PartialDecomposition.create(new PARTIALDECOMP(self.thisptr))
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_5__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition___copy, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[65])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_copy_2, __pyx_t_2) < (0)) __PYX_ERR(8, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":38
 *         return PartialDecomposition.create(new PARTIALDECOMP(self.thisptr))
 * 
 *     def copy(self):             # <<<<<<<<<<<<<<
 *         return copy(self)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_7copy, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_copy, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[66])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_copy, __pyx_t_2) < (0)) __PYX_ERR(8, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":59
 *         self.thisptr.setSelected(cpp_selected)
 * 
 *     def addBlock(self):             # <<<<<<<<<<<<<<
 *         """adds a new block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_9addBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addBlock, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[67])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":67
 *         return result
 * 
 *     def assignOpenConssToMaster(self):             # <<<<<<<<<<<<<<
 *         """assigns open constraints to master
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_11assignOpenConssToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_assignOpenC, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[68])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_assignOpenConssToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":72
 *         self.thisptr.assignOpenConssToMaster()
 * 
 *     def isComplete(self):             # <<<<<<<<<<<<<<
 *         """gets whether this partialdec is complete, i.e. it has no more open constraints and variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_13isComplete, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isComplete, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[69])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isComplete, __pyx_t_2) < (0)) __PYX_ERR(8, 72, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":80
 *         return result
 * 
 *     def isTrivial(self):             # <<<<<<<<<<<<<<
 *         """gets whether this partialdec is considered to be trivial
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_15isTrivial, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isTrivial, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[70])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isTrivial, __pyx_t_2) < (0)) __PYX_ERR(8, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":91
 *         return result
 * 
 *     def getNBlocks(self):             # <<<<<<<<<<<<<<
 *         """gets the number of blocks
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_17getNBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNBlocks, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[71])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 91, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":99
 *         return result
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """gets the number of constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_19getNConss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNConss, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[72])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNConss, __pyx_t_2) < (0)) __PYX_ERR(8, 99, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":107
 *         return result
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """gets number of variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_21getNVars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNVars, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[73])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNVars, __pyx_t_2) < (0)) __PYX_ERR(8, 107, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":115
 *         return result
 * 
 *     def getID(self):             # <<<<<<<<<<<<<<
 *         """gets the unique id of the partialdecomposition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_23getID, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getID, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[74])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getID, __pyx_t_2) < (0)) __PYX_ERR(8, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":123
 *         return result
 * 
 *     def getHashValue(self):             # <<<<<<<<<<<<<<
 *         """gets the calculated hash value of the partialdecomposition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_25getHashValue, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getHashValu, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[75])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getHashValue, __pyx_t_2) < (0)) __PYX_ERR(8, 123, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":131
 *         return result
 * 
 *     def getDetprobdata(self):             # <<<<<<<<<<<<<<
 *         """gets the corresponding detprobdata
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_27getDetprobdata, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getDetprobd, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[76])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getDetprobdata, __pyx_t_2) < (0)) __PYX_ERR(8, 131, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":139
 *         return DetProbData.create(result)
 * 
 *     def fixConsToMaster(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """fixes a Constraint to the master constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_29fixConsToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixConsToMa, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[77])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixConsToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":147
 *         self.thisptr.fixConsToMaster(cons.scip_cons)
 * 
 *     def fixConssToMaster(self, conss):             # <<<<<<<<<<<<<<
 *         """fixes all constraints to the master constraints.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_31fixConssToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixConssToM, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[78])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixConssToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 147, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":160
 *             self.fixConsToMaster(<Constraint?>cons)
 * 
 *     def fixConsToBlockId(self, Constraint cons, int block_id):             # <<<<<<<<<<<<<<
 *         """Adds a constraint to a block.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_33fixConsToBlockId, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixConsToBl, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[79])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixConsToBlockId, __pyx_t_2) < (0)) __PYX_ERR(8, 160, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":175
 *         self.thisptr.fixConsToBlock(cons.scip_cons, block_id)
 * 
 *     def fixConssToBlockId(self, conss, int block_id):             # <<<<<<<<<<<<<<
 *         """Adds all constraints to a block.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_35fixConssToBlockId, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixConssToB, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[80])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixConssToBlockId, __pyx_t_2) < (0)) __PYX_ERR(8, 175, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":207
 *     #        self.fixVarToBlockId(<Variable?>var, block_id)
 * 
 *     def fixConsToBlock(self, Constraint cons, object block):             # <<<<<<<<<<<<<<
 *         """Adds a constraint to a block.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_37fixConsToBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixConsToBl_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[81])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixConsToBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 207, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":234
 *         return block_id
 * 
 *     def fixConssToBlock(self, conss, object block):             # <<<<<<<<<<<<<<
 *         """Adds all constraints to a block.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_39fixConssToBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixConssToB_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[82])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixConssToBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 234, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":251
 *         return block_id
 * 
 *     def hasSetppccardMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning, set packing, set cover or cardinality constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_41hasSetppccardMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_hasSetppcca, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[83])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_hasSetppccardMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":259
 *         return result
 * 
 *     def hasSetppcMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning, set packing or set cover constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_43hasSetppcMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_hasSetppcMa, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[84])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_hasSetppcMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 259, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":267
 *         return result
 * 
 *     def hasSetppMaster(self):             # <<<<<<<<<<<<<<
 *         """checks if all master constraints set partitioning or set packing constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_45hasSetppMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_hasSetppMas, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[85])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_hasSetppMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":275
 *         return result
 * 
 *     def getNOpenconss(self):             # <<<<<<<<<<<<<<
 *         """gets number of constraints that are opened (not assigned yet)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_47getNOpenconss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNOpencon, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[86])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNOpenconss, __pyx_t_2) < (0)) __PYX_ERR(8, 275, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":283
 *         return result
 * 
 *     def getOpenconss(self):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are opened (not assigned yet)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_49getOpenconss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getOpencons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[87])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getOpenconss, __pyx_t_2) < (0)) __PYX_ERR(8, 283, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":292
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getNLinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets number of linking variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_51getNLinkingvars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNLinking, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[88])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNLinkingvars, __pyx_t_2) < (0)) __PYX_ERR(8, 292, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":300
 *         return result
 * 
 *     def getLinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to linking variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_53getLinkingvars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getLinkingv, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[89])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getLinkingvars, __pyx_t_2) < (0)) __PYX_ERR(8, 300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":309
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNMasterconss(self):             # <<<<<<<<<<<<<<
 *         """gets number of master constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_55getNMasterconss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNMasterc, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[90])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNMasterconss, __pyx_t_2) < (0)) __PYX_ERR(8, 309, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":317
 *         return result
 * 
 *     def getMasterconss(self):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are assigned to master variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_57getMasterconss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getMasterco, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[91])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getMasterconss, __pyx_t_2) < (0)) __PYX_ERR(8, 317, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":326
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getNMastervars(self):             # <<<<<<<<<<<<<<
 *         """gets number of master variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_59getNMastervars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNMasterv, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[92])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNMastervars, __pyx_t_2) < (0)) __PYX_ERR(8, 326, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":334
 *         return result
 * 
 *     def getMastervars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to master variables (static variables)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_61getMastervars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getMasterva, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[93])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getMastervars, __pyx_t_2) < (0)) __PYX_ERR(8, 334, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":343
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNOpenvars(self):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are opened (not assigned yet)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_63getNOpenvars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNOpenvar, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[94])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNOpenvars, __pyx_t_2) < (0)) __PYX_ERR(8, 343, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":351
 *         return result
 * 
 *     def getOpenvars(self):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are opened (not assigned yet)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_65getOpenvars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getOpenvars, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[95])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getOpenvars, __pyx_t_2) < (0)) __PYX_ERR(8, 351, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":360
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getNStairlinkingvars(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are assigned to stairlinking variables of the specified block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_67getNStairlinkingvars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNStairli, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[96])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNStairlinkingvars, __pyx_t_2) < (0)) __PYX_ERR(8, 360, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":383
 *     #    return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def getConssForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets a list of constraints that are assigned to the specified block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_69getConssForBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getConssFor, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[97])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getConssForBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 383, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":393
 *         return [Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in result]
 * 
 *     def getConssForBlocks(self):             # <<<<<<<<<<<<<<
 *         cdef vector[vector[int]] result = self.thisptr.getConssForBlocks()
 *         cdef DETPROBDATA* det_prob_data = self.thisptr.getDetprobdata()
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_71getConssForBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getConssFor_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[98])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getConssForBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 393, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":398
 *         return [[Constraint.create(det_prob_data.getCons(consIndex)) for consIndex in block] for block in result]
 * 
 *     def getNVarsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of variables that are assigned to the specified block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_73getNVarsForBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNVarsFor, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[99])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNVarsForBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 398, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":407
 *         return result
 * 
 *     def getVarsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets a list of variables that are assigned to the specified block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_75getVarsForBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getVarsForB, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[100])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getVarsForBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 407, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":417
 *         return [Variable.create(det_prob_data.getVar(varIndex)) for varIndex in result]
 * 
 *     def setConsToMaster(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """adds constraint to the master constraints, does not delete this constraint from list of open constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_77setConsToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setConsToMa, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[101])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setConsToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 417, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":426
 *         self.thisptr.setConsToMaster(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def setVarToBlockId(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables, does not delete this variable from list of open variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_79setVarToBlockId, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setVarToBlo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[102])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setVarToBlockId, __pyx_t_2) < (0)) __PYX_ERR(8, 426, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":438
 *         self.thisptr.setVarToBlock(det_prob_data.getIndexForVar(var.scip_var), cpp_block_id)
 * 
 *     def setVarToLinking(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables, does not delete this variable from list of open variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_81setVarToLinking, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setVarToLin, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[103])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setVarToLinking, __pyx_t_2) < (0)) __PYX_ERR(8, 438, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":447
 *         self.thisptr.setVarToLinking(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def fixVarToLinking(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the linking variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_83fixVarToLinking, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixVarToLin, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[104])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixVarToLinking, __pyx_t_2) < (0)) __PYX_ERR(8, 447, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":456
 *         self.thisptr.fixVarToLinking(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setVarToMaster(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the master variables, does not delete this variable from list of open variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_85setVarToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setVarToMas, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[105])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 456, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setVarToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 456, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":467
 *         self.thisptr.setVarToMaster(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def fixVarToMaster(self, Variable var):             # <<<<<<<<<<<<<<
 *         """adds variable to the master variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_87fixVarToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixVarToMas, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[106])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixVarToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 467, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":478
 *         self.thisptr.fixVarToMaster(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setVarToStairlinking(self, Variable var, int block1_id, int block2_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the stairlinking variables, does not delete this variable from list of open variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_89setVarToStairlinking, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setVarToSta, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[107])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setVarToStairlinking, __pyx_t_2) < (0)) __PYX_ERR(8, 478, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":494
 *         self.thisptr.setVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_block1_id, cpp_block2_id)
 * 
 *     def fixVarToStairlinking(self, Variable var, int firstblock_id):             # <<<<<<<<<<<<<<
 *         """adds variable to the stairlinking variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_91fixVarToStairlinking, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_fixVarToSta, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[108])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_fixVarToStairlinking, __pyx_t_2) < (0)) __PYX_ERR(8, 494, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":507
 *         self.thisptr.fixVarToStairlinking(det_prob_data.getIndexForVar(var.scip_var), cpp_firstblock_id)
 * 
 *     def isConsMastercons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """gets whether the constraint is a master constraint
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_93isConsMastercons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isConsMaste, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[109])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isConsMastercons, __pyx_t_2) < (0)) __PYX_ERR(8, 507, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":518
 *         return result
 * 
 *     def isConsOpencons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """gets whether the constraint is an open constraint
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_95isConsOpencons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isConsOpenc, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[110])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isConsOpencons, __pyx_t_2) < (0)) __PYX_ERR(8, 518, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":529
 *         return result
 * 
 *     def isVarBlockvarOfBlock(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is assigned to the block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_97isVarBlockvarOfBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isVarBlockv, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[111])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isVarBlockvarOfBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 529, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":541
 *         return result
 * 
 *     def isVarLinkingvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a linking variable
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_99isVarLinkingvar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isVarLinkin, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[112])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isVarLinkingvar, __pyx_t_2) < (0)) __PYX_ERR(8, 541, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":552
 *         return result
 * 
 *     def isVarMastervar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a master variable
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_101isVarMastervar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isVarMaster, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[113])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isVarMastervar, __pyx_t_2) < (0)) __PYX_ERR(8, 552, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":563
 *         return result
 * 
 *     def isVarOpenvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is an open variable
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_103isVarOpenvar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isVarOpenva, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[114])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isVarOpenvar, __pyx_t_2) < (0)) __PYX_ERR(8, 563, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":574
 *         return result
 * 
 *     def isVarStairlinkingvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """gets whether the variable is a stairlinking variable
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_105isVarStairlinkingvar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isVarStairl, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[115])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isVarStairlinkingvar, __pyx_t_2) < (0)) __PYX_ERR(8, 574, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":585
 *         return result
 * 
 *     def isVarStairlinkingvarOfBlock(self, Variable var, int block_id):             # <<<<<<<<<<<<<<
 *         """checks whether the var is a stairlinkingvar of a specified block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_107isVarStairlinkingvarOfBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isVarStairl_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[116])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isVarStairlinkingvarOfBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 585, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":597
 *         return result
 * 
 *     def deleteOpencons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """deletes constraint from list of open constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_109deleteOpencons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_deleteOpenc, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[117])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_deleteOpencons, __pyx_t_2) < (0)) __PYX_ERR(8, 597, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":606
 *         self.thisptr.deleteOpencons(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def deleteOpenvar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """deletes variable from the list of open variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_111deleteOpenvar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_deleteOpenv, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[118])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_deleteOpenvar, __pyx_t_2) < (0)) __PYX_ERR(8, 606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":615
 *         self.thisptr.deleteOpenvar(det_prob_data.getIndexForVar(var.scip_var))
 * 
 *     def setUsergiven(self, USERGIVEN value=COMPLETED_CONSTOMASTER):             # <<<<<<<<<<<<<<
 *         self.thisptr.setUsergiven(value)
 * 
*/
  __pyx_mstate_global->__pyx_k_ = gcg::COMPLETED_CONSTOMASTER;
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_USERGIVEN(gcg::COMPLETED_CONSTOMASTER); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_113setUsergiven, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setUsergive, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[119])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setUsergiven, __pyx_t_2) < (0)) __PYX_ERR(8, 615, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":618
 *         self.thisptr.setUsergiven(value)
 * 
 *     def getUsergiven(self):             # <<<<<<<<<<<<<<
 *         """gets the PY_USERGIVEN status of this partialdecs
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_115getUsergiven, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getUsergive, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[120])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getUsergiven, __pyx_t_2) < (0)) __PYX_ERR(8, 618, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":668
 *         return self.thisptr.getScore(GCGfindScore(self.thisptr.getDetprobdata().getGcg(), str_conversion("strong decomposition score")))
 * 
 *     def addClockTime(self, double clocktime):             # <<<<<<<<<<<<<<
 *         """adds detection time of one detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_117addClockTime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addClockTim, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[121])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 668, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addClockTime, __pyx_t_2) < (0)) __PYX_ERR(8, 668, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":676
 *         self.thisptr.addClockTime(cpp_clocktime)
 * 
 *     def addPctConssFromFree(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of closed constraints
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_119addPctConssFromFree, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addPctConss, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[122])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 676, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addPctConssFromFree, __pyx_t_2) < (0)) __PYX_ERR(8, 676, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":684
 *         self.thisptr.addPctConssFromFree(cpp_pct)
 * 
 *     def addPctConssToBlock(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of constraints assigned to blocks
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_121addPctConssToBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addPctConss_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[123])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addPctConssToBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 684, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":692
 *         self.thisptr.addPctConssToBlock(cpp_pct)
 * 
 *     def addPctConssToBorder(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of constraints assigned to border
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_123addPctConssToBorder, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addPctConss_3, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[124])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addPctConssToBorder, __pyx_t_2) < (0)) __PYX_ERR(8, 692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":700
 *         self.thisptr.addPctConssToBorder(cpp_pct)
 * 
 *     def addPctVarsFromFree(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of closed variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_125addPctVarsFromFree, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addPctVarsF, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[125])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addPctVarsFromFree, __pyx_t_2) < (0)) __PYX_ERR(8, 700, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":708
 *         self.thisptr.addPctVarsFromFree(cpp_pct)
 * 
 *     def addPctVarsToBlock(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of variables assigned to blocks
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_127addPctVarsToBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addPctVarsT, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[126])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addPctVarsToBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 708, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":716
 *         self.thisptr.addPctVarsToBlock(cpp_pct)
 * 
 *     def addPctVarsToBorder(self, double pct):             # <<<<<<<<<<<<<<
 *         """adds percentage of variables assigned to border
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_129addPctVarsToBorder, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addPctVarsT_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[127])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addPctVarsToBorder, __pyx_t_2) < (0)) __PYX_ERR(8, 716, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":724
 *         self.thisptr.addPctVarsToBorder(cpp_pct)
 * 
 *     def getPctVarsToBorder(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to the border for a detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_131getPctVarsToBorder, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctVarsT, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[128])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctVarsToBorder, __pyx_t_2) < (0)) __PYX_ERR(8, 724, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":733
 *         return result
 * 
 *     def getPctVarsToBorderVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to the border for detectors in detectorchain
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_133getPctVarsToBorderVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctVarsT_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[129])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctVarsToBorderVector, __pyx_t_2) < (0)) __PYX_ERR(8, 733, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":741
 *         return result
 * 
 *     def getPctVarsToBlock(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables assigned to a block for a detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_135getPctVarsToBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctVarsT_3, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[130])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctVarsToBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 741, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":750
 *         return result
 * 
 *     def getPctVarsToBlockVector(self):             # <<<<<<<<<<<<<<
 *         """returns fraction of variables assigned to a block for detectors in detectorchain
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_137getPctVarsToBlockVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctVarsT_4, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[131])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctVarsToBlockVector, __pyx_t_2) < (0)) __PYX_ERR(8, 750, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":758
 *         return result
 * 
 *     def getPctVarsFromFree(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """Gets fraction of variables that are not longer open for a detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_139getPctVarsFromFree, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctVarsF, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[132])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctVarsFromFree, __pyx_t_2) < (0)) __PYX_ERR(8, 758, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":767
 *         return result
 * 
 *     def getPctVarsFromFreeVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of variables that are not longer open for detectors in detectorchain
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_141getPctVarsFromFreeVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctVarsF_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[133])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctVarsFromFreeVector, __pyx_t_2) < (0)) __PYX_ERR(8, 767, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":775
 *         return result
 * 
 *     def getPctConssToBorder(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to the border for a detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_143getPctConssToBorder, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctConss, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[134])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctConssToBorder, __pyx_t_2) < (0)) __PYX_ERR(8, 775, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":784
 *         return result
 * 
 *     def getPctConssToBorderVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to the border for detectors in detectorchain
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_145getPctConssToBorderVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctConss_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[135])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctConssToBorderVector, __pyx_t_2) < (0)) __PYX_ERR(8, 784, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":792
 *         return result
 * 
 *     def getPctConssToBlock(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to a block for a detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_147getPctConssToBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctConss_3, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[136])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 792, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctConssToBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 792, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":801
 *         return result
 * 
 *     def getPctConssToBlockVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints assigned to a block for detectors in detectorchain
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_149getPctConssToBlockVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctConss_4, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[137])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctConssToBlockVector, __pyx_t_2) < (0)) __PYX_ERR(8, 801, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":809
 *         return result
 * 
 *     def getPctConssFromFree(self, int detectorchainindex):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints that are not longer open for a detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_151getPctConssFromFree, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctConss_5, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[138])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctConssFromFree, __pyx_t_2) < (0)) __PYX_ERR(8, 809, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":818
 *         return result
 * 
 *     def getPctConssFromFreeVector(self):             # <<<<<<<<<<<<<<
 *         """gets fraction of constraints that are not longer open for detectors in detectorchain
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_153getPctConssFromFreeVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getPctConss_6, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[139])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getPctConssFromFreeVector, __pyx_t_2) < (0)) __PYX_ERR(8, 818, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":826
 *         return result
 * 
 *     def getScore(self, Score score):             # <<<<<<<<<<<<<<
 *         """gets value of the score
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_155getScore, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getScore, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[140])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 826, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getScore, __pyx_t_2) < (0)) __PYX_ERR(8, 826, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":844
 * #        self.thisptr.calcStairlinkingVars()
 * 
 *     def checkAllConssAssigned(self):             # <<<<<<<<<<<<<<
 *         """checks if all constraints are assigned and deletes the open constraint vector if so
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_157checkAllConssAssigned, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_checkAllCon, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[141])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_checkAllConssAssigned, __pyx_t_2) < (0)) __PYX_ERR(8, 844, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":852
 *         return result
 * 
 *     def checkConsistency(self):             # <<<<<<<<<<<<<<
 *         """checks whether the assignments in the partialdec are consistent
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_159checkConsistency, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_checkConsis, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[142])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 852, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_checkConsistency, __pyx_t_2) < (0)) __PYX_ERR(8, 852, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":872
 *         return result
 * 
 *     def complete(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables trivially
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_161complete, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_complete, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[143])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_complete, __pyx_t_2) < (0)) __PYX_ERR(8, 872, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":881
 *         self.thisptr.complete()
 * 
 *     def sort(self):             # <<<<<<<<<<<<<<
 *         """sorts the variables and constraints data structures by their indices
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_163sort, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_sort, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[144])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_sort, __pyx_t_2) < (0)) __PYX_ERR(8, 881, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":889
 *         return result
 * 
 *     def completeByConnected(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_165completeByConnected, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_completeByC, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[145])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_completeByConnected, __pyx_t_2) < (0)) __PYX_ERR(8, 889, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":897
 *         self.thisptr.completeByConnected()
 * 
 *     def completeByConnectedConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_167completeByConnectedConssAdjacency, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_completeByC_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[146])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 897, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_completeByConnectedConssAdjacenc, __pyx_t_2) < (0)) __PYX_ERR(8, 897, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":907
 *         self.thisptr.completeByConnectedConssAdjacency()
 * 
 *     def completeGreedily(self):             # <<<<<<<<<<<<<<
 *         """assigns all open constraints and open variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_169completeGreedily, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_completeGre, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[147])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_completeGreedily, __pyx_t_2) < (0)) __PYX_ERR(8, 907, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":916
 *         self.thisptr.completeGreedily()
 * 
 *     def prepare(self):             # <<<<<<<<<<<<<<
 *         """sorts the partialdec and calculates a its implicit assignments, hashvalue and evaluation
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_171prepare, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_prepare, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[148])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_prepare, __pyx_t_2) < (0)) __PYX_ERR(8, 916, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":922
 *         self.thisptr.prepare()
 * 
 *     def getNDetectors(self):             # <<<<<<<<<<<<<<
 *         """gets the number of detectors the partialdec is propagated by
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_173getNDetectors, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNDetecto, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[149])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNDetectors, __pyx_t_2) < (0)) __PYX_ERR(8, 922, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":930
 *         return result
 * 
 *     def getNEquivalenceClasses(self):             # <<<<<<<<<<<<<<
 *         """gets the number of blockrepresentatives
 *         :return: the number of blockrepresentatives
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_175getNEquivalenceClasses, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNEquival, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[150])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNEquivalenceClasses, __pyx_t_2) < (0)) __PYX_ERR(8, 930, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":937
 *         return result
 * 
 *     def getNCoeffsForMaster(self):             # <<<<<<<<<<<<<<
 *         """gets number of nonzero coefficients in master
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_177getNCoeffsForMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNCoeffsF, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[151])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 937, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNCoeffsForMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 937, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":945
 *         return result
 * 
 *     def setNBlocks(self, int nblocks):             # <<<<<<<<<<<<<<
 *         """sets number of blocks, only increasing number allowed
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_179setNBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setNBlocks, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[152])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 945, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setNBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 945, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":953
 *         self.thisptr.setNBlocks(cpp_nblocks)
 * 
 *     def getNTotalStairlinkingvars(self):             # <<<<<<<<<<<<<<
 *         """gets total number of stairlinking variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_181getNTotalStairlinkingvars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNTotalSt, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[153])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNTotalStairlinkingvars, __pyx_t_2) < (0)) __PYX_ERR(8, 953, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":961
 *         return result
 * 
 *     def getNVarsForBlocks(self):             # <<<<<<<<<<<<<<
 *         """gets overall number of variables assigned to a block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_183getNVarsForBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNVarsFor_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[154])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNVarsForBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 961, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":969
 *         return result
 * 
 *     def findVarsLinkingToMaster(self):             # <<<<<<<<<<<<<<
 *         """reassigns linking variables to master if appropriate
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_185findVarsLinkingToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_findVarsLin, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[155])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_findVarsLinkingToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 969, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":976
 *         self.thisptr.findVarsLinkingToMaster()
 * 
 *     def findVarsLinkingToStairlinking(self):             # <<<<<<<<<<<<<<
 *         """reassigns variables classified as linking to stairlinking if appropriate
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_187findVarsLinkingToStairlinking, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_findVarsLin_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[156])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_findVarsLinkingToStairlinking, __pyx_t_2) < (0)) __PYX_ERR(8, 976, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":983
 *         self.thisptr.findVarsLinkingToStairlinking()
 * 
 *     def getNCoeffsForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets number of nonzero coeffs in a certain block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_189getNCoeffsForBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNCoeffsF_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[157])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNCoeffsForBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 983, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":993
 *         return result
 * 
 *     def addNNewBlocks(self, int nnewblocks):             # <<<<<<<<<<<<<<
 *         """adds how many new blocks were introduced
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_191addNNewBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addNNewBloc, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[158])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addNNewBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 993, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1001
 *         self.thisptr.addNNewBlocks(cpp_nnewblocks)
 * 
 *     def getNConssForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets size of the vector containing constraints assigned to a block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_193getNConssForBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNConssFo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[159])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1001, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNConssForBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 1001, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1011
 *         return result
 * 
 *     def removeMastercons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """removes the given constraint from master
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_195removeMastercons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_removeMaste, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[160])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_removeMastercons, __pyx_t_2) < (0)) __PYX_ERR(8, 1011, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1020
 *         self.thisptr.removeMastercons(det_prob_data.getIndexForCons(cons.scip_cons))
 * 
 *     def isAssignedToOrigProb(self):             # <<<<<<<<<<<<<<
 *         """gets whether the partialdec is from the presolved problem
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_197isAssignedToOrigProb, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_isAssignedT, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[161])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_isAssignedToOrigProb, __pyx_t_2) < (0)) __PYX_ERR(8, 1020, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1028
 *         return result
 * 
 *     def refineToBlocks(self):             # <<<<<<<<<<<<<<
 *         """refine partialdec with focus on blocks
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_199refineToBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_refineToBlo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[162])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_refineToBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 1028, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1037
 *         self.thisptr.refineToBlocks()
 * 
 *     def refineToMaster(self):             # <<<<<<<<<<<<<<
 *         """refine partialdec with focus on master
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_201refineToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_refineToMas, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[163])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_refineToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 1037, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1045
 *         self.thisptr.refineToMaster()
 * 
 *     def alreadyAssignedConssToBlocks(self):             # <<<<<<<<<<<<<<
 *         """checks if at least one constraint is assigned to some block
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_203alreadyAssignedConssToBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_alreadyAssi, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[164])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_alreadyAssignedConssToBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 1045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1053
 *         return result
 * 
 *     def assignCurrentStairlinking(self):             # <<<<<<<<<<<<<<
 *         """assigns open variables to stairlinking if appropriate
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_205assignCurrentStairlinking, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_assignCurre, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[165])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_assignCurrentStairlinking, __pyx_t_2) < (0)) __PYX_ERR(8, 1053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1063
 *         return result
 * 
 *     def aggInfoCalculated(self):             # <<<<<<<<<<<<<<
 *         """checks if the aggregation information was already calculated
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_207aggInfoCalculated, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_aggInfoCalc, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[166])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_aggInfoCalculated, __pyx_t_2) < (0)) __PYX_ERR(8, 1063, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1071
 *         return result
 * 
 *     def considerImplicits(self):             # <<<<<<<<<<<<<<
 *         """assigns every open constraint/variable
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_209considerImplicits, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_considerImp, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[167])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_considerImplicits, __pyx_t_2) < (0)) __PYX_ERR(8, 1071, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1083
 *         self.thisptr.considerImplicits()
 * 
 *     def displayInfo(self, int detailLevel):             # <<<<<<<<<<<<<<
 *         """displays the relevant information of the partialdec
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_211displayInfo, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_displayInfo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[168])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1083, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_displayInfo, __pyx_t_2) < (0)) __PYX_ERR(8, 1083, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1094
 *         self.thisptr.displayInfo(cpp_detailLevel)
 * 
 *     def getAncestorList(self):             # <<<<<<<<<<<<<<
 *         """gets ancestor ids as vector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_213getAncestorList, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getAncestor, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[169])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getAncestorList, __pyx_t_2) < (0)) __PYX_ERR(8, 1094, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1102
 *         return result
 * 
 *     def assignSmallestComponentsButOneConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """computes components by connectedness of constraints and variables
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_215assignSmallestComponentsButOneConssAdjacency, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_assignSmall, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[170])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_assignSmallestComponentsButOneCo, __pyx_t_2) < (0)) __PYX_ERR(8, 1102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1116
 *         self.thisptr.assignSmallestComponentsButOneConssAdjacency()
 * 
 *     def deleteEmptyBlocks(self, bool variables):             # <<<<<<<<<<<<<<
 *         """deletes empty blocks and sets nblocks accordingly
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_217deleteEmptyBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_deleteEmpty, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[171])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_deleteEmptyBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 1116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1127
 *         self.thisptr.deleteEmptyBlocks(cpp_variables)
 * 
 *     def getTranslatedpartialdecid(self):             # <<<<<<<<<<<<<<
 *         cdef int result = self.thisptr.getTranslatedpartialdecid()
 *         return result
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_219getTranslatedpartialdecid, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getTranslat, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[172])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getTranslatedpartialdecid, __pyx_t_2) < (0)) __PYX_ERR(8, 1127, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1131
 *         return result
 * 
 *     def setTranslatedpartialdecid(self, int dec_id):             # <<<<<<<<<<<<<<
 *         cdef int cpp_dec_id = dec_id
 *         self.thisptr.setTranslatedpartialdecid(cpp_dec_id)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_221setTranslatedpartialdecid, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setTranslat, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[173])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setTranslatedpartialdecid, __pyx_t_2) < (0)) __PYX_ERR(8, 1131, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1135
 *         self.thisptr.setTranslatedpartialdecid(cpp_dec_id)
 * 
 *     def buildDecChainString(self, buffer):             # <<<<<<<<<<<<<<
 *         """creates a detector chain short string for this partialdec, is built from detector chain
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_223buildDecChainString, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_buildDecCha, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[174])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_buildDecChainString, __pyx_t_2) < (0)) __PYX_ERR(8, 1135, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1142
 *         self.thisptr.buildDecChainString(c_buffer)
 * 
 *     def addDecChangesFromAncestor(self, PartialDecomposition ancestor):             # <<<<<<<<<<<<<<
 *         """adds the statistical differences to an ancestor
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_225addDecChangesFromAncestor, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addDecChang, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[175])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addDecChangesFromAncestor, __pyx_t_2) < (0)) __PYX_ERR(8, 1142, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1150
 *         self.thisptr.addDecChangesFromAncestor(cpp_ancestor)
 * 
 *     def addDetectorChainInfo(PartialDecomposition self, decinfo):             # <<<<<<<<<<<<<<
 *         """adds information about the detector chain
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_227addDetectorChainInfo, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addDetector, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[176])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addDetectorChainInfo, __pyx_t_2) < (0)) __PYX_ERR(8, 1150, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1159
 *         self.thisptr.addDetectorChainInfo(c_decinfo)
 * 
 *     def getAncestorID(self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """gets partialdec id of given ancestor id
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_229getAncestorID, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getAncestor_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[177])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getAncestorID, __pyx_t_2) < (0)) __PYX_ERR(8, 1159, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1168
 *         return result
 * 
 *     def copyPartitionStatistics(PartialDecomposition self, PartialDecomposition otherpartialdec):             # <<<<<<<<<<<<<<
 *         """copies the given partialdec's partition statistics
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_231copyPartitionStatistics, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_copyPartiti, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[178])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_copyPartitionStatistics, __pyx_t_2) < (0)) __PYX_ERR(8, 1168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1176
 *         self.thisptr.copyPartitionStatistics(cpp_otherpartialdec)
 * 
 *     def removeAncestorID(PartialDecomposition self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """removes ancestor id from list
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_233removeAncestorID, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_removeAnces, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[179])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_removeAncestorID, __pyx_t_2) < (0)) __PYX_ERR(8, 1176, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1182
 *         self.thisptr.removeAncestorID(cpp_ancestor_id)
 * 
 *     def addAncestorID(self, int ancestor_id):             # <<<<<<<<<<<<<<
 *         """adds ancestor id to back of list
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_235addAncestorID, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_addAncestor, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[180])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_addAncestorID, __pyx_t_2) < (0)) __PYX_ERR(8, 1182, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1190
 *         self.thisptr.addAncestorID(cpp_ancestor_id)
 * 
 *     def getBlocksForEqClass(PartialDecomposition self, int rep_id):             # <<<<<<<<<<<<<<
 *         """get a vector of block ids that are identical to block with id rep_id
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_237getBlocksForEqClass, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getBlocksFo, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[181])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getBlocksForEqClass, __pyx_t_2) < (0)) __PYX_ERR(8, 1190, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1200
 *         return result
 * 
 *     def getNNewBlocksVector(self):             # <<<<<<<<<<<<<<
 *         """gets number of blocks the detectors in the detectorchain added
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_239getNNewBlocksVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNNewBloc, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[182])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNNewBlocksVector, __pyx_t_2) < (0)) __PYX_ERR(8, 1200, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1208
 *         return result
 * 
 *     def getNAncestors(self):             # <<<<<<<<<<<<<<
 *         """gets number of ancestor partialdecs
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_241getNAncestors, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNAncesto, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[183])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNAncestors, __pyx_t_2) < (0)) __PYX_ERR(8, 1208, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1216
 *         return result
 * 
 *     def getNNewBlocks(self, int detectorchain_id):             # <<<<<<<<<<<<<<
 *         """gets number of blocks a detector added
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_243getNNewBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getNNewBloc_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[184])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getNNewBlocks, __pyx_t_2) < (0)) __PYX_ERR(8, 1216, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1225
 *         return result
 * 
 *     def getFinishedByFinisher(self):             # <<<<<<<<<<<<<<
 *         """returns True iff this partialdec was finished by finishPartialdec() method of a detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_245getFinishedByFinisher, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getFinished, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[185])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getFinishedByFinisher, __pyx_t_2) < (0)) __PYX_ERR(8, 1225, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1233
 *         return result
 * 
 *     def getDetectorchainInfo(self):             # <<<<<<<<<<<<<<
 *         """gets the detectorchain info vector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_247getDetectorchainInfo, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getDetector, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[186])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getDetectorchainInfo, __pyx_t_2) < (0)) __PYX_ERR(8, 1233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1241
 *         return result
 * 
 *     def shouldCompletedByConsToMaster(self):             # <<<<<<<<<<<<<<
 *         """checks whether this partialdec is a userpartialdec that should be completed
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_249shouldCompletedByConsToMaster, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_shouldCompl, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[187])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_shouldCompletedByConsToMaster, __pyx_t_2) < (0)) __PYX_ERR(8, 1241, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1250
 *         return result
 * 
 *     def setFinishedByFinisher(self, bool finished):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec was finished by a finishing detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_251setFinishedByFinisher, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setFinished, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[188])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setFinishedByFinisher, __pyx_t_2) < (0)) __PYX_ERR(8, 1250, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1258
 *         self.thisptr.setFinishedByFinisher(cpp_finished)
 * 
 *     def calcAggregationInformation(self, bool ignoreDetectionLimits):             # <<<<<<<<<<<<<<
 *         """computes if aggregation of sub problems is possible
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_253calcAggregationInformation, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_calcAggrega, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[189])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_calcAggregationInformation, __pyx_t_2) < (0)) __PYX_ERR(8, 1258, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1270
 *         self.thisptr.calcAggregationInformation(cpp_ignoreDetectionLimits)
 * 
 *     def setDetectorPropagated(self, Detector detector):             # <<<<<<<<<<<<<<
 *         """sets partialdec to be propagated by a detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_255setDetectorPropagated, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setDetector, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[190])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setDetectorPropagated, __pyx_t_2) < (0)) __PYX_ERR(8, 1270, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1278
 *         self.thisptr.setDetectorPropagated(dec)
 * 
 *     def setDetectorFinished(self, Detector detector):             # <<<<<<<<<<<<<<
 *         """sets detector that finished the partialdec
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_257setDetectorFinished, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setDetector_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[191])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setDetectorFinished, __pyx_t_2) < (0)) __PYX_ERR(8, 1278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1286
 *         self.thisptr.setDetectorFinished(dec)
 * 
 *     def setDetectorFinishedOrig(self):             # <<<<<<<<<<<<<<
 *         """sets detector that finished the partialdec in the original problem
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_259setDetectorFinishedOrig, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setDetector_3, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[192])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setDetectorFinishedOrig, __pyx_t_2) < (0)) __PYX_ERR(8, 1286, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1294
 *         self.thisptr.setDetectorFinishedOrig()
 * 
 *     def setPctConssToBlockVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints set to blocks per involved detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_261setPctConssToBlockVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setPctConss, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[193])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setPctConssToBlockVector, __pyx_t_2) < (0)) __PYX_ERR(8, 1294, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1302
 *         self.thisptr.setPctConssToBlockVector(cpp_newvector)
 * 
 *     def setPctConssFromFreeVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints that are not longer open per involved detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_263setPctConssFromFreeVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setPctConss_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[194])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setPctConssFromFreeVector, __pyx_t_2) < (0)) __PYX_ERR(8, 1302, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1310
 *         self.thisptr.setPctConssFromFreeVector(cpp_newvector)
 * 
 *     def setPctConssToBorderVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of constraints assigned to the border per involved detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_265setPctConssToBorderVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setPctConss_3, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[195])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setPctConssToBorderVector, __pyx_t_2) < (0)) __PYX_ERR(8, 1310, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1318
 *         self.thisptr.setPctConssToBorderVector(cpp_newvector)
 * 
 *     def setPctVarsToBorderVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fraction of variables assigned to the border per involved detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_267setPctVarsToBorderVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setPctVarsT, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[196])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setPctVarsToBorderVector, __pyx_t_2) < (0)) __PYX_ERR(8, 1318, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1326
 *         self.thisptr.setPctVarsToBorderVector(cpp_newvector)
 * 
 *     def setPctVarsToBlockVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of fractions of variables assigned to a block per involved detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_269setPctVarsToBlockVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setPctVarsT_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[197])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setPctVarsToBlockVector, __pyx_t_2) < (0)) __PYX_ERR(8, 1326, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1334
 *         self.thisptr.setPctVarsToBlockVector(cpp_newvector)
 * 
 *     def setPctVarsFromFreeVector(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of variables that are not longer open per involved detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_271setPctVarsFromFreeVector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setPctVarsF, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[198])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setPctVarsFromFreeVector, __pyx_t_2) < (0)) __PYX_ERR(8, 1334, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1342
 *         self.thisptr.setPctVarsFromFreeVector(cpp_newvector)
 * 
 *     def setDetectorClockTimes(self, object newvector):             # <<<<<<<<<<<<<<
 *         """set statistical vector of the times that the detectors needed for detecting per involved detector
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_273setDetectorClockTimes, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setDetector_4, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[199])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setDetectorClockTimes, __pyx_t_2) < (0)) __PYX_ERR(8, 1342, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1350
 *         self.thisptr.setDetectorClockTimes(cpp_newvector)
 * 
 *     def setFinishedByFinisherOrig(self, bool finished):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec was finished by a finishing detector in the original problem (in case this partialdec was translated)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_275setFinishedByFinisherOrig, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setFinished_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[200])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setFinishedByFinisherOrig, __pyx_t_2) < (0)) __PYX_ERR(8, 1350, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1358
 *         self.thisptr.setFinishedByFinisherOrig(cpp_finished)
 * 
 *     def setStemsFromOrig(self, bool fromorig):             # <<<<<<<<<<<<<<
 *         """sets whether this partialdec stems from an orig problem partialdec
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_277setStemsFromOrig, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setStemsFro, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[201])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setStemsFromOrig, __pyx_t_2) < (0)) __PYX_ERR(8, 1358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1366
 *         self.thisptr.setStemsFromOrig(cpp_fromorig)
 * 
 *     def getDetectorClockTime(self, int detectorchain_id):             # <<<<<<<<<<<<<<
 *         """returns the time that the detector related to the given detectorchainindex needed for detecting
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_279getDetectorClockTime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getDetector_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[202])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getDetectorClockTime, __pyx_t_2) < (0)) __PYX_ERR(8, 1366, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1375
 *         return result
 * 
 *     def getEqClassForBlock(self, int block_id):             # <<<<<<<<<<<<<<
 *         """gets index of the representative block for a block, this might be block_id itself
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_281getEqClassForBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getEqClassF, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[203])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getEqClassForBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 1375, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1385
 *         return result
 * 
 *     def showVisualization(self):             # <<<<<<<<<<<<<<
 *         """generates and opens a gp visualization of the partialdec
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_283showVisualization, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_showVisuali, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[204])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_showVisualization, __pyx_t_2) < (0)) __PYX_ERR(8, 1385, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1392
 *         self.thisptr.showVisualization()
 * 
 *     def _repr_svg_(self):             # <<<<<<<<<<<<<<
 *         return self.__generate_visualization("svg")
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_285_repr_svg_, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition__repr_svg, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[205])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_repr_svg, __pyx_t_2) < (0)) __PYX_ERR(8, 1392, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1395
 *         return self.__generate_visualization("svg")
 * 
 *     def _repr_png_(self):             # <<<<<<<<<<<<<<
 *         return self.__generate_visualization("png")
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_287_repr_png_, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition__repr_png, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[206])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_repr_png, __pyx_t_2) < (0)) __PYX_ERR(8, 1395, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1448
 * 
 *     # BEGIN AUTOGENERATED BLOCK
 *     def setAncestorList(PartialDecomposition self, object newlist):             # <<<<<<<<<<<<<<
 *         """set ancestor list directly
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_291setAncestorList, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setAncestor, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[207])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1448, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setAncestorList, __pyx_t_2) < (0)) __PYX_ERR(8, 1448, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1456
 *         self.thisptr.setAncestorList(cpp_newlist)
 * 
 *     def getDetectorClockTimes(PartialDecomposition self):             # <<<<<<<<<<<<<<
 *         """returns a vector of the clock times that each detector needed that was involved in this partialdec
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_293getDetectorClockTimes, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getDetector_3, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[208])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1456, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getDetectorClockTimes, __pyx_t_2) < (0)) __PYX_ERR(8, 1456, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1472
 *     #     return result
 * 
 *     def getRepVarmap(PartialDecomposition self, int repid, int blockrepid):             # <<<<<<<<<<<<<<
 *         """Gets the represenation varmap
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_295getRepVarmap, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getRepVarma, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[209])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getRepVarmap, __pyx_t_2) < (0)) __PYX_ERR(8, 1472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1486
 *         return result
 * 
 *     def getVarProbindexForBlock(PartialDecomposition self, int varid, int block):             # <<<<<<<<<<<<<<
 *         """Gets index in variables array of a block for a variable
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_297getVarProbindexForBlock, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_getVarProbi, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[210])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_getVarProbindexForBlock, __pyx_t_2) < (0)) __PYX_ERR(8, 1486, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1515
 *     #     raise NotImplementedError()
 * 
 *     def setConsPartitionStatistics(PartialDecomposition self, int detectorchainindex, ConsPart partition, object consclassesmaster):             # <<<<<<<<<<<<<<
 *         """registers statistics for a used conspartition.
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_299setConsPartitionStatistics, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setConsPart, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[211])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setConsPartitionStatistics, __pyx_t_2) < (0)) __PYX_ERR(8, 1515, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/decomposition.pxi":1531
 *     #     self.thisptr.setDetectorchain(cpp_givenDetectorChain)
 * 
 *     def setVarPartitionStatistics(PartialDecomposition self, int detectorchainindex, VarPart partition, object varclasseslinking, object varclassesmaster):             # <<<<<<<<<<<<<<
 *         """registers statistics for a used varpartition.
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_301setVarPartitionStatistics, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition_setVarParti, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[212])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 1531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PartialDecomposition, __pyx_mstate_global->__pyx_n_u_setVarPartitionStatistics, __pyx_t_2) < (0)) __PYX_ERR(8, 1531, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_303__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition___reduce_cy, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[213])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PartialDecomposition_305__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PartialDecomposition___setstate, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[214])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":12
 *         return new_DetProbData
 * 
 *     def createConsPart(self, name, nclasses, ncons):             # <<<<<<<<<<<<<<
 *         """returns a ConsPart object
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_1createConsPart, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_createConsPart, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[215])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_createConsPart, __pyx_t_2) < (0)) __PYX_ERR(9, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":29
 *         return ConsPart.create(conspatitionptr, self)
 * 
 *     def createVarPart(self, name, nclasses, nvars):             # <<<<<<<<<<<<<<
 *         """returns a VarPart object
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_3createVarPart, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_createVarPart, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[216])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_createVarPart, __pyx_t_2) < (0)) __PYX_ERR(9, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":46
 *         return VarPart.create(varpatitionptr, self)
 * 
 *     def candidatesNBlocks(self):             # <<<<<<<<<<<<<<
 *         """candidate for the number of blocks, second int indicates how often a candidate was added
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_5candidatesNBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_candidatesNBlocks, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[217])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_candidatesNBlocks, __pyx_t_2) < (0)) __PYX_ERR(9, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":52
 *         return result
 * 
 *     def candidatesNBlocks(self, object candidatesNBlocks):             # <<<<<<<<<<<<<<
 *         cdef vector[pair[int, int]] cpp_candidatesNBlocks = candidatesNBlocks
 *         self.thisptr.candidatesNBlocks = cpp_candidatesNBlocks
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_7candidatesNBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_candidatesNBlocks, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[218])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_candidatesNBlocks, __pyx_t_2) < (0)) __PYX_ERR(9, 52, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":56
 *         self.thisptr.candidatesNBlocks = cpp_candidatesNBlocks
 * 
 *     def conspartitioncollection(self):             # <<<<<<<<<<<<<<
 *         """collection of different constraint class distributions.
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_9conspartitioncollection, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_conspartitioncollect, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[219])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_conspartitioncollection, __pyx_t_2) < (0)) __PYX_ERR(9, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":62
 *         return [ConsPart.create(r, <DetProbData>weakref.proxy(self)) for r in result]
 * 
 *     def conspartitioncollection(self, object conspartitioncollection):             # <<<<<<<<<<<<<<
 *         # this seems to be possible only when we use C++11 (-std=c++11)
 *         # maybe it will be fixed in a future version of Cython
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_11conspartitioncollection, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_conspartitioncollect, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[220])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_conspartitioncollection, __pyx_t_2) < (0)) __PYX_ERR(9, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":73
 *         self.thisptr.conspartitioncollection = cpp_conspartitioncollection
 * 
 *     def varpartitioncollection(self):             # <<<<<<<<<<<<<<
 *         """collection of different variable class distributions.
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_13varpartitioncollection, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_varpartitioncollecti, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[221])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_varpartitioncollection, __pyx_t_2) < (0)) __PYX_ERR(9, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":79
 *         return [VarPart.create(r, self) for r in result]
 * 
 *     def varpartitioncollection(self, object varpartitioncollection):             # <<<<<<<<<<<<<<
 *         # this seems to be possible only when we use C++11 (-std=c++11)
 *         # maybe it will be fixed in a future version of Cython
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_15varpartitioncollection, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_varpartitioncollecti, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[222])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_varpartitioncollection, __pyx_t_2) < (0)) __PYX_ERR(9, 79, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":90
 *         self.thisptr.varpartitioncollection = cpp_varpartitioncollection
 * 
 *     def classificationtime(self):             # <<<<<<<<<<<<<<
 *         """time that was consumed by the classification of the constraint and variables classifiers.
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_17classificationtime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_classificationtime, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[223])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_classificationtime, __pyx_t_2) < (0)) __PYX_ERR(9, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":96
 *         return result
 * 
 *     def classificationtime(self, double classificationtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_classificationtime = classificationtime
 *         self.thisptr.classificationtime = cpp_classificationtime
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_19classificationtime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_classificationtime, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[224])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_classificationtime, __pyx_t_2) < (0)) __PYX_ERR(9, 96, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":100
 *         self.thisptr.classificationtime = cpp_classificationtime
 * 
 *     def nblockscandidatescalctime(self):             # <<<<<<<<<<<<<<
 *         """time that was used to calulate the candidates of te block number.
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_21nblockscandidatescalctime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_nblockscandidatescal, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[225])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_nblockscandidatescalctime, __pyx_t_2) < (0)) __PYX_ERR(9, 100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":106
 *         return result
 * 
 *     def nblockscandidatescalctime(DetProbData self, double nblockscandidatescalctime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_nblockscandidatescalctime = nblockscandidatescalctime
 *         self.thisptr.nblockscandidatescalctime = cpp_nblockscandidatescalctime
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_23nblockscandidatescalctime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_nblockscandidatescal, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[226])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_nblockscandidatescalctime, __pyx_t_2) < (0)) __PYX_ERR(9, 106, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":110
 *         self.thisptr.nblockscandidatescalctime = cpp_nblockscandidatescalctime
 * 
 *     def postprocessingtime(self):             # <<<<<<<<<<<<<<
 *         """time that was spent in postproceesing decomposigtions.
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_25postprocessingtime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_postprocessingtime, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[227])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_postprocessingtime, __pyx_t_2) < (0)) __PYX_ERR(9, 110, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":116
 *         return result
 * 
 *     def postprocessingtime(self, double postprocessingtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_postprocessingtime = postprocessingtime
 *         self.thisptr.postprocessingtime = cpp_postprocessingtime
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_27postprocessingtime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_postprocessingtime, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[228])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_postprocessingtime, __pyx_t_2) < (0)) __PYX_ERR(9, 116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":120
 *         self.thisptr.postprocessingtime = cpp_postprocessingtime
 * 
 *     def translatingtime(self):             # <<<<<<<<<<<<<<
 *         """time that was spent by transforming partialdecs between presolved and orig problem.
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_29translatingtime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_translatingtime, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[229])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_translatingtime, __pyx_t_2) < (0)) __PYX_ERR(9, 120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":126
 *         return result
 * 
 *     def translatingtime(self, double translatingtime):             # <<<<<<<<<<<<<<
 *         cdef double cpp_translatingtime = translatingtime
 *         self.thisptr.translatingtime = cpp_translatingtime
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_31translatingtime, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_translatingtime, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[230])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_translatingtime, __pyx_t_2) < (0)) __PYX_ERR(9, 126, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":130
 *         self.thisptr.translatingtime = cpp_translatingtime
 * 
 *     def addConsPartition(self, ConsPart partition):             # <<<<<<<<<<<<<<
 *         """adds a constraint partition if it is no duplicate of an existing constraint partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_33addConsPartition, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_addConsPartition, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[231])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_addConsPartition, __pyx_t_2) < (0)) __PYX_ERR(9, 130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":139
 *         self.thisptr.addConsPartition(cpp_partition)
 * 
 *     def addCandidatesNBlocksNVotes(self, int candidate, int nvotes):             # <<<<<<<<<<<<<<
 *         """adds a candidate for block number and counts how often a candidate is added
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_35addCandidatesNBlocksNVotes, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_addCandidatesNBlocks, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[232])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_addCandidatesNBlocksNVotes, __pyx_t_2) < (0)) __PYX_ERR(9, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":149
 *         self.thisptr.addCandidatesNBlocksNVotes(candidate, nvotes)
 * 
 *     def addPartialdecToAncestor(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to ancestor partialdecs
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_37addPartialdecToAncestor, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_addPartialdecToAnces, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[233])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_addPartialdecToAncestor, __pyx_t_2) < (0)) __PYX_ERR(9, 149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":158
 *         self.thisptr.addPartialdecToAncestor(cpp_partialdec)
 * 
 *     def addPartialdecToOpen(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to current partialdecs (data structure for partialdecs that are going to processed in the propagation rounds)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_39addPartialdecToOpen, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_addPartialdecToOpen, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[234])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_addPartialdecToOpen, __pyx_t_2) < (0)) __PYX_ERR(9, 158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":169
 *         return self.thisptr.addPartialdecToOpen(cpp_partialdec)
 * 
 *     def addPartialdecToFinished(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to finished partialdecs
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_41addPartialdecToFinished, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_addPartialdecToFinis, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[235])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_addPartialdecToFinished, __pyx_t_2) < (0)) __PYX_ERR(9, 169, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":182
 *         return self.thisptr.addPartialdecToFinished(cpp_partialdec)
 * 
 *     def addPartialdecToFinishedUnchecked(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """adds a partialdec to finished partialdecs without checking for duplicates, dev has to check this on his own
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_43addPartialdecToFinishedUnchecked, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_addPartialdecToFinis_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[236])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_addPartialdecToFinishedUnchecked, __pyx_t_2) < (0)) __PYX_ERR(9, 182, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":193
 *         self.thisptr.addPartialdecToFinishedUnchecked(cpp_partialdec)
 * 
 *     def addVarPartition(self, VarPart partition):             # <<<<<<<<<<<<<<
 *         """adds a variable partition if it is no duplicate of an existing variable partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_45addVarPartition, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_addVarPartition, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[237])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_addVarPartition, __pyx_t_2) < (0)) __PYX_ERR(9, 193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":202
 *         self.thisptr.addVarPartition(cpp_partition)
 * 
 *     def clearAncestorPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears ancestor partialdec data structure
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_47clearAncestorPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_clearAncestorPartial, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[238])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_clearAncestorPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 202, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":209
 *         self.thisptr.clearAncestorPartialdecs()
 * 
 *     def clearCurrentPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears current partialdec data structure
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_49clearCurrentPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_clearCurrentPartiald, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[239])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 209, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_clearCurrentPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 209, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":216
 *         self.thisptr.clearCurrentPartialdecs()
 * 
 *     def clearFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """clears finished partialdec data structure
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_51clearFinishedPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_clearFinishedPartial, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[240])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_clearFinishedPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 216, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":223
 *         self.thisptr.clearFinishedPartialdecs()
 * 
 *     def createConssAdjacency(self):             # <<<<<<<<<<<<<<
 *         """creates the constraint adjacency datastructure that is used (if created) for some methods to faster access the constarints that have variables in common
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_53createConssAdjacency, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_createConssAdjacency, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[241])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_createConssAdjacency, __pyx_t_2) < (0)) __PYX_ERR(9, 223, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":228
 *         self.thisptr.createConssAdjacency()
 * 
 *     def freeTemporaryData(self):             # <<<<<<<<<<<<<<
 *         """frees temporary data that is only needed during the detection process
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_55freeTemporaryData, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_freeTemporaryData, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[242])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_freeTemporaryData, __pyx_t_2) < (0)) __PYX_ERR(9, 228, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":233
 *         self.thisptr.freeTemporaryData()
 * 
 *     def getAncestorPartialdec(self, partialdecindex):             # <<<<<<<<<<<<<<
 *         """returns a partialdec from ancestor partialdec data structure with given index
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_57getAncestorPartialdec, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getAncestorPartialde, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[243])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getAncestorPartialdec, __pyx_t_2) < (0)) __PYX_ERR(9, 233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":244
 *         return PartialDecomposition.create(result)
 * 
 *     def getConsPartition(self, partitionIndex):             # <<<<<<<<<<<<<<
 *         """returns a constraint partition
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_59getConsPartition, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getConsPartition, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[244])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getConsPartition, __pyx_t_2) < (0)) __PYX_ERR(9, 244, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":255
 *         return ConsPart.create(result, <DetProbData>weakref.proxy(self))
 * 
 *     def getConsPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns list to stored constraint partitions
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_61getConsPartitions, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getConsPartitions, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[245])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getConsPartitions, __pyx_t_2) < (0)) __PYX_ERR(9, 255, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":264
 *         return [ConsPart.create(self.thisptr.getConsPartition(r), self) for r in range(nconsparts)]
 * 
 *     def getCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns constraint related to a constraint index
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_63getCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[246])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getCons, __pyx_t_2) < (0)) __PYX_ERR(9, 264, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":274
 *         return Constraint.create(self.thisptr.getCons(consIndex))
 * 
 *     def getConssForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns list of constraint indices that have a common variable with the given constraint
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_65getConssForCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getConssForCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[247])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getConssForCons, __pyx_t_2) < (0)) __PYX_ERR(9, 274, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":286
 *         return self.thisptr.getConssForCons(consIndex)
 * 
 *     def getConssForVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns the constraint indices of the coefficient matrix for a variable
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_67getConssForVar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getConssForVar, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[248])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getConssForVar, __pyx_t_2) < (0)) __PYX_ERR(9, 286, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":296
 *         return self.thisptr.getConssForVar(varIndex)
 * 
 *     def getOpenPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """determines all partialdecs from current (open) partialdec data structure
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_69getOpenPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getOpenPartialdecs, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[249])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getOpenPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 296, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":305
 *         return [PartialDecomposition.create(r) for r in result]
 * 
 *     def getFinishedPartialdec(self, int partialdecindex):             # <<<<<<<<<<<<<<
 *         """returns a partialdec from finished partialdec data structure
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_71getFinishedPartialdec, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getFinishedPartialde, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[250])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getFinishedPartialdec, __pyx_t_2) < (0)) __PYX_ERR(9, 305, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":316
 *         return PartialDecomposition.create(result)
 * 
 *     def getFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """gets all finished partialdecs
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_73getFinishedPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getFinishedPartialde_2, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[251])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getFinishedPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 316, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":325
 *         return [PartialDecomposition.create(r) for r in result]
 * 
 *     def getIndexForCons(self, Constraint cons):             # <<<<<<<<<<<<<<
 *         """returns the constraint index related to a constraint
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_75getIndexForCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getIndexForCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[252])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getIndexForCons, __pyx_t_2) < (0)) __PYX_ERR(9, 325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":335
 *         return self.thisptr.getIndexForCons(cons.scip_cons)
 * 
 *     def getIndexForVar(self, Variable var):             # <<<<<<<<<<<<<<
 *         """returns the variable index related to a variable
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_77getIndexForVar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getIndexForVar, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[253])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getIndexForVar, __pyx_t_2) < (0)) __PYX_ERR(9, 335, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":345
 *         return self.thisptr.getIndexForVar(var.scip_var)
 * 
 *     def getNAncestorPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns size of ancestor partialdec data structure
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_79getNAncestorPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNAncestorPartiald, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[254])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNAncestorPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 345, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":353
 *         return self.thisptr.getNAncestorPartialdecs()
 * 
 *     def getNConsPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns number of different constraint partitions
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_81getNConsPartitions, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNConsPartitions, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[255])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNConsPartitions, __pyx_t_2) < (0)) __PYX_ERR(9, 353, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":361
 *         return self.thisptr.getNConsPartitions()
 * 
 *     def getNConss(self):             # <<<<<<<<<<<<<<
 *         """returns the number of variables considered in the detprobdata
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_83getNConss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNConss, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[256])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNConss, __pyx_t_2) < (0)) __PYX_ERR(9, 361, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":369
 *         return self.thisptr.getNConss()
 * 
 *     def getNConssForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints for a given constraint index
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_85getNConssForCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNConssForCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[257])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNConssForCons, __pyx_t_2) < (0)) __PYX_ERR(9, 369, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":379
 *         return self.thisptr.getNConssForCons(consIndex)
 * 
 *     def getNConssForVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of constraints for a given variable index where the variable has a nonzero entry in
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_87getNConssForVar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNConssForVar, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[258])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNConssForVar, __pyx_t_2) < (0)) __PYX_ERR(9, 379, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":389
 *         return self.thisptr.getNConssForVar(varIndex)
 * 
 *     def getNOpenPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns size of current (open) partialdec data structure
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_89getNOpenPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNOpenPartialdecs, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[259])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNOpenPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 389, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":397
 *         return self.thisptr.getNOpenPartialdecs()
 * 
 *     def getNFinishedPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """size of finished partialdec data structure
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_91getNFinishedPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNFinishedPartiald, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[260])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNFinishedPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 397, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":405
 *         return self.thisptr.getNFinishedPartialdecs()
 * 
 *     def getNPartialdecs(self):             # <<<<<<<<<<<<<<
 *         """returns the number of stored partialdecs
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_93getNPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNPartialdecs, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[261])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNPartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 405, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":413
 *         return self.thisptr.getNPartialdecs()
 * 
 *     def getNNonzeros(self):             # <<<<<<<<<<<<<<
 *         """returns the number of nonzero entries in the coefficient matrix
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_95getNNonzeros, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNNonzeros, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[262])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNNonzeros, __pyx_t_2) < (0)) __PYX_ERR(9, 413, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":421
 *         return self.thisptr.getNNonzeros()
 * 
 *     def getNVarPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns number of different variable partitions
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_97getNVarPartitions, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNVarPartitions, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[263])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNVarPartitions, __pyx_t_2) < (0)) __PYX_ERR(9, 421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":429
 *         return self.thisptr.getNVarPartitions()
 * 
 *     def getNVars(self):             # <<<<<<<<<<<<<<
 *         """return the number of variables considered in the detprobdata
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_99getNVars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNVars, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[264])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNVars, __pyx_t_2) < (0)) __PYX_ERR(9, 429, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":437
 *         return self.thisptr.getNVars()
 * 
 *     def getNVarsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the number of variables for a given constraint
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_101getNVarsForCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getNVarsForCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[265])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getNVarsForCons, __pyx_t_2) < (0)) __PYX_ERR(9, 437, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":447
 *         return self.thisptr.getNVarsForCons(consIndex)
 * 
 *     def getOrigVarsFixedZero(self):             # <<<<<<<<<<<<<<
 *         """returns list of all original variables that are fixed to zero
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_103getOrigVarsFixedZero, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getOrigVarsFixedZero, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[266])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getOrigVarsFixedZero, __pyx_t_2) < (0)) __PYX_ERR(9, 447, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":456
 *         return [Variable.create(v) for v in result]
 * 
 *     def getRelevantConss(self):             # <<<<<<<<<<<<<<
 *         """returns list of all constraints that are not marked as deleted or obsolete
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_105getRelevantConss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getRelevantConss, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[267])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 456, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getRelevantConss, __pyx_t_2) < (0)) __PYX_ERR(9, 456, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":465
 *         return [Constraint.create(c) for c in result]
 * 
 *     def getRelevantVars(self):             # <<<<<<<<<<<<<<
 *         """returns list of all problem variables that are not fixed to 0
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_107getRelevantVars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getRelevantVars, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[268])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 465, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getRelevantVars, __pyx_t_2) < (0)) __PYX_ERR(9, 465, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":483
 * #        return SCIPModel.create(gcg)
 * 
 *     def getSortedCandidatesNBlocks(self, object candidates):             # <<<<<<<<<<<<<<
 *         """gets the candidates for number of blocks added by the user followed by the found ones sorted in descending order by how often a candidate was proposed
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_109getSortedCandidatesNBlocks, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getSortedCandidatesN, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[269])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getSortedCandidatesNBlocks, __pyx_t_2) < (0)) __PYX_ERR(9, 483, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":492
 *         self.thisptr.getSortedCandidatesNBlocks(cpp_candidates)
 * 
 *     def getVal(self, row, col):             # <<<<<<<<<<<<<<
 *         """returns a coefficient from the coefficient matrix
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_111getVal, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getVal, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[270])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getVal, __pyx_t_2) < (0)) __PYX_ERR(9, 492, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":504
 *         return self.thisptr.getVal(row, col)
 * 
 *     def getValsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the nonzero coefficients of the coefficient matrix for a constraint
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_113getValsForCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getValsForCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[271])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 504, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getValsForCons, __pyx_t_2) < (0)) __PYX_ERR(9, 504, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":516
 *         return self.thisptr.getValsForCons(consIndex)
 * 
 *     def getVarPartition(self, partitionIndex):             # <<<<<<<<<<<<<<
 *         """returns variable partition with given index
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_115getVarPartition, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getVarPartition, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[272])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getVarPartition, __pyx_t_2) < (0)) __PYX_ERR(9, 516, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":527
 *         return VarPart.create(result, self)
 * 
 *     def getVarPartitions(self):             # <<<<<<<<<<<<<<
 *         """returns list to stored variable partitions
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_117getVarPartitions, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getVarPartitions, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[273])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 527, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getVarPartitions, __pyx_t_2) < (0)) __PYX_ERR(9, 527, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":536
 *         return [VarPart.create(r, self) for r in result]
 * 
 *     def getVar(self, varIndex):             # <<<<<<<<<<<<<<
 *         """returns variable related to a variable index
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_119getVar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getVar, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[274])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getVar, __pyx_t_2) < (0)) __PYX_ERR(9, 536, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":544
 *         return Variable.create(self.thisptr.getVar(varIndex))
 * 
 *     def getVarsForCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns the variable indices of the coefficient matrix for a constraint
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_121getVarsForCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_getVarsForCons, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[275])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_getVarsForCons, __pyx_t_2) < (0)) __PYX_ERR(9, 544, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":554
 *         return self.thisptr.getVarsForCons(consIndex)
 * 
 *     def isConsCardinalityCons(self, consIndex):             # <<<<<<<<<<<<<<
 *         """returns whether a constraint is a cardinality constraint, i.e. of the .. math::`\\sum_{i} x_i = b`
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_123isConsCardinalityCons, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_isConsCardinalityCon, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[276])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_isConsCardinalityCons, __pyx_t_2) < (0)) __PYX_ERR(9, 554, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":564
 *         return self.thisptr.isConsCardinalityCons(consIndex)
 * 
 *     def isConssAdjInitialized(self):             # <<<<<<<<<<<<<<
 *         """determines whether or not the constraint-constraint adjacency data structure is initilized
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_125isConssAdjInitialized, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_isConssAdjInitialize, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[277])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_isConssAdjInitialized, __pyx_t_2) < (0)) __PYX_ERR(9, 564, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":572
 *         return self.thisptr.isConssAdjInitialized()
 * 
 *     def isConsSetpp(self, consIndex):             # <<<<<<<<<<<<<<
 *         """is cons with specified indec partitioning, or packing covering constraint?
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_127isConsSetpp, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_isConsSetpp, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[278])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 572, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_isConsSetpp, __pyx_t_2) < (0)) __PYX_ERR(9, 572, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":582
 *         return self.thisptr.isConsSetpp(consIndex)
 * 
 *     def isConsSetppc(self, consIndex):             # <<<<<<<<<<<<<<
 *         """is cons with specified index partitioning packing, or covering constraint?
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_129isConsSetppc, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_isConsSetppc, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[279])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_isConsSetppc, __pyx_t_2) < (0)) __PYX_ERR(9, 582, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":592
 *         return self.thisptr.isConsSetppc(consIndex)
 * 
 *     def isPartialdecDuplicateofFinished(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """checks if partialdec is a duplicate of an existing finished partialdec
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_131isPartialdecDuplicateofFinished, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_isPartialdecDuplicat, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[280])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_isPartialdecDuplicateofFinished, __pyx_t_2) < (0)) __PYX_ERR(9, 592, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":603
 *         return self.thisptr.isPartialdecDuplicateofFinished(cpp_partialdec)
 * 
 *     def isAssignedToOrigProb(self):             # <<<<<<<<<<<<<<
 *         """returns True if the matrix structure corresponds to the presolved problem
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_133isAssignedToOrigProb, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_isAssignedToOrigProb, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[281])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_isAssignedToOrigProb, __pyx_t_2) < (0)) __PYX_ERR(9, 603, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":611
 *         return self.thisptr.isAssignedToOrigProb()
 * 
 *     def partialdecIsNoDuplicateOfPartialdecs(self, PartialDecomposition comppartialdec, object partialdecs, sort):             # <<<<<<<<<<<<<<
 *         """check if partialdec is a duplicate of any given partialdecs
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_135partialdecIsNoDuplicateOfPartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_partialdecIsNoDuplic, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[282])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_partialdecIsNoDuplicateOfPartial, __pyx_t_2) < (0)) __PYX_ERR(9, 611, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":632
 *         return self.thisptr.partialdecIsNoDuplicateOfPartialdecs(cpp_comppartialdec, cpp_partialdecs, sort)
 * 
 *     def sortFinishedForScore(self):             # <<<<<<<<<<<<<<
 *         """sorts partialdecs in finished partialdecs data structure according to the current scoretype
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_137sortFinishedForScore, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_sortFinishedForScore, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[283])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_sortFinishedForScore, __pyx_t_2) < (0)) __PYX_ERR(9, 632, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/detprobdata.pxi":637
 *         self.thisptr.sortFinishedForScore()
 * 
 *     def translatePartialdecs(self, DetProbData otherdata, object otherpartialdecs, translateSymmetry=True):             # <<<<<<<<<<<<<<
 *         """translates partialdecs if the index structure of the problem has changed, e.g. due to presolving
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_139translatePartialdecs, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData_translatePartialdecs, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[284])); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[7]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_DetProbData, __pyx_mstate_global->__pyx_n_u_translatePartialdecs, __pyx_t_2) < (0)) __PYX_ERR(9, 637, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.thisptr cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_141__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[285])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.thisptr cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.thisptr cannot be converted to a Python object for pickling"
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11DetProbData_143__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DetProbData___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[286])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/consclassifier.pxi":6
 *     cdef public str name
 * 
 *     def freeConsClassifier(self):             # <<<<<<<<<<<<<<
 *         '''calls destructor and frees memory of constraint classifier'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_14ConsClassifier_1freeConsClassifier, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsClassifier_freeConsClassifie, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[287])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier, __pyx_mstate_global->__pyx_n_u_freeConsClassifier, __pyx_t_2) < (0)) __PYX_ERR(1, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/consclassifier.pxi":10
 *         pass
 * 
 *     def classify(self, conss, partition):             # <<<<<<<<<<<<<<
 *         pass
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_14ConsClassifier_3classify, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsClassifier_classify, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[288])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier, __pyx_mstate_global->__pyx_n_u_classify, __pyx_t_2) < (0)) __PYX_ERR(1, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_14ConsClassifier_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsClassifier___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[289])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_ConsClassifier__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_14ConsClassifier_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ConsClassifier___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[290])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_ConsClassifier, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/varclassifier.pxi":6
 *     cdef public str name
 * 
 *     def freeVarClassifier(self):             # <<<<<<<<<<<<<<
 *         '''calls destructor and frees memory of variable classifier'''
 *         pass
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13VarClassifier_1freeVarClassifier, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarClassifier_freeVarClassifier, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[291])); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarClassifier, __pyx_mstate_global->__pyx_n_u_freeVarClassifier, __pyx_t_2) < (0)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/pygcgopt/varclassifier.pxi":10
 *         pass
 * 
 *     def classify(self, vars, partition):             # <<<<<<<<<<<<<<
 *         return {}
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13VarClassifier_3classify, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarClassifier_classify, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[292])); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarClassifier, __pyx_mstate_global->__pyx_n_u_classify, __pyx_t_2) < (0)) __PYX_ERR(10, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13VarClassifier_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarClassifier___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[293])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarClassifier, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_VarClassifier, (type(self), 0x48f811e, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_VarClassifier__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13VarClassifier_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_VarClassifier___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[294])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_VarClassifier, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":50
 * 
 * cdef class PY_GCG_PRICINGSTATUS:
 *     UNKNOWN       = GCG_PRICINGSTATUS_UNKNOWN             # <<<<<<<<<<<<<<
 *     NOTAPPLICABLE = GCG_PRICINGSTATUS_NOTAPPLICABLE
 *     SOLVERLIMIT   = GCG_PRICINGSTATUS_SOLVERLIMIT
*/
  __pyx_t_2 = __Pyx_PyLong_From_GCG_PRICINGSTATUS(GCG_PRICINGSTATUS_UNKNOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, __pyx_mstate_global->__pyx_n_u_UNKNOWN, __pyx_t_2) < (0)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":51
 * cdef class PY_GCG_PRICINGSTATUS:
 *     UNKNOWN       = GCG_PRICINGSTATUS_UNKNOWN
 *     NOTAPPLICABLE = GCG_PRICINGSTATUS_NOTAPPLICABLE             # <<<<<<<<<<<<<<
 *     SOLVERLIMIT   = GCG_PRICINGSTATUS_SOLVERLIMIT
 *     OPTIMAL       = GCG_PRICINGSTATUS_OPTIMAL
*/
  __pyx_t_2 = __Pyx_PyLong_From_GCG_PRICINGSTATUS(GCG_PRICINGSTATUS_NOTAPPLICABLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, __pyx_mstate_global->__pyx_n_u_NOTAPPLICABLE, __pyx_t_2) < (0)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":52
 *     UNKNOWN       = GCG_PRICINGSTATUS_UNKNOWN
 *     NOTAPPLICABLE = GCG_PRICINGSTATUS_NOTAPPLICABLE
 *     SOLVERLIMIT   = GCG_PRICINGSTATUS_SOLVERLIMIT             # <<<<<<<<<<<<<<
 *     OPTIMAL       = GCG_PRICINGSTATUS_OPTIMAL
 *     INFEASIBLE    = GCG_PRICINGSTATUS_INFEASIBLE
*/
  __pyx_t_2 = __Pyx_PyLong_From_GCG_PRICINGSTATUS(GCG_PRICINGSTATUS_SOLVERLIMIT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, __pyx_mstate_global->__pyx_n_u_SOLVERLIMIT, __pyx_t_2) < (0)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":53
 *     NOTAPPLICABLE = GCG_PRICINGSTATUS_NOTAPPLICABLE
 *     SOLVERLIMIT   = GCG_PRICINGSTATUS_SOLVERLIMIT
 *     OPTIMAL       = GCG_PRICINGSTATUS_OPTIMAL             # <<<<<<<<<<<<<<
 *     INFEASIBLE    = GCG_PRICINGSTATUS_INFEASIBLE
 *     UNBOUNDED     = GCG_PRICINGSTATUS_UNBOUNDED
*/
  __pyx_t_2 = __Pyx_PyLong_From_GCG_PRICINGSTATUS(GCG_PRICINGSTATUS_OPTIMAL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, __pyx_mstate_global->__pyx_n_u_OPTIMAL, __pyx_t_2) < (0)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":54
 *     SOLVERLIMIT   = GCG_PRICINGSTATUS_SOLVERLIMIT
 *     OPTIMAL       = GCG_PRICINGSTATUS_OPTIMAL
 *     INFEASIBLE    = GCG_PRICINGSTATUS_INFEASIBLE             # <<<<<<<<<<<<<<
 *     UNBOUNDED     = GCG_PRICINGSTATUS_UNBOUNDED
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_GCG_PRICINGSTATUS(GCG_PRICINGSTATUS_INFEASIBLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, __pyx_mstate_global->__pyx_n_u_INFEASIBLE, __pyx_t_2) < (0)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":55
 *     OPTIMAL       = GCG_PRICINGSTATUS_OPTIMAL
 *     INFEASIBLE    = GCG_PRICINGSTATUS_INFEASIBLE
 *     UNBOUNDED     = GCG_PRICINGSTATUS_UNBOUNDED             # <<<<<<<<<<<<<<
 * 
 * cdef class PY_USERGIVEN:
*/
  __pyx_t_2 = __Pyx_PyLong_From_GCG_PRICINGSTATUS(GCG_PRICINGSTATUS_UNBOUNDED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, __pyx_mstate_global->__pyx_n_u_UNBOUNDED, __pyx_t_2) < (0)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_1__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PY_GCG_PRICINGSTATUS___reduce_cy, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[295])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PY_GCG_PRICINGSTATUS, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_GCG_PRICINGSTATUS__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_20PY_GCG_PRICINGSTATUS_3__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PY_GCG_PRICINGSTATUS___setstate, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[296])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_GCG_PRICINGSTATUS, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":58
 * 
 * cdef class PY_USERGIVEN:
 *     PY_NOT                    = NOT             # <<<<<<<<<<<<<<
 *     PY_PARTIAL                = PARTIAL
 *     PY_COMPLETE               = COMPLETE
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_USERGIVEN(gcg::NOT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN, __pyx_mstate_global->__pyx_n_u_PY_NOT, __pyx_t_2) < (0)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":59
 * cdef class PY_USERGIVEN:
 *     PY_NOT                    = NOT
 *     PY_PARTIAL                = PARTIAL             # <<<<<<<<<<<<<<
 *     PY_COMPLETE               = COMPLETE
 *     PY_COMPLETED_CONSTOMASTER = COMPLETED_CONSTOMASTER
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_USERGIVEN(gcg::PARTIAL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN, __pyx_mstate_global->__pyx_n_u_PY_PARTIAL, __pyx_t_2) < (0)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":60
 *     PY_NOT                    = NOT
 *     PY_PARTIAL                = PARTIAL
 *     PY_COMPLETE               = COMPLETE             # <<<<<<<<<<<<<<
 *     PY_COMPLETED_CONSTOMASTER = COMPLETED_CONSTOMASTER
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_USERGIVEN(gcg::COMPLETE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN, __pyx_mstate_global->__pyx_n_u_PY_COMPLETE, __pyx_t_2) < (0)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":61
 *     PY_PARTIAL                = PARTIAL
 *     PY_COMPLETE               = COMPLETE
 *     PY_COMPLETED_CONSTOMASTER = COMPLETED_CONSTOMASTER             # <<<<<<<<<<<<<<
 * 
 * cdef class PY_VAR_DECOMPINFO:
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_USERGIVEN(gcg::COMPLETED_CONSTOMASTER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN, __pyx_mstate_global->__pyx_n_u_PY_COMPLETED_CONSTOMASTER, __pyx_t_2) < (0)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_12PY_USERGIVEN_1__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PY_USERGIVEN___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[297])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PY_USERGIVEN, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_USERGIVEN__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_12PY_USERGIVEN_3__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PY_USERGIVEN___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[298])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_USERGIVEN, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":64
 * 
 * cdef class PY_VAR_DECOMPINFO:
 *     PY_ALL     = ALL             # <<<<<<<<<<<<<<
 *     PY_LINKING = LINKING
 *     PY_MASTER  = MASTER
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_VAR_DECOMPINFO(gcg::ALL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_PY_ALL, __pyx_t_2) < (0)) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":65
 * cdef class PY_VAR_DECOMPINFO:
 *     PY_ALL     = ALL
 *     PY_LINKING = LINKING             # <<<<<<<<<<<<<<
 *     PY_MASTER  = MASTER
 *     PY_BLOCK   = BLOCK
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_VAR_DECOMPINFO(gcg::LINKING); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_PY_LINKING, __pyx_t_2) < (0)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":66
 *     PY_ALL     = ALL
 *     PY_LINKING = LINKING
 *     PY_MASTER  = MASTER             # <<<<<<<<<<<<<<
 *     PY_BLOCK   = BLOCK
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_VAR_DECOMPINFO(gcg::MASTER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_PY_MASTER, __pyx_t_2) < (0)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":67
 *     PY_LINKING = LINKING
 *     PY_MASTER  = MASTER
 *     PY_BLOCK   = BLOCK             # <<<<<<<<<<<<<<
 * 
 * cdef class PY_CONS_DECOMPINFO:
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_VAR_DECOMPINFO(gcg::BLOCK); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_PY_BLOCK, __pyx_t_2) < (0)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_1__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PY_VAR_DECOMPINFO___reduce_cytho, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[299])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PY_VAR_DECOMPINFO, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_VAR_DECOMPINFO__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_17PY_VAR_DECOMPINFO_3__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PY_VAR_DECOMPINFO___setstate_cyt, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[300])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_VAR_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":70
 * 
 * cdef class PY_CONS_DECOMPINFO:
 *     PY_BOTH         = BOTH             # <<<<<<<<<<<<<<
 *     PY_ONLY_MASTER  = ONLY_MASTER
 *     PY_ONLY_PRICING = ONLY_PRICING
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_CONS_DECOMPINFO(gcg::BOTH); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_PY_BOTH, __pyx_t_2) < (0)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":71
 * cdef class PY_CONS_DECOMPINFO:
 *     PY_BOTH         = BOTH
 *     PY_ONLY_MASTER  = ONLY_MASTER             # <<<<<<<<<<<<<<
 *     PY_ONLY_PRICING = ONLY_PRICING
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_CONS_DECOMPINFO(gcg::ONLY_MASTER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_PY_ONLY_MASTER, __pyx_t_2) < (0)) __PYX_ERR(0, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":72
 *     PY_BOTH         = BOTH
 *     PY_ONLY_MASTER  = ONLY_MASTER
 *     PY_ONLY_PRICING = ONLY_PRICING             # <<<<<<<<<<<<<<
 * 
 * cdef class Model(SCIPModel):
*/
  __pyx_t_2 = __Pyx_PyLong_From_gcg_3a__3a_CONS_DECOMPINFO(gcg::ONLY_PRICING); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_PY_ONLY_PRICING, __pyx_t_2) < (0)) __PYX_ERR(0, 72, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_1__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PY_CONS_DECOMPINFO___reduce_cyth, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[301])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_PY_CONS_DECOMPINFO, (type(self), 0xe3b0c44, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_PY_CONS_DECOMPINFO__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_18PY_CONS_DECOMPINFO_3__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PY_CONS_DECOMPINFO___setstate_cy, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[302])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_PY_CONS_DECOMPINFO, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(2, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":124
 *             self._bestSol = <Solution> sourceModel._bestSol
 * 
 *     def includeDefaultPlugins(self):             # <<<<<<<<<<<<<<
 *         """Includes all default plug-ins of GCG into SCIP
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_3includeDefaultPlugins, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_includeDefaultPlugins, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[303])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_includeDefaultPlugins, __pyx_t_2) < (0)) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":131
 *         PY_SCIP_CALL(GCGincludeGcgPlugins(self._gcg))
 * 
 *     def addVar(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         pyVar = <Variable>super().addVar(*args, **kwargs)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_5addVar, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_addVar, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[304])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_addVar, __pyx_t_2) < (0)) __PYX_ERR(0, 131, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":138
 *         return pyVar
 * 
 *     def presolve(self):             # <<<<<<<<<<<<<<
 *         """Presolve the problem."""
 *         PY_SCIP_CALL(GCGpresolve(self._gcg))
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_7presolve, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_presolve, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[305])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_presolve, __pyx_t_2) < (0)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":142
 *         PY_SCIP_CALL(GCGpresolve(self._gcg))
 * 
 *     def detect(self):             # <<<<<<<<<<<<<<
 *         """Detect the problem.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_9detect, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_detect, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[306])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_detect, __pyx_t_2) < (0)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":152
 *         PY_SCIP_CALL(GCGdetect(self._gcg))
 * 
 *     def printStatistics(self):             # <<<<<<<<<<<<<<
 *         """Print solving statistics of GCG to stdout."""
 *         PY_SCIP_CALL(GCGprintStatistics(self._gcg, NULL))
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_11printStatistics, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_printStatistics, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[307])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_printStatistics, __pyx_t_2) < (0)) __PYX_ERR(0, 152, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":156
 *         PY_SCIP_CALL(GCGprintStatistics(self._gcg, NULL))
 * 
 *     def printVersion(self):             # <<<<<<<<<<<<<<
 *         """Print version, copyright information and compile mode of GCG and SCIP"""
 *         GCGprintVersion(self._gcg, NULL)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_13printVersion, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_printVersion, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[308])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_printVersion, __pyx_t_2) < (0)) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":162
 *         super().printVersion()
 * 
 *     def optimize(self):             # <<<<<<<<<<<<<<
 *         """Optimize the problem.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_15optimize, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_optimize, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[309])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_optimize, __pyx_t_2) < (0)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":170
 *         self._bestSol = Solution.create(self._scip, SCIPgetBestSol(self._scip))
 * 
 *     def getDualbound(self):             # <<<<<<<<<<<<<<
 *         """Retrieve the best dual bound.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_17getDualbound, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_getDualbound, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[310])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_getDualbound, __pyx_t_2) < (0)) __PYX_ERR(0, 170, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":182
 *         return GCGgetDualbound(self._gcg)
 * 
 *     def getDetprobdataOrig(self):             # <<<<<<<<<<<<<<
 *         """returns the detprobdata for unpresolved problem
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_19getDetprobdataOrig, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_getDetprobdataOrig, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[311])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_getDetprobdataOrig, __pyx_t_2) < (0)) __PYX_ERR(0, 182, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":188
 *         return DetProbData.create(detprobdata)
 * 
 *     def getDetprobdataPresolved(self):             # <<<<<<<<<<<<<<
 *         """returns the detprobdata for presolved problem
 *         """
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_21getDetprobdataPresolved, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_getDetprobdataPresolved, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[312])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_getDetprobdataPresolved, __pyx_t_2) < (0)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":194
 *         return DetProbData.create(detprobdata)
 * 
 *     def listDecompositions(self):             # <<<<<<<<<<<<<<
 *         """Lists all finnished decompositions found during the detection loop or provided by the user."""
 *         cdef int npartialdecs = GCGconshdlrDecompGetNPartialdecs(self._gcg)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_23listDecompositions, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_listDecompositions, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[313])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_listDecompositions, __pyx_t_2) < (0)) __PYX_ERR(0, 194, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":207
 *         return decomps
 * 
 *     def getPartDecompFromID(self, id):             # <<<<<<<<<<<<<<
 *         """returns a partial decomposition regarding to the given partialdecomp id
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_25getPartDecompFromID, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_getPartDecompFromID, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[314])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_getPartDecompFromID, __pyx_t_2) < (0)) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":217
 *         return pd
 * 
 *     def addDecompositionFromConss(self, master_conss, *block_conss):             # <<<<<<<<<<<<<<
 *         """Adds a user specified decomposition to GCG based on constraints.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_27addDecompositionFromConss, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_addDecompositionFromConss, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[315])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_addDecompositionFromConss, __pyx_t_2) < (0)) __PYX_ERR(0, 217, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":237
 *         return pd
 * 
 *     def addPreexistingPartialDecomposition(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         self.addDecomposition(partialdec)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_29addPreexistingPartialDecomposition, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_addPreexistingPartialDecom, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[316])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_addPreexistingPartialDecompositi, __pyx_t_2) < (0)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":240
 *         self.addDecomposition(partialdec)
 * 
 *     def addDecomposition(self, PartialDecomposition partialdec):             # <<<<<<<<<<<<<<
 *         """Adds a user specified decomposition to GCG.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_31addDecomposition, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_addDecomposition, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[317])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_addDecomposition, __pyx_t_2) < (0)) __PYX_ERR(0, 240, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":251
 *         GCGconshdlrDecompAddPreexisitingPartialDec(self._gcg, partialdec.thisptr)
 * 
 *     def createDecomposition(self):             # <<<<<<<<<<<<<<
 *         """Creates a new empty PartialDecomposition.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_33createDecomposition, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_createDecomposition, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[318])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_createDecomposition, __pyx_t_2) < (0)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":268
 *         return PartialDecomposition.create(decomp)
 * 
 *     def includePricingSolver(self, PricingSolver pricingSolver, solvername, desc, priority=0, heuristicEnabled=False, exactEnabled=False):             # <<<<<<<<<<<<<<
 *         c_solvername = str_conversion(solvername)
 *         c_desc = str_conversion(desc)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_35includePricingSolver, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_includePricingSolver, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[319])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[8]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_includePricingSolver, __pyx_t_2) < (0)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":281
 *         Py_INCREF(pricingSolver)
 * 
 *     def listPricingSolvers(self):             # <<<<<<<<<<<<<<
 *         cdef int n_pricing_solvers = GCGpricerGetNSolvers(self._gcg)
 *         cdef GCG_SOLVER** pricing_solvers = GCGpricerGetSolvers(self._gcg)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_37listPricingSolvers, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_listPricingSolvers, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[320])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_listPricingSolvers, __pyx_t_2) < (0)) __PYX_ERR(0, 281, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":287
 *         return [GCGsolverGetName(pricing_solvers[i]).decode('utf-8') for i in range(n_pricing_solvers)]
 * 
 *     def setPricingSolverEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables exact and heuristic solving for the specified pricing solver.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_39setPricingSolverEnabled, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_setPricingSolverEnabled, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[321])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[7]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_setPricingSolverEnabled, __pyx_t_2) < (0)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":301
 *         self.setPricingSolverHeuristicEnabled(pricing_solver_name, is_enabled)
 * 
 *     def setPricingSolverExactEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables exact solving for the specified pricing solver.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_41setPricingSolverExactEnabled, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_setPricingSolverExactEnabl, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[322])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[7]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_setPricingSolverExactEnabled, __pyx_t_2) < (0)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":313
 *         self.setBoolParam("pricingsolver/{}/exactenabled".format(pricing_solver_name), is_enabled)
 * 
 *     def setPricingSolverHeuristicEnabled(self, pricing_solver_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables heuristic solving for the specified pricing solver.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_43setPricingSolverHeuristicEnabled, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_setPricingSolverHeuristicE, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[323])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[7]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_setPricingSolverHeuristicEnabled, __pyx_t_2) < (0)) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":325
 *         self.setBoolParam("pricingsolver/{}/heurenabled".format(pricing_solver_name), is_enabled)
 * 
 *     def includeConsClassifier(self, ConsClassifier consclassifier, consclassifiername, desc, priority=0, enabled=True):             # <<<<<<<<<<<<<<
 *         """includes a constraint classifier
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_45includeConsClassifier, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_includeConsClassifier, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[324])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[9]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_includeConsClassifier, __pyx_t_2) < (0)) __PYX_ERR(0, 325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":342
 *         Py_INCREF(consclassifier)
 * 
 *     def getNConsClassifiers(self):             # <<<<<<<<<<<<<<
 *         """returns the number of all constraint classifiers
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_47getNConsClassifiers, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_getNConsClassifiers, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[325])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_getNConsClassifiers, __pyx_t_2) < (0)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":351
 *         return n_consclassifiers
 * 
 *     def listConsClassifiers(self):             # <<<<<<<<<<<<<<
 *         """lists all constraint classifiers that are currently included
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_49listConsClassifiers, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_listConsClassifiers, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[326])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_listConsClassifiers, __pyx_t_2) < (0)) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":361
 *         return [GCGconsClassifierGetName(consclassifiers[i]).decode('utf-8') for i in range(n_consclassifiers)]
 * 
 *     def includeVarClassifier(self, VarClassifier varclassifier, varclassifiername, desc, priority=0, enabled=True):             # <<<<<<<<<<<<<<
 *         """includes a variable classifier
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_51includeVarClassifier, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_includeVarClassifier, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[327])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[9]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_includeVarClassifier, __pyx_t_2) < (0)) __PYX_ERR(0, 361, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":378
 *         Py_INCREF(varclassifier)
 * 
 *     def getNVarClassifiers(self):             # <<<<<<<<<<<<<<
 *         """returns the number of all variable classifiers
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_53getNVarClassifiers, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_getNVarClassifiers, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[328])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_getNVarClassifiers, __pyx_t_2) < (0)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":387
 *         return n_varclassifiers
 * 
 *     def listVarClassifiers(self):             # <<<<<<<<<<<<<<
 *         """lists all variable classifiers that are currently included
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_55listVarClassifiers, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_listVarClassifiers, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[329])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_listVarClassifiers, __pyx_t_2) < (0)) __PYX_ERR(0, 387, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":397
 *         return [GCGvarClassifierGetName(varclassifiers[i]).decode('utf-8') for i in range(n_varclassifiers)]
 * 
 *     def setVarClassifierEnabled(self, varclassifier_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """enables or disables a variable classifier
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_57setVarClassifierEnabled, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_setVarClassifierEnabled, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[330])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[7]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_setVarClassifierEnabled, __pyx_t_2) < (0)) __PYX_ERR(0, 397, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pygcgopt/gcg.pyx":408
 *         self.setBoolParam("detection/classification/varclassifier/{}/enabled".format(varclassifier_name), is_enabled)
 * 
 *     def includeDetector(self, Detector detector, detectorname, decchar, desc, freqcallround=1, maxcallround=INT_MAX, mincallround=0, freqcallroundoriginal=1, maxcallroundoriginal=INT_MAX, mincallroundoriginal=0, priority=0, enabled=True, enabledfinishing=False, enabledpostprocessing=False, skip=False, usefulrecall=False):             # <<<<<<<<<<<<<<
 *         """includes a detector
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_int(INT_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate_global->__pyx_k__4 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyLong_From_int(INT_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate_global->__pyx_k__5 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyLong_From_int(INT_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyLong_From_int(INT_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_Pack(12, __pyx_mstate_global->__pyx_int_1, __pyx_t_2, __pyx_mstate_global->__pyx_int_0, __pyx_mstate_global->__pyx_int_1, __pyx_t_4, __pyx_mstate_global->__pyx_int_0, __pyx_mstate_global->__pyx_int_0, Py_True, Py_False, Py_False, Py_False, Py_False); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_59includeDetector, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_includeDetector, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[331])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_includeDetector, __pyx_t_4) < (0)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":434
 *         Py_INCREF(detector)
 * 
 *     def includeScore(self, Score score, scorename, shortname, desc):             # <<<<<<<<<<<<<<
 *         """includes a score
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_61includeScore, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_includeScore, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[332])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_includeScore, __pyx_t_4) < (0)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":453
 *         Py_INCREF(score)
 * 
 *     def listDetectors(self):             # <<<<<<<<<<<<<<
 *         """Lists all detectors that are currently included
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_63listDetectors, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_listDetectors, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[333])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 453, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_listDetectors, __pyx_t_4) < (0)) __PYX_ERR(0, 453, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":469
 *         return [GCGdetectorGetName(detectors[i]).decode('utf-8') for i in range(n_detectors)]
 * 
 *     def listScores(self):             # <<<<<<<<<<<<<<
 *         """Lists all scores that are currently included
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_65listScores, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_listScores, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[334])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_listScores, __pyx_t_4) < (0)) __PYX_ERR(0, 469, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":479
 *         return [GCGscoreGetName(scores[i]).decode('utf-8') for i in range(n_scores)]
 * 
 *     def setDetectorEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for detecting partial decompositions.
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_67setDetectorEnabled, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_setDetectorEnabled, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[335])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[7]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_setDetectorEnabled, __pyx_t_4) < (0)) __PYX_ERR(0, 479, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":494
 *         self.setBoolParam("detection/detectors/{}/enabled".format(detector_name), is_enabled)
 * 
 *     def setDetectorFinishingEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for finishing partial decompositions.
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_69setDetectorFinishingEnabled, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_setDetectorFinishingEnable, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[336])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[7]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_setDetectorFinishingEnabled, __pyx_t_4) < (0)) __PYX_ERR(0, 494, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":507
 *         self.setBoolParam("detection/detectors/{}/finishingenabled".format(detector_name), is_enabled)
 * 
 *     def setDetectorPostprocessingEnabled(self, detector_name, is_enabled=True):             # <<<<<<<<<<<<<<
 *         """Enables or disables a detector for postprocessing partial decompositions.
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_71setDetectorPostprocessingEnabled, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_setDetectorPostprocessingE, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[337])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[7]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_setDetectorPostprocessingEnabled, __pyx_t_4) < (0)) __PYX_ERR(0, 507, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":520
 *         self.setBoolParam("detection/detectors/{}/postprocessingenabled".format(detector_name), is_enabled)
 * 
 *     def getMasterProb(self):             # <<<<<<<<<<<<<<
 *         """Provides access to the GCG master problem.
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_73getMasterProb, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_getMasterProb, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[338])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_getMasterProb, __pyx_t_4) < (0)) __PYX_ERR(0, 520, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":528
 *         return GCGMasterModel.create(master_prob)
 * 
 *     def setGCGSeparating(self, setting):             # <<<<<<<<<<<<<<
 *         """Sets parameter settings of all separators
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_75setGCGSeparating, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_setGCGSeparating, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[339])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 528, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_setGCGSeparating, __pyx_t_4) < (0)) __PYX_ERR(0, 528, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":536
 *         PY_SCIP_CALL(GCGsetSeparators(self._gcg, setting))
 * 
 *     def writeAllDecomps(self, directory="alldecompositions/", extension="dec", bool original=True, bool presolved=True, createDirectory=True):             # <<<<<<<<<<<<<<
 *         """Writes all decompositions to disk
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_77writeAllDecomps, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_writeAllDecomps, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[340])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[10]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_writeAllDecomps, __pyx_t_4) < (0)) __PYX_ERR(0, 536, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":549
 *         PY_SCIP_CALL(GCGwriteAllDecomps(self._gcg, c_directory, c_extension, original, presolved))
 * 
 *     def getMastervars(self, var):             # <<<<<<<<<<<<<<
 *         """Returns the master variables corresponding to the variable of original problem
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_79getMastervars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model_getMastervars, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[341])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_Model, __pyx_mstate_global->__pyx_n_u_getMastervars, __pyx_t_4) < (0)) __PYX_ERR(0, 549, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self._gcg,self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_81__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[342])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_4) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self._gcg,self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self._gcg,self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5Model_83__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Model___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[343])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_4) < (0)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":572
 *         return model
 * 
 *     def createGcgCol(self, probnr, variables, vals, bool isray, redcost):             # <<<<<<<<<<<<<<
 *         """create a gcg column
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_15GCGPricingModel_1createGcgCol, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGPricingModel_createGcgCol, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[344])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 572, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGPricingModel, __pyx_mstate_global->__pyx_n_u_createGcgCol, __pyx_t_4) < (0)) __PYX_ERR(0, 572, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_15GCGPricingModel_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGPricingModel___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[345])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_4) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_15GCGPricingModel_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGPricingModel___setstate_cytho, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[346])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_4) < (0)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":613
 *         return model
 * 
 *     def addCol(self, GCGColumn col):             # <<<<<<<<<<<<<<
 *         cdef GCG* gcg = GCGmasterGetGcg(self._scip)
 *         PY_SCIP_CALL(GCGpricerAddCol(gcg, col.gcg_col))
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_14GCGMasterModel_1addCol, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGMasterModel_addCol, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[347])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel, __pyx_mstate_global->__pyx_n_u_addCol, __pyx_t_4) < (0)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":617
 *         PY_SCIP_CALL(GCGpricerAddCol(gcg, col.gcg_col))
 * 
 *     def getOrigvars(self, var):             # <<<<<<<<<<<<<<
 *         """Returns the original variables corresponding to the variable of master problem
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_14GCGMasterModel_3getOrigvars, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGMasterModel_getOrigvars, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[348])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_8pygcgopt_3gcg_GCGMasterModel, __pyx_mstate_global->__pyx_n_u_getOrigvars, __pyx_t_4) < (0)) __PYX_ERR(0, 617, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_14GCGMasterModel_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGMasterModel___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[349])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_4) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self._iis,self._scip,self._valid cannot be converted to a Python object for pickling"
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_14GCGMasterModel_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGMasterModel___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[350])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_4) < (0)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.gcg_col cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_9GCGColumn_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGColumn___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[351])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_4) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.gcg_col cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.gcg_col cannot be converted to a Python object for pickling"
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_9GCGColumn_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GCGColumn___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[352])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_4) < (0)) __PYX_ERR(2, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Detector(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xdad04ef, 0x67e9880, 0xf7f977a, b'detectorname, model')
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_1__pyx_unpickle_Detector, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Detector, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[353])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Detector, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * cdef extern from *:             # <<<<<<<<<<<<<<
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_3__pyx_unpickle_PricingSolver, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PricingSolver, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[354])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PricingSolver, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Score(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x636e5c2, 0x16f8d05, 0xb871c0f, b'model, scorename')
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_5__pyx_unpickle_Score, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Score, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[355])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Score, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * cdef extern from *:             # <<<<<<<<<<<<<<
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_7__pyx_unpickle_ConsClassifier, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_ConsClassifier, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[356])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_ConsClassifier, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_VarClassifier(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x48f811e, 0x23d1325, 0xecd383d, b'model, name')
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_9__pyx_unpickle_VarClassifier, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_VarClassifier, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[357])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_VarClassifier, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * cdef extern from *:             # <<<<<<<<<<<<<<
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_11__pyx_unpickle_PY_GCG_PRICINGSTATUS, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_GCG_PRICINGSTA, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[358])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_GCG_PRICINGSTA, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_USERGIVEN(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_13__pyx_unpickle_PY_USERGIVEN, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_USERGIVEN, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[359])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_USERGIVEN, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * cdef extern from *:             # <<<<<<<<<<<<<<
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_15__pyx_unpickle_PY_VAR_DECOMPINFO, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_VAR_DECOMPINFO, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[360])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_VAR_DECOMPINFO, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_PY_CONS_DECOMPINFO(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xe3b0c44, 0xda39a3e, 0xd41d8cd, b'')
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8pygcgopt_3gcg_17__pyx_unpickle_PY_CONS_DECOMPINFO, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_CONS_DECOMPINF, NULL, __pyx_mstate_global->__pyx_n_u_pygcgopt_gcg, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[361])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_PY_CONS_DECOMPINF, __pyx_t_4) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pygcgopt/gcg.pyx":1
 * # distutils: language = c++             # <<<<<<<<<<<<<<
 * 
 * from pyscipopt.scip import PY_SCIP_CALL
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_4) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /*--- Wrapped vars code ---*/

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  if (__pyx_m) {
    if (__pyx_mstate->__pyx_d && stringtab_initialized) {
      __Pyx_AddTraceback("init pygcgopt.gcg", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    #if !CYTHON_USE_MODULE_STATE
    Py_CLEAR(__pyx_m);
    #else
    Py_DECREF(__pyx_m);
    if (pystate_addmodule_run) {
      PyObject *tp, *value, *tb;
      PyErr_Fetch(&tp, &value, &tb);
      PyState_RemoveModule(&__pyx_moduledef);
      PyErr_Restore(tp, value, tb);
    }
    #endif
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init pygcgopt.gcg");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  return (__pyx_m != NULL) ? 0 : -1;
  #else
  return __pyx_m;
  #endif
}
/* #### Code section: pystring_table ### */
/* #### Code section: cached_builtins ### */

static int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate) {
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_print); if (!__pyx_builtin_print) __PYX_ERR(1, 32, __pyx_L1_error)
  __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_super); if (!__pyx_builtin_super) __PYX_ERR(0, 132, __pyx_L1_error)
  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 229, __pyx_L1_error)

  /* Cached unbound methods */
  __pyx_mstate->__pyx_umethod_PyDict_Type_items.type = (PyObject*)&PyDict_Type;
  __pyx_mstate->__pyx_umethod_PyDict_Type_items.method_name = &__pyx_mstate->__pyx_n_u_items;
  __pyx_mstate->__pyx_umethod_PyDict_Type_pop.type = (PyObject*)&PyDict_Type;
  __pyx_mstate->__pyx_umethod_PyDict_Type_pop.method_name = &__pyx_mstate->__pyx_n_u_pop;
  __pyx_mstate->__pyx_umethod_PyDict_Type_values.type = (PyObject*)&PyDict_Type;
  __pyx_mstate->__pyx_umethod_PyDict_Type_values.method_name = &__pyx_mstate->__pyx_n_u_values;
  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: cached_constants ### */

static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self.detectorname is not None or self.model is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_Detector, (type(self), 0xdad04ef, None), state
*/
  __pyx_mstate_global->__pyx_tuple[0] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_kp_u_self_detectorname_is_not_None_or); if (unlikely(!__pyx_mstate_global->__pyx_tuple[0])) __PYX_ERR(2, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[0]);
  __pyx_mstate_global->__pyx_tuple[1] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_kp_u_self_model_is_not_None_or_self_s); if (unlikely(!__pyx_mstate_global->__pyx_tuple[1])) __PYX_ERR(2, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[1]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[1]);

  /* "src/pygcgopt/pricing_solver.pxi":74
 *     py_pricingprob = GCGPricingModel.create(pricingprob)
 *     result_dict = py_pricing_solver.solve(py_pricingprob, probnr, dualsolconv)
 *     lowerbound[0] = result_dict.get("lowerbound", 0)             # <<<<<<<<<<<<<<
 *     status[0] = result_dict.get("status", <GCG_PRICINGSTATUS>status[0])
 *     return SCIP_OKAY
*/
  __pyx_mstate_global->__pyx_tuple[2] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_lowerbound, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[2])) __PYX_ERR(5, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[2]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[2]);

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self.model is not None or self.scorename is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_Score, (type(self), 0x636e5c2, None), state
*/
  __pyx_mstate_global->__pyx_tuple[3] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_kp_u_self_model_is_not_None_or_self_s_2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[3])) __PYX_ERR(2, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[3]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[3]);

  /* "src/pygcgopt/decomposition.pxi":1404
 * 
 *         if format not in self._visualizations:
 *             with tempfile.TemporaryDirectory() as td:             # <<<<<<<<<<<<<<
 *                 temp_path = Path(td)
 * 
*/
  __pyx_mstate_global->__pyx_tuple[4] = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[4])) __PYX_ERR(8, 1404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[4]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[4]);

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self.model is not None or self.name is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_ConsClassifier, (type(self), 0x48f811e, None), state
*/
  __pyx_mstate_global->__pyx_tuple[5] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_kp_u_self_model_is_not_None_or_self_n); if (unlikely(!__pyx_mstate_global->__pyx_tuple[5])) __PYX_ERR(2, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[5]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[5]);
  __pyx_mstate_global->__pyx_tuple[6] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_n_u_False); if (unlikely(!__pyx_mstate_global->__pyx_tuple[6])) __PYX_ERR(2, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[6]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[6]);

  /* "src/pygcgopt/detprobdata.pxi":637
 *         self.thisptr.sortFinishedForScore()
 * 
 *     def translatePartialdecs(self, DetProbData otherdata, object otherpartialdecs, translateSymmetry=True):             # <<<<<<<<<<<<<<
 *         """translates partialdecs if the index structure of the problem has changed, e.g. due to presolving
 * 
*/
  __pyx_mstate_global->__pyx_tuple[7] = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_mstate_global->__pyx_tuple[7])) __PYX_ERR(9, 637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[7]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[7]);

  /* "pygcgopt/gcg.pyx":268
 *         return PartialDecomposition.create(decomp)
 * 
 *     def includePricingSolver(self, PricingSolver pricingSolver, solvername, desc, priority=0, heuristicEnabled=False, exactEnabled=False):             # <<<<<<<<<<<<<<
 *         c_solvername = str_conversion(solvername)
 *         c_desc = str_conversion(desc)
*/
  __pyx_mstate_global->__pyx_tuple[8] = PyTuple_Pack(3, __pyx_mstate_global->__pyx_int_0, Py_False, Py_False); if (unlikely(!__pyx_mstate_global->__pyx_tuple[8])) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[8]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[8]);

  /* "pygcgopt/gcg.pyx":325
 *         self.setBoolParam("pricingsolver/{}/heurenabled".format(pricing_solver_name), is_enabled)
 * 
 *     def includeConsClassifier(self, ConsClassifier consclassifier, consclassifiername, desc, priority=0, enabled=True):             # <<<<<<<<<<<<<<
 *         """includes a constraint classifier
 * 
*/
  __pyx_mstate_global->__pyx_tuple[9] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_int_0, Py_True); if (unlikely(!__pyx_mstate_global->__pyx_tuple[9])) __PYX_ERR(0, 325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[9]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[9]);

  /* "pygcgopt/gcg.pyx":536
 *         PY_SCIP_CALL(GCGsetSeparators(self._gcg, setting))
 * 
 *     def writeAllDecomps(self, directory="alldecompositions/", extension="dec", bool original=True, bool presolved=True, createDirectory=True):             # <<<<<<<<<<<<<<
 *         """Writes all decompositions to disk
 * 
*/
  __pyx_mstate_global->__pyx_tuple[10] = PyTuple_Pack(5, __pyx_mstate_global->__pyx_kp_u_alldecompositions, __pyx_mstate_global->__pyx_n_u_dec, Py_True, Py_True, Py_True); if (unlikely(!__pyx_mstate_global->__pyx_tuple[10])) __PYX_ERR(0, 536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[10]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[10]);
  #if CYTHON_IMMORTAL_CONSTANTS
  {
    PyObject **table = __pyx_mstate->__pyx_tuple;
    for (Py_ssize_t i=0; i<11; ++i) {
      #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
      Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
      #else
      Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
      #endif
    }
  }
  #endif
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}
/* #### Code section: init_constants ### */

static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) {
  CYTHON_UNUSED_VAR(__pyx_mstate);
  {
    const struct { const unsigned int length: 8; } index[] = {{80},{117},{54},{7},{39},{179},{31},{110},{77},{1},{1},{1},{8},{18},{11},{42},{50},{51},{38},{62},{48},{49},{30},{39},{44},{7},{6},{26},{2},{54},{9},{19},{20},{42},{15},{15},{14},{50},{13},{35},{29},{28},{94},{84},{70},{55},{64},{47},{53},{52},{64},{69},{31},{30},{25},{28},{20},{26},{31},{22},{30},{14},{26},{6},{14},{32},{34},{23},{33},{8},{26},{28},{17},{26},{22},{27},{28},{21},{27},{23},{20},{18},{27},{16},{25},{22},{27},{27},{28},{21},{11},{29},{31},{38},{28},{35},{35},{44},{31},{27},{29},{30},{36},{35},{36},{35},{26},{32},{25},{29},{33},{19},{28},{29},{27},{26},{33},{34},{27},{26},{35},{30},{21},{28},{27},{35},{24},{31},{27},{29},{20},{27},{30},{32},{28},{27},{38},{18},{26},{18},{27},{28},{26},{32},{33},{23},{24},{33},{43},{37},{48},{30},{32},{32},{27},{34},{8},{26},{28},{21},{25},{21},{21},{30},{28},{27},{24},{21},{5},{9},{27},{29},{14},{32},{34},{21},{26},{15},{33},{35},{28},{10},{8},{4},{5},{23},{25},{22},{31},{40},{12},{25},{12},{24},{29},{18},{19},{19},{25},{24},{25},{27},{27},{21},{26},{18},{26},{25},{24},{19},{24},{16},{24},{14},{14},{21},{18},{24},{33},{38},{22},{29},{34},{38},{29},{21},{13},{7},{6},{8},{7},{11},{25},{18},{36},{38},{20},{38},{40},{10},{9},{6},{14},{15},{10},{12},{12},{30},{32},{17},{35},{37},{20},{29},{38},{40},{31},{31},{34},{29},{33},{46},{41},{34},{40},{39},{40},{39},{38},{39},{38},{49},{46},{44},{65},{40},{47},{42},{37},{29},{40},{54},{37},{38},{25},{44},{38},{35},{34},{32},{44},{50},{37},{35},{36},{38},{36},{37},{36},{35},{41},{36},{34},{40},{37},{38},{41},{41},{42},{35},{39},{42},{33},{26},{35},{35},{34},{34},{31},{40},{39},{30},{38},{34},{43},{36},{36},{35},{40},{34},{34},{33},{41},{46},{29},{37},{38},{33},{32},{40},{46},{39},{45},{40},{46},{39},{45},{39},{45},{38},{44},{33},{29},{46},{33},{44},{36},{35},{36},{40},{41},{31},{37},{35},{30},{41},{36},{35},{33},{41},{48},{28},{35},{35},{37},{37},{36},{47},{36},{42},{40},{44},{42},{42},{46},{31},{45},{46},{46},{45},{45},{44},{37},{46},{33},{46},{36},{36},{35},{41},{50},{38},{25},{4},{13},{31},{33},{26},{24},{24},{26},{24},{19},{28},{26},{20},{11},{5},{23},{25},{20},{15},{18},{9},{7},{13},{31},{33},{22},{31},{7},{25},{27},{16},{24},{21},{26},{27},{20},{25},{21},{19},{16},{25},{15},{23},{21},{26},{26},{27},{20},{13},{8},{26},{8},{12},{6},{16},{25},{16},{25},{20},{13},{23},{23},{32},{19},{19},{18},{19},{18},{17},{18},{34},{6},{15},{17},{3},{28},{8},{11},{4},{17},{25},{23},{44},{16},{18},{5},{9},{9},{11},{8},{10},{4},{6},{19},{1},{8},{20},{9},{9},{6},{14},{11},{11},{6},{11},{11},{12},{6},{19},{6},{26},{9},{10},{17},{21},{16},{9},{17},{7},{18},{8},{10},{24},{23},{24},{18},{9},{3},{15},{8},{19},{33},{16},{14},{4},{9},{17},{14},{18},{15},{17},{23},{31},{27},{15},{5},{12},{4},{23},{8},{12},{15},{9},{13},{13},{12},{14},{14},{21},{22},{13},{18},{21},{13},{27},{10},{15},{20},{22},{12},{17},{12},{25},{11},{29},{11},{13},{14},{13},{19},{20},{14},{15},{13},{7},{22},{10},{9},{19},{21},{20},{13},{9},{12},{26},{14},{20},{19},{15},{12},{15},{13},{9},{10},{3},{6},{7},{6},{7},{6},{10},{7},{14},{17},{14},{13},{4},{13},{11},{6},{8},{13},{16},{18},{12},{9},{11},{8},{5},{9},{11},{11},{7},{16},{21},{9},{9},{12},{8},{8},{12},{12},{10},{9},{23},{29},{16},{8},{13},{14},{16},{15},{15},{17},{16},{15},{14},{20},{6},{18},{12},{10},{17},{17},{8},{13},{21},{8},{8},{3},{7},{3},{13},{13},{15},{21},{19},{18},{19},{12},{18},{17},{14},{13},{7},{16},{17},{16},{17},{15},{14},{20},{21},{20},{14},{18},{23},{12},{18},{21},{21},{22},{12},{5},{15},{14},{14},{13},{14},{13},{23},{13},{10},{11},{18},{19},{19},{18},{9},{17},{16},{15},{18},{13},{22},{23},{15},{15},{14},{13},{19},{12},{19},{13},{12},{15},{20},{25},{18},{17},{8},{16},{17},{15},{17},{7},{18},{12},{11},{20},{11},{19},{19},{25},{18},{24},{19},{25},{18},{24},{17},{23},{18},{24},{16},{15},{12},{8},{26},{8},{25},{12},{6},{14},{6},{15},{16},{23},{15},{14},{12},{14},{15},{19},{16},{1},{2},{3},{21},{21},{21},{15},{20},{12},{20},{5},{12},{12},{10},{20},{10},{21},{16},{16},{14},{11},{12},{21},{31},{9},{20},{15},{15},{14},{12},{20},{27},{13},{10},{12},{5},{5},{8},{6},{7},{19},{18},{13},{18},{10},{18},{5},{10},{8},{6},{12},{11},{10},{16},{18},{12},{20},{12},{20},{5},{5},{10},{17},{11},{17},{8},{16},{6},{4},{8},{7},{25},{8},{5},{10},{7},{7},{14},{9},{10},{12},{5},{6},{11},{12},{8},{8},{12},{9},{15},{16},{24},{20},{7},{10},{36},{15},{11},{19},{15},{9},{14},{7},{3},{2},{3},{3},{21},{18},{7},{8},{9},{13},{19},{15},{11},{5},{15},{12},{8},{11},{6},{19},{5},{8},{5},{12},{13},{14},{14},{12},{11},{10},{29},{23},{33},{35},{27},{32},{28},{20},{28},{14},{12},{1},{10},{9},{7},{10},{13},{17},{13},{14},{14},{16},{18},{16},{6},{5},{10},{10},{6},{3},{5},{14},{9},{9},{6},{10},{4},{15},{12},{18},{19},{12},{26},{15},{21},{18},{19},{23},{27},{32},{21},{21},{25},{16},{10},{18},{15},{12},{25},{24},{25},{24},{23},{24},{23},{28},{32},{16},{25},{12},{23},{25},{15},{15},{14},{20},{12},{10},{12},{19},{7},{9},{29},{17},{4},{5},{14},{10},{4},{20},{11},{5},{6},{14},{5},{3},{8},{8},{20},{17},{15},{6},{6},{12},{12},{12},{1},{4},{5},{6},{3},{8},{14},{17},{16},{13},{18},{17},{14},{9},{5},{14},{22},{30},{26},{14},{4},{3},{7},{11},{16},{15},{11},{11},{11},{16},{27},{11},{11},{2},{11},{32},{31},{32},{38},{20},{20},{21},{27},{48},{25},{57},{65},{23},{17},{21},{21},{21},{21},{21},{21},{21},{21},{21},{24},{20},{20},{20},{20},{61},{63},{74},{113},{58},{18},{31},{23},{23},{60},{39},{17},{17},{20},{21},{21},{21},{21},{15},{20},{18},{18},{29},{30},{35},{20},{90},{90},{90},{89},{66},{21},{14},{33},{53},{53},{13},{13},{20},{13},{19},{13},{21},{23},{14},{25},{23},{14},{14},{14},{18},{14},{14},{14},{14},{14},{21},{14},{14},{14},{21},{21},{17},{18},{21},{47},{39},{23},{67},{21},{26},{31},{31},{37},{30},{18},{57},{25},{18},{28},{104},{17},{35},{34},{43},{12},{61},{28},{37},{21},{27},{21},{21},{21},{21},{34},{35},{28},{28},{30},{28},{18},{18},{32},{33},{33},{21},{42},{23},{23},{25},{25},{25},{48},{21},{21},{19},{21},{21},{28},{15},{40},{60},{23},{21},{23},{21},{28},{28},{51},{21},{21},{21},{53},{21},{21},{19},{53},{20},{20},{20},{20},{50},{50},{20},{27},{50},{20},{45},{46},{44},{48},{45},{49},{45},{44},{34},{41},{35},{34},{36},{35},{36},{51},{50},{50},{20},{89},{7},{7},{31},{152},{28},{22},{20},{21},{27},{26},{27},{26},{39},{39},{35},{21},{11},{15},{19},{15},{44},{16},{17},{18},{18},{20},{16},{17},{18},{16},{15},{17},{16},{19},{18},{15},{16},{16},{16},{17},{15},{15},{16},{16},{18},{16},{18},{24},{24},{21},{15},{14},{15},{23},{23},{23},{88},{21},{21},{27},{28},{33},{93},{27},{27},{27},{9},{95},{95},{95},{95},{11},{92},{86},{93},{252},{122},{55},{57},{56},{55},{58},{58},{58},{55},{11}};
    #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (8999 bytes) */
const char* const cstring = "BZh91AY&SY:\346\036\366\000\n'\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\300@@@@@@@@@@@@\000@\000`*vtg\335`\007G\266\014\336+\335\340\207\252\357y\272D\203\327\256\247\035\273\227T\233zz\316\267{\265b\3367\270:w\230{\035\\\243y\330/^\253\215\265\333\271F\234\267XT\365\235k\333I\327u\305\357x\235\356S\275\224\347n\356\272li\267f\366\267\255\336\310<iW\333p6\325P\352R%\237E|$\210D&\004\323A\246\206M\001\2413B\030\004`$\247\232\232\217MC\315&\323*f\236\232Q\376\252=4\364L\231\242Oj\236I\240\022$\004h\0214\023$h4OBOSO!\251\246\236\246\236P\001\243\324z\215\250hh2zM\000\0004\001\240\321\352\tL\204$D\230\246\312hz\215\031\251\220\306\246\023&\00652\004\320b4\311\351\001\265\006\214\215\000\r\036\243M4\315\020\022iB\021S\321\252\237\246\312m&j\240o*xe!\262!\350\2322z\200\304\321\243\002\006\2002\014\2150!\247\250\320\323\020\014\210\210\223@\032a\003 \032i\352d\362\236S\317S%<\232\200yA\352\032d\360\210\031\033PyCjz!\240\032\r\r\004\232\221\023@&$\332\023L\232$\365?S\322\236\t\021\3526\024\311\352z\023 i\240\000\003\010\000\323@\320\0004\321\362$\262\003w\325\314~t\247\311\370\3429v\36169\0317\341B\335\346(D\354\244\354\345\022\3348\022\005\275\214P\264\331H$\335\2775\206\232\263\023@RI\333\221J\216\325\006P\267pLb\232\337&`\250\236\t\t\204\240\245J\354\230L\026\357\212\240\342\234\322\350e\224\271C\202SWH\021b\212)b\267\343y\2360\037\205\002\022G\352\375\237\277\257\357\307\275\327\353\312I\247\360\014E\365\360E\021p`,09\223\340\002\347\257\000\2436\241<C\225\010\013\020\262\324\262\353\0009`O\241\351u\276\327\257f\337n\263\234g\251\374\272\277\307\317\236\353R\224\257\377 \027\310\003>F6\r\007\325k\371\251\367p\214\013\240\032#\265e{\337\377|\3408\307~\177,\026\276\n\1770\005b\302(\250P,\266\252\271&\355\3522I\021A\021P\221V\0000`\002\252\252\252\250\260\"\"\212\010\250,D\"\002\244\004@X@P\025a\2379\270\321\236\253PBI\225\014f$\007=iB\231zT\002\231 \272HZ 5k4\333\006\304\306\232\366\322\272.\003\020\226\rM\024\220{APJ\025\021C\025\326\274-RY""\007\031\031e{h\220a$\203\312\320.2,)$\025\302@\267\341\344\006\310\021\235\230\230\3337\276Z\214\224\0339l\340\244JN\222,%\2626WB\260\024J\241d\027U\025%XdV\035f\347*\312\"\033\223\2416\234N\217ahh-\r\000`\375k8\242)\311\031\231\351%\232ED\205[\010\276\251\032\245\200\306e\300\272.\033Wc\010\232\014\262\272\274\304l\303,\026\330\323\030K+\240\272\260a0\321(Z*\252\326\266TH\245\020S\025\240\005\022^\255Pk\251\251C2\301\000\252V\366\211\2654\262\241MlYW\t+[]s\214\214\214\221\270\031\\+w\374\375\377k\332\377\177:\257\264Sg\t\002P}r\023:\330O\354\236\344\262\253\252C\002k\334\247\370\212P\377\336\267\026\r\n\037G\341\375\230\345|\332Y\363\236F\263\224V\272\216\004\305\376\273mO1\267\271;\334_\366fTs\320\032\377m\242X\372\266\370\341\177\316\372\240\300\253\254\263\221\326@W\230\265\373\226\312`\374$gz8\353\234\256&\344Y\312\235c\342\207)P\316e\242\206!T\274`\r\001\364\263Ez\376\213\275\3758>\2539-%(\264\2465)%O\022\235\010\r\210\r\361\006\301\276ktbn\335\211a\322\227\276\255\251\207\274\320\031V\225\007I\220)V\336\267q\261\365\r\322=\3568\025\370\262\252G\261\"\213\215\366\255\013-\320\211\013\337G\323_\237\222F@\226\213\253\013\251i\2424\3204\017\201\350ez\033+\202\204\025F\373\230\334\326\247\243\323\276<^\022\017?Q.\344\216\2027:\034\273c\273\263\237\350ux\227\210\361#?\026\341\341\332n\033\351\231\232\356\317\2774f\271\341asf;\31655\326\345\177\247\273\371?\264\215\326\3665\0169~\233B\323C\241\221\362d\204|A\221\323\221\220j`\356\224\225\373\347\210\270\005C\031\025s\236\265\257\035\213\271\006jc\034\313\333.n\031\226,\n\265\206\253Z\345J\367\207\261`/\033F\226Nf\303\334JQ\205\255Y\366^\033+\354\376\177k\306T\332\2035\007\325\243\032\325M\351k\274\213\020nf\352\036\351lC\004C\033%BEGa\2246jyi\260\342\\\335DX\014\313\215\246L\264\205\224FiD\242#U\251\2011\2148Ke`\210\246)G\025\226\216\n\022\210\243\004w\263\004\332g\003l`\206\240\340\2623\005\265\205s\023\rK{stT!)32Fn\210\305\332$\261\213%3\276-1\254c^(\036\237\213\370(x\373+\303]#\337\345\350\016]\334\221\217\254""\025_,\004\267\014\025|\233\215\233\225\371\016\306\257\\\300`\306\263d\262\037\370|u6\352\325\035\004\302M\336'6@\247\244\264\231\221Z\254g)\2719\263g5N\202=xJIt\340\334\260\263Fa\233\226K\353Fy\265\021h\265\251Bd\245I\350\357:\322\"\315\313\203s\263nZ\376\016\375S\363\373L\024\307#\216Z\365f;,\217\345\3739\206k0G@\307\006\036g@\333\254\353\375\312h\273Lvg^F\002\333\337s-\314\376\276\237c\263\034\264X\003\006\003\001\177d\271s\231\317\337\306\001c\0301\201\351\241\246\231\000f\214\314\314\362\333\021\216\177\037\247\214\316\373[C\007|\362\307\207\t\037\263\252\217S{\225\253V1=\035U\013m\221\373\357\362\213\001|M\266\325@\252\263\021\225[V\266Ul\342\210\261\351\272\n4c;O$\177\032a\032M\215\223\372\277\322\337\317\215\235T\277\037\277\342\362{\257\367B=G\340\036Y/,\202\251\234\007\t\346;\346q\304\271\371\336\016\356\301&9:Y\2413\236\361I\036m\355=\035\016\346\254u\235\341\027P\334fwn\005:$N\n(R\00528?\335\033\024\000\274\357\336\367\206\367{\267\203\340s\253\325\3260\344\304\265w1\262h\3020\214\223\315A\245\031P \341\026@\220\240\302]\227}\333\345\233\237\2368\262\3302\220\303\036`\300R\302`B'\306\311\314\021\360c\231\232\247S0\331T\351\272L\224\000.\031\241H\0149\237\301\377\2040\374\366\261\276\360C\243\3352c\254\201\222\254T\n\307>\363\270/\207\000\237\370$\215\254\247\203\243\233\235\265\252\315\255Ilt\350UUTE\212\"\252\253\302\260\334/\310_G\3373l\217A\310 /\271/\213RL\305\233\324v\025\256\030\235\311-\274y\311\017H'<\250^\267M\230n\341\365\002\343\236\"#/\207RrD\375\222.ha\267\360\232\027\032\261UT\017UME\224\213\210\201\256\313\206\027\316`l\363w\317\352\365_\366\263\363\376\377\206\330\025\251\350\"\366x\372\251\000e\231\001h\266,\244\t\004\023[gj\345\035\026\034\t\247\305\260\267GN\202\213d\312\321\245\313\313\206\t\225\250\244\024\016\306km\205\033\037\036mF\253\242\203\233X\340\211}X\2113\266`(L\311\306,\214\225\205X\213\300\252Q;\201\230a\314\366\366C\016\023\376={\3027\256\360\003p\303\010E\324Ic\"\336\310\326\261\235\335\3404 \3561\2221x\325\3375\300""\311>\277\345\321\340\267o*\242\rj\225\260\014+\273\216b\246\031\247wx\250\306\370\230\323Km\204\244R,\235\303H\251\315\240\002\307p\200{bq\003\344\234\363\335\347\346\331\237\277\257\345P\252i\360\034\326\017\234\037\306\0149\304\020d\310\301;\000\300\254\"\301\256\034\266}\301\216+\327\265s\354\227J\305a\006]r\275s\354\336\375zT\004\2054\332\233\373\365\315\255\234\304ib\226Y3\274\322\275\204\017\306\352\"\307O r\n\375\"\230ii\303p\327!\201\234fvt\337\366n\234y\346Z\326\326\3535\276\035\r\257\273c\212\211<w6\313\2335\273\225\265h\324\350\353\3474V\257z'\344)>\2334\365\307\026\206\251t\3424A\334\3214\2503w`\030\370C\327v\350s\327\306\035\322*k\242\25215u8\342\026\t\337\026\3034qY\242\024h\321\243\020\243\006\022\354g\271\3457\307|/\205\315==\307O\006\027\023h\354\023!\213X\214\240\223\320\233\276\226I\177(\342\374xfQ\267\264R\013\325\301\306\031\230\004\354\027\0200\311|f\t\336b\315u\373\354\023\204\332\010v\023\376h\006\346\232\221F\336|\261Qrp jxlc\243kCj+\2440jmp\360\272Eq\221fr\266\303-\036P\340\017\222\225\212\363\036\017h\356\312\353X\342\267\272\3332\332\313\364|W\267AH\224\245(\231(\332\311\275{\212\315\213M\001\030p\356\244I\031W\356\032\024\277(\315\234\331\314\036\345\263\265\237\247\ns3\223W\200\236\277\027B\252\252\252\242*\242*\252\252\253a\241y~\227fxz\376\036\334\335\271\355{\325W\216\376\313|5\243\0035\346\022\214ig\032\226\334\256\027\2737\235\244\355kU\213\tE\010\032!\250t\246Y*Tw\363\273\202\313\217\245y9\027`\252\247g\302\270w\026L\266\240s\272\234\322U\336\317\035U\373\031\334\211\002i\315N\3245\267d\274\254^05xX\306vU^\375\266\325TDN8`\253\005X*\301V\n\260P\242\215\347H[Y\242\207={\271\022\332\361\253\013 \005Y\231\2231\034\2016\376\235\264\226\237\006\016\367(\330\023\3608\344\030bg\335\203\274$\224b*\002\2430Y6\261\362\033\230\357\225\221\225\027\231\362\023\205FTB\306\331`8SP\014\305#\006&tkZ\036\241\364\272\034\340\304\t(\343wb\020c\245J\235R\237w\330#\210\310\310p\245}\363\202\013B\2500G2q\213\215_j/\0013\310\362\020\374s!\370\244\007e""\266\332\313C\314\nn\036\207\254\271\334\031\206\030u6\326q\311ckl.\014\236c2\021\216\031\203\035\n\222\3706@\326-\035\364XCJ\300*\340\020\275isja.-r{\271\254\246kE\240\230\317\r!_\021\216\005\363OMh\344l\370\334\370\323U\026\033sh\032\000\305\261\030\3460Cc\026\305\213\027ugY\254S\014\340\356\325\002\240a2\302\344\3464\214\354w)p\272\216\301\324\236lnbz\274z\274\031\230\342\232\326t\361\267\021y+8\004\334\375\n\252\252>so\213Ns_\230w|\271\3645\202\325b(\032\007\014\001\013\177o\2162LLN[\226\333m\267G'\316\026O\243\035\261\232}W9ZF\205\000X\207\3525\200\3264Ja\243\243\255>\217V\226\367\345\"\250u\032\305EP\327Z\0229\306\030\256/m%\353\260m\004s\302\305\256|\277\270X=\021\350\217\006\264~vX\262\312d\277J\264\022\347\232\252\263\323?'%$\254\326\376\256\r\212\312\203N\363\007\257\036z\326\307\247Y\272\247)|T\254\322>\356\3621\325\316g8\030\"w\030\341\316fffp\203\n\362#\351C0Z\350\242\213=\203+\360k\004\265\001E$}\330\221\272\310\327aD7e\006\245\275?\265\277<:\350\324\304\243\275\017\005\nz\365z \243\301G\206\273\310\246{\235\277F%6\372W\242\003\035\234\252\335(\200\336R\325.\\\240\277R\203!\224\274\035Z\2254x\004\037\223[\246\235\350DTnEY?%K\271\354\354\311\375?\304\321\271\235\267\275\246fM\215\363\261\361\224r5\264h\241$r-\304P\253\207~\261\211\241\320\020T\305\334\271r\211\030\264\201\032\271Pl\257\275\202\231^3\254\232\014\3121\032.\016\361\3176w\266\255\"\376\242\343\266\"\322@\032l\005l_\225\241Y!qni\234q\372\304\361\031p\014&\205\356z\223R\267}\247Z\272\\\037\211\244\360\336\327N\357\016\2348p\216~\367F\307M\361\002o\267|\301\332O*\034\360\001|\272J\360\t \371\216G\366\036A|\003\230 >\351kA)\025 \347\\\265*LL]\276\r\006\217\214\306\245\206c\264\210{p\020R\010\252\205r~^\327\321jsLm\025C\005\360XFa\323\221^f\300\2060f\025\004\022\021\"\020;d\342[\004.\201\240\265i5b\246$\353\363\347b\031\031\030\021AD\2120\004\005\026\034\241\010M\204\004\030\310\210\310 \304H\305T\024\024\006A\024\006\367\273\263nd\367\247\307\337\300I$\354\353W\326y>\276\275?\220Hs\014R\"\0020R""5\226\253v\222I\312\221\001N2.\323S2Nc\203\271\010\224\246\320\366\243\251D\211R*\335\372\370.Udm\010\307\303\246\352$\014\213\315\210\270\014\232\356<N\237;\305\356SB\032\206Z\372\223\\\363\275(\013\"\310.#Q\223_\016pbC\305\320\025\215d&rV\225\254]b\325M\325I7\207T\2278\010\016\037\213\341w\007u`s@\370\235\324\204c\000\024\365z:\327\266\272J\253=\301\347\\\265xk\352\346\335w^\034\223\332\323\335\233}\270\361\367\2746\226\215\362\212\n\306P\240\310\256\230q\334\013Z\023A\261a\014\014I\203%\261\\ \347\365\276mb\"n\265\350\324\342\302\343\362\321\203a\034\257\301\222\237\317\200\207>]\3331\304!\030K\232\t\210U\314\372CP1+\n\353E\304>\373\234\256\006\251\001\022\2527\231\256\241``\n\034\014\024\222M$\020\302\336\377\0073c1\230\254\317\036\333\316\326\033\030\333cS1\331\035n\215\236\205\260\t\331\302\016\347!\025\352p\362x\222H\021+B\312\330n\330\256\223\207h\3139\325b\212_.\356l\020\346bI\343p\266FN\t8z&\310\005\002\204\233m\265*OE\234\367\230U\272\032\327}k\253\223;._{\313\2578o:V\343\275\353<\251\300\266\311\344\370\224F\261\2454\300\262B\353C@6\232i{ M\262\250\tc\215\251\222\365\242X%0\201.\226\007P\033\302\007\227\322\301\231\270\326\007\017\242\014\004Y8-\020\245%\004N\370\351\223\003\017\3327\243n\000dI\030+2\024w\306\256T]+g\021\202hM\205\001\244\330T\020\234&\374\001a\001~_\177\030\230d\305\233'\304\374;;\353&\222\tS\256h\022\354\223m\316[g\270\3009\351\033\307,\364\363\270[\336\330s\336\362\361YVQ\306\250Sk\313\006\375\204\344\345c\234\220\245\004\326\244SO\n#m\274%\371\300a\020\035\215m\257QH\232\006\367\354p\025gx\263Z0k\005\305\242\260x\246\325\256]\310\025\201\305wX&{!\227>\364e\203\267D\374l\033\010Xux\327\231\231\314f\014M\3217\333+\251\211\305\nt&\336\315\347\310\330D\036E\275\0307\312\206\334\313\204\243\225Fz\001\212;\2310\0078\034\234\016K\335\343Y5t\252\250\212\250\210\250\252\252\256Z\261\272bdQ\350\276D\260C/\230\032`\034\010\3033lH\0352d\3210\216[\002H\260 \261qQ\203 \037\001.k\232\302\203@\214\014\364@>l\"\023k!&\210b\2015 \261{M\006\327\200""\320L\357e\tz]P\264\262PV\256\033\002\023-\352\021zQ\372\332\322\350\340dg\032\030\322\221:d\021\014\273,\206@L\343\002ha\312^\260J\374m\274\005^\300\300\231\237$h\276\374\035\316\t\352\340\246\262\302\004\2678=P\220\267\rA\020_\206^\001\245\0364\327>\345\201\205\376Q\271<\364\225\363\337(Z\034H\016\365Q\257\036<\316e\3130f\031\324J%\220\024;\272\212\236\300\3056\026\312 g\023\353ZE\210\252\"\n%\265P\301\200\306\033\334\3524b\025b\201\242\301\026*\002\\\264\323N$Y\307\312\372eF\020\032$\324\205:\235\034\260q\306\306\022\3259HK\311'\2606\"\347lD\242i1\361\227\262\212\271\352K\331\003Av\024\3616\332M\267XW\0044\216\237\006\327\301\332M\033\207\213n\343\314\024\323\005\305'\031\267>\023\031\262S\221\243\004&&7\333\240\212\240\252\252\252\253\005R#\021\010\254\"\021\025PD\220U A\"\n\261V*\305X\253\025Rs\220\002\310QUU\004D`\200\301\350\216\244\224\231\220XH\243\004\022\"\215K\234\304-x.\214C\004!\225\264n\367\326U\364\351\014N\222<\202\256\"\240\262\361n@\0076\"\323\264\320\221)\34159^;\331Sn\312\370\266,$\037\034%\204\326\203'hr\235c`\371\005\200\223\263\227\225\341\210W\207\223\257\216\357L\342\275\216\033p\362rp\356\343}\264\020d\202\260\245^\327f\333\326=m%|r\337PV\026wG\323\351\364\237\221\370\270x]\363\314\234A\r\2434\2621\006 \223\034\3342d\241\034\005Q\032\366\363\312\204\375\244\211\347l\332\311\242g[\365\037\231\263\212]:\323Kg3\316\331\026\326\253>\026\225\263\203gBl\312\272\025\341\341\346\360\362z\034:k\346J\252\250\253\273\227\014\\5\303UUUQ\032\325UUUE\303U\024]\232\252\362jczkj\"f\323\026\210\256\225\355u\213\0177\253\357e\234\235Gv\351\314\242\327q\362\203\332\017:H\362-\002\322H-!ZR\270\023\013C\001R\220\342\311H\026@z\375\360\354\235\235\207\313\366~\036\375\241<\002\216:U\020\254\243?\013\255\351]\007\261\2517\t0\202)\037\036\024\026\366\037LN6\026B\027&\375\362\033\311\276\004\367\354\n\010\206\346N\377ci\367\353\253\225A$\014\300\200f.\214\014\031B\256I 0y$\232\201\345\362\032tv\033x\263\010\312\202\203\252p:\374KI\3270\363\014I\020Y!)\240\032\002""\272\311\023\221\335\345=2\373\305H\016\270\310\2714\017\260fh\031\371\263\010{\207n\307CM+\335\254;\314\017\223\212\360\3009\266\036\213\216s\217\314\320\270L_>\206\026-$*\027h\033\264\233\200\231\222+'\"\263\254\333n\325Is0{\300&1\014\337\271\346\355\325\250\360*\301\005\024QQ\021=\034\263~\254\360\350\313\222BHn@\213\000X(\002\205\355\016J'7R\271\000;\246\211\016\243\305\274\311\347y\335\216v\223\215V\306\352\360v\266s\252\257N{\227\346\002\024\360\275\222r\223\262$\257A\216a\327\005\2325\237`\357g\232\252\252\256\203!2z\336^\340\230\230\032\242 I\024\000A\024\031\021\010\260PPw\236#a\243\260\307\036\240o:\010\035c\230\311\206\324\322\345\257\216\005\301e5\322\243\316w.\341\275i$\213\354\n\263\031C$d\210\014G\000\265R\224\001\"\277\005\\\032\365\310\355\001\223D\257\214\016\310\005\2228%\001\032\262\360*\255/-j\365\300\r\203\030\202\220H\250\310\202 1\220F \202\202\007x\355Q\005\236\241\256\002\305\334%S\"\020\225\032H(\273\227\312@\353\\\305d\211\211*\206\345\300\362\014\210\202FHey^\376I\223~d\353'B,X_\217\233\261\301UW\264\300\236\311\031\256A\t\260>\"C\200\010\025\004\021\010\210A\210\211\0215\211}Y\363o\271\303\201(\234\037\r\300\3014\004\274\237\004\310\nH\023/\026|\250z\247\037\217\325\234\316\010$\014\221\325\362\275\343t\334\026\036\026\014~\257\362\236\034n\371\264j&\340`\214\213\",\030\255t\016\014R\212>V\235[`/\233`\354;Cg&\363T\211\005\t\363D\250\204\204>\264(\326\362wt\035\325\353\343\2338N=\036\254\000\252\022@\346\236\350\320\226\262e\320!\250\206\204\320\240\224I\221(\310\005{\276\2250Z6\323]\331\030*@\242\024\211EDq\316Ec<\245b\256t\304\24532\265\231\3129U\260\270=\321\003\244DO1\331\235\202lB\207*\320\240\201\274\343@\332\216 \251\022\305\341\030p\304=\343\030v\206\336\022r\337\021C\223\021>y\302\266\340c\260\202 \262\250\366\331$\025@\333\030\2269\033Bm\nL\005&\222E\006 6\220\257\265\320\274\233n07\004\334|[3\232w\300\251\275\204\013$\200)\265$\246\204\232\2102\022\030G\023\002\024\242Y\210\225\201P\332\200\247\207\362\203\332\355\235\235\236""\257\203N]\022oOM\375\320\tB\t\317\360\226\222KD\214\260B\031\t2\035\220g\202Br\210u\202\0233\276\310L+DI\3672\366g2\033\331hF\036`\304\006E\210\302(1\210\273\220\231\200]`\204\2049\003\323#'\004\222HP@BM\341\345\020\246\350qx\017c$\260\202\212\242\234\222\244%\202\022\"\201lX\250\330\242R\300\262@V2\021\005\212T\0201=\230\206[|\224\220\357xdL9\322X('\340\020\020\020\214\210\200#\002$\0313D\017&\200\n\315&\341@\\b\222\016\323\331]\335\3639{z\344\246\031\r\001\326\266;N\322S\016\226q\222\0043'\313\030|[\241\016\261\347}\207\341q\353\330\367V\333k\357\365o27,(\014[J&I\002\256\246\241\250\201jh{}\334\343C.\252\0061\357\022\200\220\343)\017P,\351\177#\301\243=\236@\364\260\371\013_\023\254\372X\366\257\302w\312\252&\315\324\214\320\215 &\271\262\254Y\251\232\251, &\232\022\265Q\005Qc\004\212\225\211\301P\006}\255\316\251\035\274B\270\322@\216\310\247I[\263\2514$X\332sKC\267\321\240]\272\301\236}\263\233\342\365\266n}\275-@:\243.sA|q\301\315\354%\000\331\256z4\350\213\201\245\227\240\326zp\202y\t[\217p89\370H\362~PzY\356\314\2203\272v\020a\341\204\004E\310A%\272\267R\024\204\244\224\340v\321\006`\310`\013+G9\326\265\022c]\232\240\365@\303\306g|\352r\\\013\343\243\217#\326\220\251\345i\212\n*\212\"+\022QH\010\211\001%H\244iPaE\021\031FQ\"YH\226)YAD@\226\312\222\305\212\312\014\244D\224\"RR\202\020\266R\330\300F,\263Q5\212%\254Q{2Z\247\240\031R\362\347[E@k\310\\\225\th`\305,\255\204j\000\254d\024z\261\351;A\022\036\362(e\227\020\213y!\204\031&\021\262;\215\264M3S\3045\363\301\327\231\323\206}'n\224]\n\207LW\260\364\365&\212nd*\3565\006\347\320\261\304\326\244^QV\225\212Z\014c8\002p\210\035X<\3606\026\0146+\2073\032'a3\240\357C\335\233o\351\227\302\001\276\343\200\303F\323e\2420\222\0034\014+\010R\355\001r3\224\312\220w\212\346\264\344\234B\267\327\275\354z\000\3572I,\251B\214\tj$ikaPaR\265,z\"P\t\210\312J\024\010\000\213T\206d\215\005\202\274\277\017\322\353\363\347\351\034\354\r\035Z:\255\304\300\242\270\362\260\030\3467\001P\254\262\002H$\2311*(\206\020\361\230\270\253""\226\364\245\341\271\306\262\0316\311\243\255\242V\212\250\365%\033\271\223!\241\322\252\252\252\371\307\204\023\026UL\274Y9Z0A\342\013\t \311\004Q\303\2474\365\211D\267)\251l\033ta\326\261u\334\035BwE\006U7\264\252\252\253iX\252\252\252\255*\242\251\220\224\343<\006C\203\\o\276\333dh\340r\221S\317\205-\262\200\242d\370\372\023\356=\n\364\331\006\251\347\266=\233\335\277B3\227\222\"\264\215\013\274\022Kn\232\321\353\301\343\260\355\361\3650d\3334\007\017\247\272\033d&\033\3727Q\320\235)\310\350ry\032v+\255\245n\323en\340\347WeUUvUvk\273]\332\345\327Q\357\"@\361\247.6\016\305o\345\275\255J\273ud\312\267V\370j\245\240\254\030\253\261+\263\222x\014H3\333l\335\362\265\310\004\203H\206\322\234\014h\321$\010\221\311i\014\263\270\331)\302\202\226)\252\257\256\315\371\265b,5\347\0338\247\032OW\027\255\245\024y\245\271YAV\036\333V\321\333\206\220\306\3014\330\320\202A\0300\242BX(\313d&\3677\031\"H\007\341$\350\202^,\335\3461Q\240\347(\320\335\2108s\271L\231t\204\232\002b\025\320r\246\235\277\027\331\276_:\n\033ar\316f\373P\371\366$_>\317P\367=^\341\247\253\363y\263\210\027\346(\233\204\234\304\265n\276\323\032\2406$\"\221!\220!\2608`e\003p%\301\2216\321:D\2212P6\211Rhd\2061@!\330$\nnk\001\003x\223# \007\246\201N\000\263`@0;0\014!\300\022\246P\265[\243xHA\370\r{\256D\000_RuI\0210!M\345\314\336\233\223~a\220\304\210\210\211\022Q!6\315\310\02056\002\211L(\262a\330\355\344]pt\033\031\316I\016i\217Z\310\006\234dY\036\3566\213\253\014\300je\336\203& x\356g\220\206\320\001*\227B\347\256\330#\301\271Hl\350t\251\213\217\310\326c\030\306\220\2404\r\344D\241(\221\214\031\201\221E\005HL\314\2201[\336\212e\222Y\013\254\262\007&\240\002\204\013&\\\220-\010R\021 \254\"F\010\261\"\302\n\002\311\254j\"\030\022Aw\311\361\021\021\304\316\252t\037\276\371P2\301\2027{Ak8\3022\202H\255\233\n(\230\256Vf\236\023o\211\013\277\234\263\215\344\256\222#\037\351r\303w\212=}\364s\312\002s\022,;\313\324\251\201\316\031\030\371\371\362AU\374N\333x\2015\004\031(3\262\247\243\\\030\230\210\257xC6\020\330""\360\224\247*\005\314\225s\213\212\227\240s^\267\244nsa\313\315\326>\330\223\216~\256~\016\2374\264\262n/\211\341\267j:_;\335\333;l\252\352\216n\027\024[\214uc\216\236\261fDOz!\334&Y\222B\010i\211\303\250B\234N\364\367@\354;=[\213\003\350\314\344b\352\2632Fl\214vV\257O\003,ZUj,\274\360\264\nq:q`\203\tr:\334Is\317\325j\221\t\204qa\206\256\363Q\rG4\250J\347\314\365j:\340\355\003\226\330\250\354|'Dr9%\306\323\027\246R\241\3259\247C\210;#\0302\341\210\225\272\263\340\323\254*`\202\233\311%\257i\"\226@\263\310\305Z2\355\327\0164i\n`\230\313\324^\336\210\021\216\337_\274y\217\241\"\226\235\003L\236\006\214%%H\201\337\263\356}\034\337\203\300\347\362;n\3373\021W\212\363\277\032'u\33631\273-\24775R\362\252\325v{IN\245\253\306q\256*\363s\013\003\022\215\221J\020\265\233\325[\231K=\323\364\2264\331\255\266\250\275\356wL\227U~\016LkS\211\226c\275\332\363\260\345g:Ux%Z\203\315\362\247Z\316!\345\353\201\347~\263\245fTE\253R\260c\006\036\222\315^j\314\231\360\\\3364N\233\312\026!!\326\2111j\311uw.\226\\\347k\255?x\t\356}\360>\301\017\300\014\" 1\005\024\030\202\202\310\306)\005\025\001\026/9~\370|0)\364\217\263!\003\334\220\024\020E\025T\024\021\027\271b\220\376\204\301\361\305\"\251e\034\335\276\372{_\210Ha\222\213\0162`?\026\027\017\227\341\003\303\247\377@\326\031\010\214'\325\264'\217\375\214\305\213/\363\313\353\201\2000a&Y>\317\335\355\312\212\217\376\007\320C\356)\361{l\007\343\237\203\023\324Z\007_\325\034\337`\321\021\027\204\272W\240N\256\201\365\377K\362\237{s\353\376@z\321D`fPW\331g\353\207\2539\177`\037\313\277\271=\177[\374\246b\253\021\213\316\377\237\264\205d\260{5<\177\206\273\322\031\230\371\277\367\347c\231\277N\245\266\241\027\001\3773\t>\334\"\211\372=&\346\302\321C\3701_\323b\230\201\006\261\0043\350\371&P\035\024\005\240\017\r\255h\001\320\323Z`P\r\275\377\333\373\277\273\360\264h\212O<I\334h83\366\302\342\252\t\373>\203\211\233\355\177\233\226\224\024\337hB\n\004\021\036\331\377\300f\006Rd\322'\342\016\005\313\0212}\341\177\013r\324B_\210\222a\007\203\245""\326k\303\350z3\262;x\307\264\352\370\211.\201m\304\361\207\036\356}\025\325\005\375i\235\036\207q\325\234)\022\323\304t\205\230:ts\363\305\321\222b~\026H{\375\t\236]\000\350\254\341R\004Y\341\213\305l\365\177\363\361\375\260,\305\r\361rb\007J)\007\204s\2745\367:=\016\211C]\037Q\372\033>\223\333\325\276\221;^J\025\n\\\035N~y\3558]''x7<L\345\n/\374\264!/\023\306E/M\235E\322\231\230\247\307Ry\346`:X\350W\214\216%\377\032\364}6\253\007\244\351^\333\343\370\360\303\367\362\\\260H <}\317\326u\246~\214\366\337m2\247\267\031h\316\312\317\355\353\201\205\232\203\257D>\006\344\031\331\036\036\256\242h\255\240\352\237\240\215\020\224\007\351\031H\246s\372R\304\272\211\365=n\237L\365\254\245\204\222\020\275\270i\371v\032\274\223\"\023\034\360\347n\237\207\345\202<V\032P]\223\373\354Q\211\344b4\t\022\020\231{B\346\213B\017\035y\212=E\025\371c\311|\240FWC\370\256$\317S\334L\2269\366|\313\2450&\204@\354<\241#\233\247W\367\263t\020\207\243\331\326FR\355\231\377\273\360\224\354\305&_\244\2739\240\227\226\224\216<\221W\257\347\314L:\251\301\354s\272(\366\177l\371tJ\351\224\374\217vI\257-\220 \014\245\027\237\243#U\235\372\216\223\240!\3621\326\322\237\350f\223\235\236/\225\274=_\007Cv\304\372\\\354\212\354\2217\211\320\315&\363\352\363\017\342\207A\332;7\365hM4z\220/>\245\263\344\347P\375\016\207u/<F\232\020\017k\254\3105z\371\236\035\016?7L\"\275\214\031\034\375\272\307)\346\177\013\273|\320\351\217Q\003\3639\246\360<\037\344\346\362\315\0238\236\317\253\237Eq\363;z_\240\346\224y\350\301\332\360\001\350\234\370(\211B\202\217\005\316!\3479C\251O\010\242$\365\016\343\030Qf\303\016\303\310\361\256\245\311\333\332\036\206\030\343\030\3429x\371%\026\365o\366\377o\003\017\007\030\031\224A\233-\237\215\215\301\202\\\3474\014\324P\252\323js\302X\327>\3271\210r\302\250g\251\263\333i\376\364:W3\346\240\254\003\026s\332\216\233N\013u\230\313\006\264V>\002W\202\335[Y\371 \204BM\2056(\333m\347_W\217\243\300y\316x\021\204\035\007\021\302g\207\251\337\214n\003\323\233\307\361G\314\307\251\344""\230\357o[\302!R\020\324X*\311\230)2c\\\216nc\365B8L\336\214$\313\227\036T\213(\234\333\222\232\376\214t\221\274\\y>\314\234\250\345\214\314\355d]\217\240\2627[\340\236<m\263\310\360\224\221\261h\003|\207(\220=\362Q2\365\035\036V\033\272$/\030\030\3531[W\214\"\324\000\346\312V\275\374\237\263\336\341\262\003\242\026\374\210\354\371\332\323i\350\243\224\362\002\364\210\375l\270N\362\364\006\356SV\251\364\335lE\374X\312\347\312\252\335Y_\261\266B\375\215\206WYr\371\377\3128\275\323l\326\263\345\323\305\305\250zY\274f\371\215\212f\346{\377V\345\234\360\"~\360\361\325*7\022\020\006/\016\245N\023(\n\232\364n\365\342\331A\326\345\250\256\205zG\270O\237\230\202\236\212\341\266\255\355(\312R0S\211\220u8\001\r\330\204Y&gu\010p\033L\037\341\022H\363\037\021uz\203\374\367\317\260\362\232\377O\200\261\344\376\330~N\263\327o\214\014`8\371\340\374]\331D\223\334\213\3177\346T\210Q\337\201\2208\325\\\301\317\221H\337A4\312\\\013~\005\244\363\213\213\305%\224\305\234^I\273\305\205\251r\2263x\315\274^k\rQ\214\315\254\306\255\025\244\355i\305\2538\227\251h=/.r\327\277=&`\366>\326\331iB-hR\332\014ElaJv\201 \256\373 2\265\235NX\260\246\304\300\274bPY\252\356\325\223\2003\216?\261\231\3325<9\222\016J\3321\301\235\367y*q3\n\201\315[\231\305\326\325tVf\352\221\234\031\305\013-\231\226\351\332\214\312\312\226\217,\253z\351\375\371G\225\372\365\254\264\225@\277\330\234\363\321\225\255\017;*On\337\tR\221\223\343\370\017}\033\344\335\252\226\0027L\233<\365yq\353\246\305\333sz\327Y\010\341\200H\000Y'\233\n\201&\016\2645j\242y\323_-\020\272\037\376.\344\212p\241 u\314=\354";
    PyObject *data = __Pyx_DecompressString(cstring, 8999, 2);
    if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
    const char* const bytes = __Pyx_PyBytes_AsString(data);
    #if !CYTHON_ASSUME_SAFE_MACROS
    if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
    #endif
    #elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (9370 bytes) */
const char* const cstring = "x\332\265<K{\323F\327\rM!\360\006\232P(\024Z\260\271\205kR\323\224K\271\264&\t!mp\256\004h\241\376\024[ID\034\331\221\344\\\312K\333e\226^z\251\245\227Zz\351\245\227\263\3142?\341\375\t\33793#i$\215\344\320\367\373\236\247\305\232s\316\334\316\2349s.3\031)\353f\241\244\230\246\266\244\251F\352\375\267\037R\333\232Z*\232)%\345\302\013\212\245\225\365\324\246f\255\244\336g>\244\212\332\322\222j\250\272\225*@m\313P4\374Db\325\034U-\265`\225\215TA)\225\026\225\302j\312P\255\252\241\253\305\324\300\373\017\003\251\362R\312\332\256\250\2640\230\032\333\252\0005\340\024h\264\200\275(\3066\353\250\\\241\305RjU\3356S\003\272\272YQ\014KSJE\265`\016\244\024\035\0324T\263Z\262\006\006\275f4K5\224\305\222\232R\314\324\222f\230VJ1\226\253k0\324\301\324x\331bC\320`\314\252R\034|Z6\326\024+5\251\352\313\330\337RjC)U\325\324\022\014~\000:)\254(\306@j\255\n\215,\252\251L\256l\251)k\005*\214l[+\300\016\315L\025\325\222\266\010=Zji;\005\214\200)\000\017\201HOM\217M\337\032\2767L\307i\250\357`xf\312\254.r.ao\213U\255di:e\2079\230\232XJm\227\253)]\205iX\345T\005\350\304\n\326\212\252\247L\325\302\217\324\200\242\353e\213\256J\036\252k\372\362\000\360\317\200N\264\r\025k?UJ\246:\370p\232qlT-\224\327*eS\303\n?\244\364'\245ra\325|4\017-\261)\343\242@\0018\035e4L3y\341J\032p\010\260\003\262\336\240\336\"\235\374\340\202b\374s9\333P\014\215\256+g\307\340\343\037\225b1\017LPA\314\212b\217\346\320b\331(B\027\212\241*\005\312\250T\001>a\365F\312\245\352\032o\177|d<?25y=\365\350Q*\367br2L\251\2338\035F\353\226h\37315@\356\247\215\362\342\250b)\254\322\350\330\374\364\354\324\223\321\354|6\246\312\3632\310\017#\236\033\231\230\216\241\222q\225U\232\316\316\316Od'G\307F\246\236\307\325\006\256\373\363\340\205\3404\212t\303\002d(\270\014C\033\342\202\r\275\3770\244\352\270\004E\277B\221\357u\2633vI\3235s\005\0045\231\014&hU\214rA\205n}Z\315\304_VRA\360\014\rw4\250\206EU\207\225\206}R(\033\352r\001e\025\347nV+\225\262\001\3229\230\232\322ag^07\226/\320\235x\241\242\343\227\241\n4\232\311\373\271\231Z""S\266@)\274\\\00152\207M>\002\000\352\003\325TU\030Oj\02312\030\343\257\262\274\014\303`B\254\351K\345\233)}R\323W\201\n8o>\202\342s\005T\217\201\362$\024)R/\2036YR@\235\245\362yC-V\013j>\237*V\351v\326\313\372-\320.\033 \007\200-\000/\255|\276R)\334\202\261\334\242\003\010\024\344\243\251\200z\202\241\230\345\322\006_\317-\005\2660\233{\004\271\242V\r\2163\325\322\322`~\271\260|\223}i\232\311\277\314\202V\341\237\240H\264b\212\013\037\350K8\031\240%\213)3%5\315t&S\006T\305V\264\302j\t\273\374\377j\263 \356\332\177\334\212+\236\272\262\246\272\362\225+\353\2403\215\024%X\243\273X\300P(p+_(\227\376q\267\221V\275\376\302\003\351@\316V\364c+\241\360K\353X+\232Y\261\214\177<\257\rA\005\375\243F\214\302Pe\033\270\013\346\301P!`\273\014V\266\264\000:p,H\260lae\010PA\213E\320\344\021\034\374\014V\266\267\002\260\212;\237\0105\337Ty\266\006\0214\345r\004\032P\273\210}\210\206\005n\315\252QP\037C\241\014Z'07\246\37764sp\271\202\272e\304\253\037,\rz\232\245@\031\234\317G\360`a\230`X\304R\360\241m\207\300K\206\252F{\306\225v\177\345}s\214\264W\212\203S\236\266\351\003\240\375e\035\213\363\345 fY\265\262\245\322\\u\021[\023\241\224\214\235\237\023\240\007%(\263`h\324\334\214\340r\260\t\244\300\251%:\3370*\n\316\2150\223%\010\303\023 \n\201\332\022bq\010\232\031`s\321C0\346\206\253\033\352ZyC\035[\253X\333a\224\031\317\0303\2011\246\300\003\301\346\021>\243+\035DF\026[D\343z\303A\255\301\356S\315\0343Ts\013`\346\231a*Q\273\207p\323\236\375:_\316\352`L\3006O yJm\023\265\270\017\222\027zaE-\254&\322NU\324\360\200D\303KD\025\302S\r \003\346\230\245\005\370\rXU1\334\311\371\335\233\021\232\221\252\201&t\022\211;\2738\032`\265\247\344\340P+1\313-@B\255MwM\344\0303[|\247\024T\275\260\035\305s\006\211\010T)\363*\3508\003\\\302\260\210\341^\217\314=D\200}J@\322\205\010\343d\025M0\rG\342Q0\205\020&\312\326\216\004\341\306'\300\276\335\222\367\353\242\242\375\346:\210\205\253nbg\313\224\221\024(\037K.\236\t\271\316\223\314\201u\361\207j\224#p\334I\t\325\022P\342\206\223!\2450\371\334\222""\0071eh\324\270\177\252m\251\305_a\022!\374\254ZR7\024\335\222q\324\305I\3063G]\223\221$\365\000T\013\350\026\206!1\323\210\256L\234R\n\241$\r\311\272\320\314,=\231\325\"h@`\nE\004\360\364\340R\214\242\246\203YomG\033@\310\034\030_\225\030p!\nG\2352\001\336\020,\216\366GP+k\246\260\357\252\225\022\352Q\265\274$S\366\372\"\345\256\257\215\013J\251\020V\270~Pd\302\314\225\275\026\247\226b\204#\350\312\206[3a\201\335\241\0007\251\267)\342-C\321\315\022\264\037\323\272\213\2274\r\006\244\\[Ss\327\375\225\236\322.FvD3\234\272\245Y\221\246\230s\037Ps\034\001:<B\215\336k\004(pK\322\016`*\312r\200\033\036\016\306\nPe-\213\356.\360zC\215\240F\231c\035\201?\005\367\233F\312\306G\306Yl\310\373\210\262GDE\370\003H\346\313\323\230N\260$m*\210\357\320\036\263w\302\315r\355\003\313m\002f\232\371\032n\377bQ:\200\020\201l\004\001\022vN\217\027\226a \023\271\247c\331\271\211'\223c\023<\336:\251\231\026\245\213\3510\266\033o~\201\370\226\034\372\324(\257\321M\357\241\247A\276\300}\302] \013\223yt\240\263\304YH\210\2307\3501v\324\367\001\221\30728\364M\375\272\242\217\254*\245\305rU\367!l\271pg\206@\270h\036(\027\364\234\004\004\214[\006g\246\022\316\001Y21\312\020\232^(U\213!7,\200\342\373`\272T]\326t3\204b{#\000\344\0020G\335\327\000\206\352\253\000$0T\206\301\300\260tj\210\010\254A\000\316\303\201>(0\014\001N\007!\224e\334\302,\302\032\034\r\254T\341k\346\2264\335\232\3030:HP\301\024\200\013P\337\023\rS\365\0065\306\002b\021\370S7\272\031G0\0358\014\302T\260\327\346T\320\331T\235{\320\300\264\303U\202H\014\344%R<S\253\006\235e\230*\300\263\000r\323\320,\025\034j\266Pfnj>;==91\222\205m?5=?\361<;9\375:\237\235\304\177\237LN\215\374\202\277S\363\317\340\007\343\321\223c\363c\302\347(|\345\346\346\247\236g\347\346\307f)\"7\227g\241kP'SQHT\211Hi\"\032\005\2500\266?=;12\221\033\237\233\317\316\277\230\223\301\244\355\313\250d=LN\344~\001\032\370\362&\004\014\202\177\247r\223\002\214\226x{P\344\001{\370\302x\177~\2041\357\305\334\330\354\370\304\302XN\374\226\216N\304\312F\265\220\235\r""\2624\010\220\266\031!\2116,\321\2542\030\324-\224+\333\362\n\222\276\345T\373\352~\020\032\253\030\371\212\276\234\20467b\320p\"\270.\322\304h\034\005\265\270\343\220#\210\234\007\303+\216\000\000#+\212\276\254\232\250\242C\016\231\204\232\251\t\250\242\351\030\212\211#\314\345\324M\346\n\304QL\027\270G\n\335>\205\343\261\023\335|9q\242\002\031\315\252%\320Q\307\240s\257H\326\271SN\225\320\347\3622\215Y\201\245^E;\271(\247*\301\201_\334v]\023q\3061\034d\341E\0263\201\263A3J,\203\223@\215\036\"o\231\037\370\361\264sk\nX\344x.\002F\207>\314'UkJ\017\005H\244\r`\276\230\313\225\246\317\321\230\260\224\016\235\227\254\237\373A.a\236;n\327\322\200\026\350y6\002\316\250xJ$\203\223$v\224\370]R-5\021\371\004\275?\235&\220\367K\267\017\006\271\265\306A\000\213Z)\216\010\306\017B5\261\206\016\234f\2311T\225\355d\004\226|\333AJ\013\247(\214\206\006_\023$\216Q\241\014y\t\253x\0227}\022\241\320\314JI\331\216U\035\340\241\241\021l\362td\242\240Fh;n\203%m\213\005\344\3514'\212\373 J&I\034\335\226\270\213\223;\333Oo\035\273\003^\314\227'\223\247Oi\366\321LGV\n\201M\364\251:\321\304\034_@\301$\356)\330\254\353\324\300\213\243s#w\361|\n\023\3056\345\236b\205\304SL L>Ee\204I}{\216Y\014\tgD\247\271\272Q\231'\333\374\313\210\243|\246\230+\013x\177&\216 ~u\2708\241\033\030G\302\244\tuB\007\222\244F\274Pp<E\362\232\202o\252.-!\323\022\244;@\227\310\\\026(N\306vl\303s\021c)\306\326\253\332\206R\002\225\352f\304bI\367\261\022\271},En\037k\341\331n\013\314'\354H\027K\341\236\026\311\024\211\203\0215Q\"\341|\331RJ\373\246^\350\204\354\270\272\"QlS\035\031\320i\376\373\262k%t\311K\267\037\243:J\266\2776\023Mk\t]\307V;\332\353Q\262}\265\271\017\226\212d\373m\263\003C\005\252\344\026g\325\n\320\256)\2258\002\032V\212C\316\273q\371\242\237\017\320\212q\324/L\325X\3266T=\216\000\023-pli<\227\2278\311\216\273gEay\222\004M\355\222\024\366CSP\214b\002\235,\343\023C8\222\344\024\260L\216\257c\023\210\022\255d\315\234gW\344b\260\300?\312;P\013SK\361\\\244\204\376\251\020O\343i\374x\222$\223\235\022""\204\364\352\276\t\223&P10\226(\347\265\241\202u\257&z\300.I\302\312\263[%\035lPF\324aY\315}\230\273f(7\337\301\353\342\344\211\023\020#\263nj\251\330\2112\224\310\356HG\367D\007\332\016\206\255\271osTJ\2314\202$\273\317\374\230#\312\374\250\243\307\374\250#\325\374\230\023\310\374\230\243\305\374\210C\003h\347,u\215\216!\211\245\037q6\230\235\316\0063\230\204\357,\363\324\275Lr\211]\232$O\326\245I\336:\373\363d\315\225r\265Tt5\177\221\206r:\354\312\225\362\346\202fV1\227\037\037\257\302\314\371\264b\255\004\362\033\201\202$\326\034BG\203\314\001\002Lr\303g\225\216A\206\211\364\210\211n\031\034s\335\362\2268&R\203\346\247$ /\203\023\304U+xa\201\025`\032\333[\360\377\250V\260\3629u\013L\235\245\271\251\311\205\261\331\311\211\347\023\363\324\256\241\377D\031\344\202#\214a\010z\277\264\340\206Z\005X\360\222\026}\201R6\266_\344\236L\275\310\215\216\215\276\310\375\222\233z\031Lc\006\n\321\221\204\321\221\021\005\t\334\373\250A(\016+\334)\n\023\377\221\366\032w\025\325E\2717Q\27525~\350^\010\300\003\327P\005`\350\262e\024\343\335\265\014\243\360\252\245\0146\265\004\3200\"\014t\257\237\212 T{\341\262w\365TD\010\035S+\304\277w\352\202\003\327N}`\370\326\251\2131c\371`\306\363A\274r\032H\335\270Y\232\370K\243\356\242\211)\033v\231\"|\20546g\023\276\205\020{+A\226\307\t\244lbn\246\306\\5\355t\003Ur\353T\222\376\211fz$I\235h\376&\222\252\211fe:_\277`\027/B\327_#y\033\245TJ\312\322(.\227\370o\036V\331X6#\327\300c\023719\232\217I\307\204\267\272bn\353\005\255<\010\032\260\014\252]WMz\201\214\376\223\201\001\322\217\333\356G\236\006*\330'\007\201\205\016_eke\261\212/\334$\231\235B!\317p\205|\360\225\003\276\312(\344\371\363D\372\201o{\360\303,\340\277\376k\025(\271\n\271\220\207\323@\325\361NC!\317p\336\023\017\370\\\201#\225\177z\257E\n\370\372\306\304\177\215p\347\030W\211O2y\267\350\304\353t\241\315)\3159\205\323K\371<\3558\237w?@#\341\363+^\324\n\321\013\322\356i\300~\321\251\216\273&\035s5:\356:t\001\204I\315kz\3362@$\360Yk\001'B\373,\227\374[v\346\240\262Xp\363P\222,V""\307\304V8\207\205e\337\232\244\242\000\377\323\273\277\236\\\250\346\232\347e\371k%\021\233\000\304\214d\302b\356y\307\200\363jI\305gxq\350\212e0\024\303\360\242\311\376\241j\266\210\311\264\230\204\232{\227\240P\251\344\335\255/~\303N\302\"\335M\336GF\204\336\026\013\3427\335|X\022\0044Pr\205\024\201Q\021\243Pw\355\261\020\\!\n\t/\014\0072\211\344\005\031\247\001\005m\360\301\302^V\264\322\244\272\241\226x\321\317\256\370$>\314k}\211\313/\3736LKd\301\022h\370281\370\r\333\216];e\335Ojk(\005\200p/\304\n\237\221\273\261\024\251n\342\305+\376\271\301\306\202\005(\371M\200\236S\r\314\314x\205 \277B Z'H!C\272\014\253\024h\377\321\353\266\010\205\265\346\363\366V=ts\026A\256\216SM~f\004\201\376\"\272\317\220M\267Pt?\\\336\313/\337\006\237G\310\236DH.&r\220\247\303\205\013\230\354\033\003nO\024T\204\342\033\nVX.,\263\017|N\t|cb\305\217\r\352\227\232\374\350`/\311\212\236A\306\276\314b\340\256`$\225\035\314Z\007\022\324x\022\201`\3461\037\227\307e\027\004\231\t\254+\266\356/=\222\302\362\035\225m\361p\363^\r\013\257\365\362y\374\033\002y\366\343\235}Bj\274\010\256\245\211\352Z\337\340O[\371O\370urP\230\362yPs\350^\251zu\215\276\366W\205\013w\324\002\312\227W\001\275\205\317r\305\033\322\242#\351\273\216\336Y\034\223\225OL\300\207\357Z\273\233=\260\321\203\271\366pz>\224f\017\345\312#\t\366p\236<\224\022\017f\277e\211nf\032D\237\010\212\267\303}\007:\362\356'\342\314\345\021\002\002\016?\353\370W&\014\274s\033(\240\202\303g\006\256\262\313\347\227\252`\371\340\033f\3760\027l\211\200\243\026\310\251\207\222\360\322\307F\222\024{\324\311\2238w\242\003\027}O\030q\357\202\357\n\003N\036\317\313\207\237.E\2362\205\363\367\221|~\350}S\360M\223,\013/\315\314\313.\000\004\023\363\321{\32517\252\305\273\324\321\304\2754G/}M%\177b%f\356i\222>\364\316*\370\266*\230\254\017\334\351\016&\351\003\371\370\230WX\201\214\274\237|\027\334\364h*]\222\204\227\334\031\217\276\351\362\362\351\221\304z\3701W\350\001W\3645j \351.\317\257\307\274\364\ne\330C\311\364`\336<\220\372\226\344\313\305""\227b\222\327a\201\274\270\230\002\017=\025\223%\277c\363\334\321K\370\221\327en\000%\234\273\216\344\262C\317\314\"\201\027\036p\211>9\023\363\335Bj[\366\372Lx\023\"y' \311\022\307&\216\243i\352\270\304\265$K\036\2338\217\246\224\343\222\314\221\254nL\2327\232P\216K1\207_\343\205^\340\211\251a7\013\034\377\022\0171\250\321bS\302b\366\227=\314\013>\317c\t\335\320[\273\360\323\273\230\014q(\031\034|\224\227G?\231\2050\363\301\214p(\371+\311\363\256\204\236\th\032\314zK\352&H_\233H\337\231\204^\230\310\336\226\210\257Jd\357I\350\354\305wcb\\\335\217\244\3132\322~\362Y\372\0021\374\236>\234\214\016\346\235\205\307\210\342\273D\351[\304\016\357\017\275l\265,1\035\n\266\206R\322\301\354\263\230h\226\245\212\023\322\307y\315\314{1,\370\346\326/|\271\017e\340\333P\2661\352b\276+k:8\363+\253\233\030\177\343mI\236\370D\037\367\004\236\365D\037\364\370Oy\242\217xJ\345M\325\240\377Pc \237_C\347 \317<2\366/\013\257\361o4%\326\274\023%\374\347|\240\234\253\256-\252\206\247s\001\342\031\215\342\267k@\256\2014zx\341\333\303\257\202\237A\377\216\n\014\n\374\213\022l:=\024\2613u\317O\207\317\340\337\004\001\000\r\304\301o \320\306\312&z:\371<\377\2279\324\261\376\270\316\275U*\250^\320\006\324\001\370\342y\327S\017\376q/\317g\367\375u]D\323!l`\034\275\254\227\2669\327\351'\237\205\373\272\312e\207\373\213\025=\257?\344\336\207\275\375p\331\215+E\340\025\013\213\030\243\365\241\373y\224+heT#\025\031\306\3535\332!\017_\271\037\023\254\rk\245\244-V\nV\245X\321\227+\345\212\364\375j4&\301\357f\270\333\313\333f\025qG\004E\204.\177Hjx\021\245\235\276W\013\275d\023\337\260\3017\254\212\265\215\2640\305\034m\254\274\250\033\2227\265\000\332\332\256l\263\227\256\025\314\251\271\177\225\006\377\236\221\367\r\352\002\260\030X\300\022\376\346\363\225\355\255<\r\340\232\3255Vb\177\233\217}\363\343\010?\361o\310\261\257\252N\377\250\217\032\372\0233!\244\2538B\340\350[\260(A\3441W\224\304{Q\025E\005\037F\205\361\342z\205pT\325\204`A\377\225\3426,T\266\030\335^\007_\207\355q\003\363 \371\305m\330q""\364\313R\267,\003\343\244\246\345\377Q\260@\312-\222\311\364\000\352\026~\212\327}\2027{\302\227x\242I\273\360\r\036\026L\243\2014\377\375\225\377\324\212-\270Q\336d\032-\2202\366\222\305^\332\201\021\261?\\\204\236\030\376u\250\320m (>)\227K\364\251v4q(I\030\212\211\302\370[C\241\013B\322\3338\3217\237\222\013>1w~\022\336\205vz\021*\275\227$\275\332\023{\337'\374\234\324\277\352\023}(\037z\037/>\213\217\275\325\023w7(\366bO\334\035\236\230\0338q\267xb\036\304&=\205\355\364\0106|\257'\366\n\217x['\346\315l\354}\235\320\325\234\320-\234\340\205\033\331\335\032z#\201\233\000\360\305\303\262\302=\205\274\344\316\002\000\350\332\273\211\275\304\2738\221k7\346\252V\241\007M\360\342\211\237\033\304+8\262?`\301\376D\031}>L\307\203\377TM\323\2426\332\006;\217\314j\005>6\226\201\361\225%\r\025 \322\345\363\262?x\341\301\346\266\327\326T\313\330\016\305\356\331\237>eW`\304\2130US\365x\002\337K\325\022UE\245\rLiRm\303T\016\230)\360\037=\321\341wQ/\272\211\251HB \234\014\010\030k\201\002]\252H\3224h\334yi\004\232B\200\177\312\213\357\204\256%\t\0049\3245Zb\260`\277P\214\227\200C\263lC37Ue\025\2641\376\221\310\274Y]Z\322\2666\313\306jY0\375Bo\277\377\356\332\355\376\326\351r\276t\326\361\363F#\323x\352\244\361\363\242\235\261\2376\322\004a\273=\275;\317j\317\355~\033\312\017\232\231\377\234\371\344\360\321\235\347\365~r\346\207\346@\253\237<\231%\263sX\353\266\223v\3564\373\361\363z#\335\270\343\364\377\235\305\302\315F\266\261\340d\376\316\376\247\357\223\303\027\354\023\366\033\222\311\266\372[il:G\316 >\337\314\312\360\237\357X\265\307\366y\030d\177,\232\244\261\343L\002~\330\311:\277\267\356\266\323mNu\311\346\323\232\264\273ll\371\210\000\313\331i\033\351\016\3720r\342\262=c+\002\341\231\372\245\372\212\255C\3033\330\315:\240z>9\374\260\231\331\353\351%\275C\215\365\335\336\353\344\372\003\362\340W\362\353o\273\275\003\366\037N\277\223\346\215\001\2325u\221\\\300\261\017;\353\273=\337\324_\332Y{\006\020\275\237\034>K\316\334v.8?7\2138\215\0012\360\270\271\330:\322\276\324V""\260\267\355\372\241\372\272\335\013l\233wN8/\232\227\233\353\255.\250x\372\223\303\267\235s\315\365\275\236\301\206B\007\002\013\271\333{\216\234\033\"CO\240\245\336\263\365\037p\"\2143\367\310\331\237Z]$\373\202\274X\"K\313lH\3379C\255~>N\\\030\030\320n\0170\220\2032\016g\327\327\365\341\372\026\031\000\201p\347\357\003\357\342|\030\360\202\007\274\327\354\212R\336o\366G\201\017\233Y\027x\314\003f[\022\312\321\226G\331\213\0133lo\221\241\347\355\231(\345\243\246\010\244\224\215\277\232\n.\344\000\212\266@l\377\345(\341\006\354\367N:\002\2536\274\336\373\\\030,\263\000\353\335\031\336\371\243\336\217]\354\366\036\257]\253g\310\327\363d\3767\362\333\033\362\346\177\310\377(DYdB\227\335\355\355#})\020\307o\032\312?\253\234\206y\334jl8(B\307\367[\375\233\372\014oc\257\367T\315\252\377\010\033\367Q\363`\323\343\300\327\330\322\235\332\251zw\335\035\343!{\275\321\205\342\336\273\363\335\216\262c\221/.\333\263\266\325x\000|\353\355\253}V{QO\327\277\253+u\213\\\374\336\231u\254\346\203\226\262\333w\2426Q\237\331\353\371\272>JR\337:\007\035\005\245\004d\024\206P_\262\305\205\004\351\277\343,6\217\264.A\275\236\313\344\362O\255\003\255\353\355Q2=\343\213\377\021\030\351p\303r\276o~\326\234i*(\246\027\355\273\240\264n\200\3744\347[\375\254\255\207\315\273\2554\031Y&\313+d\245DJ&1\255=\177%o6\3569\356\036\207M\323\340#\270\331\270\357\211\374%\266-\351@@^\233\227\22097\311\315\037a\327u\267\262\2641\266t\250\247\276p\306\233\231\346Dk\276}\262\255\2229\340\370\013\326\323\311Z\266\366\n\246Z\264\323t\332\214\217\335\215gN\256\225n\r\267\270\310 \331k\344\035\352\240\335\036\272\027\3500\2565\370\316\273lg\005\235\314`\267\032.\031j\336L\030\3107r\020x\2531\323P\302@\316\203\275\236\0230\216\337`N'\\\225\004\003#'Q\r\026\033\003\256\022\2400\030X\343\022\266D+\221\223\003tZ\343\256F\276l\2176z\310\267\240ip\007\177Y[\006\036\254\330\212\217<\n\2729\203\033\331\305\025\033i\326\345\255\306\250\323C\356M\264\351\236\332\252m\002_L\373\n\264>\346x\314\200\326\235\243\356\356F""\261\374\354\350Nv\267\273wg\274\226\251=\255\337\004m\327}\350\357\215\235\227\265\261\372\t\224\366\3435X\200S5\320\222\247\353]\210CeE>\277\355\\\002\221\334l\256\266O\201\234\355\005A\375\377M\313\337\241\202o\036j\276o\017\220\231\331\275 (\375\337\264\374\2753\017\0029\320:\333\036\007Q\333\013\202\262\377M\313\267\340h\351w\006\232g[\343\355\314^\020\222\345\254'\227\306[\353\355\3566,\335mr\033%\235\274xM^\377\312w\004\312\3011\340\237\211VB\353Z{\270]%\363\210\207\023\221\255\257\330\202\267\371\217\242\030^mt\261\3225\334!d\230\213\000\333\371\237\202\366\006\335\313\016\274\257@1=\263\307\321N\351\257\235\003l\027\335\234\250\003^\264\256\266\257\303\250\270d\221s\203T\336c*\r\222A\334\321\237\265^\265\177%/_!S@\336\310y\260\220\330\341\016\003\253=\253g\331\251\204\005Pg\374\030\267\323A\323\201\023L\321\302\031\257\000\262\332\353d\275ir\374\021\264Z\372\243\333\367\002\352\223(\230\362\007\254\0066\250\023`\036\365\333\256a\001ls\265\204X\333\005\037\344\265\231*\351\343\245;\216\"\340n6\262\302:\240\356\233w\233\024\360\247y)\353\252Y\001w\214\227.\3333B\275[\256\002\362\347\352\332T'8\311\025\327\302\022J\007\003\245>\237\327\024d\257\207\333\344\372k\267\0078\306A\003\366\2720[\260\275\234\17753l\3247\032\202IF\327\371 \007\336lL\240e\227\301\343\374[\217\221\320:\031\032o\375E\026\326\310\232\036C\356\266G\276}\326\376\034$\311\325e\224\"lL^!\227A\266\231a7L\206_\002=y\005\007\364[\276\211p\351\3167\273\232_4\307AIN\264\347\311\314\002Y`\207\370[\326\262\330\004\333E0\252k\344\352/\355\014?2}\033\007\270\220\266\273\355I\347s4\031q8\317\311W(\\\217\233\375\0224Z\211\217\360\264\366\354o\031\032M\330G\255C\260\223\273\342\210\354c\374l\245\313\000}\342\211\364\246\311\005\353\233\372sv\206\354\366\\\260o\002\245\345d\350\374k\237\303\336<\010\353l\342\231\343\\k\0167\253\2551\230l\332=\223\350\216\363O\310F\332\355\003\374\n<\340J\315\264\307\220i`\006\231\001%\265 \260d\257'ERx8\235h\001\247\316\326\357\330_\202\336:\nf\013\250\304\357\234\2143""\njz\275\325\323\356j\367\357\365\034'\307\007\354M\224\2029z\266\303b\345I^%*\030\320\253d\265L\312\026\261\266\311\366\037\344\217\367`\200\357dwf\270\261\261\333\003\303\361w3\333'\347P\003S\023\214\372\023\344\312\343\246\202g\202\273\220\3079\311\005\024\372\013\366%{\245\261\006\326\305/\255u\201\342\212=\203\342~\251\261\342\224[3\002/n9\177\265\224\226\331\276I\026^\342\000\270\255\205\222\367\345'\207S\344<\030\305\314\301\270J\256\216\265fZ\305v\232\213\035th\337\207%\232s\016\3019u\030\230\363\242}\271\275\016\014d+F\205\376\233\372\274}\232\\\003\027\240)\032\302W@c\234&\031\3607Z\031\256E\3010\376\000v\321\035\364\312\270\3343\242\247-%Z\023\317\204.n\315\271Z\317G\tf8\007\362\303!\010\374\271\235\216\002aK\010'\315 \234h\247\311\375Iz\374\220\317/\341\201\320\030\241&eW\200b\232\031\236Q\222\020'\360\320\021\335\014\021\207\274\016\317\365\234\363'p]\361\231d\271\323\275\326\350\362j\242L\254\013[\233\016\312\367\233\016\242\214\000a\243_N\0235\233`b\327\033'\032\257\310\367c\255\031\331\261\352\023\360\365yOw\313E\030\362I\327;9S?E\255\303W\215W\316\014=A\3160\357\373u\243\000F03\227\341h\001\353\377.\263\343\375\365\354\303\001\376J\315\177\224\325\357y\003\275A\260k\264\372\324\334i\245\002\307\316\215 \002\267kVV\303\325\356p`\376\320\354\247\2361\250\362\335\336k\344\332}r\037\225\356n\357\025\373\035\2529_\323\263\2258_W\242\207\253\017\344\207\320n\3179\017\344\272\021\001:4\206\272\330~\035j(\241C\247\227S\322\035N\006\371\316a\213\t\223\354\333\371\313u\010pm\207\032E\347j3-.\334#\330\246\033 `\313\324\355P\330\371\007\n\201\334y\206;IP\016\250T\377U\277\013\333\373\221\323\003\347\312\327P\343\033\262\360\226\274\005\177\360\035y\267\312\330w\226\251\243\300\326>\342\201\357\370\016r\257\007\004\247?\340\341s\260\340\366\367\342\311\320\345\351:\300\370R\034\302\241\237\225\216\366\301\303\005l\332\335\3663r\223\251\260+`C\216\321\223\361%;p\251Q\3462S\010\320\360v\202\321\000N\371\270)\316\312\007\342\346\013p\220u\177\264\361\322\311:\277""\201\0138\351\251E\336\374\017\315t\224\021?\265\\Fx\263\364AB\217?\262c3\320#\333\177\267\032[\300\343\336\326h\373(\234aB\343\366R#\262J\266\326X\217\300\3369\221\025\262W\235\3760/\360\324\334\367\234/\272\307\322G\216y\315\021#GT\341I\202j^\007z3\373q\313\200\355\010a\244\033~\325\263^\224\252y\264\225\247n\013\234\343\257\023\211QX\277!O\231\204\241\371\225@\rg]\326y\333\032\002g\217\3142s\303S\373\321\226\361\320x\333\036\242~\021lC\215h\357\022G\022\242\377=\261\361\0210\032\237\223\031\026\356)\222b\205T\326\223F\376\027(\354\017d\324\367\345:\022\267\246\250!Du\250/\3137\002\346\010\265\322\036Q\203\360\323V\306\265\021\273\302VK\200\354a[\336\024\272Q\317Y\200\027N\225\310\274=\022\347<\330t_\264\262\262F\230_\363\226\334~\342E^\342h0\032\332\272\330\232\221\223\240!\277F\276C.\217R\343\367K\356\213\244\361\237\0166\031Z\215\242\204\227\2333\373\336Bq5:\355\211\262\277\263\200o\247j:\306\266\320?\346\037\2367\214\341\237\274\215\021\277\332\241\332\007`g\377n\357\327\365qX\236\256\275\236\243;\257\301\241~\211)\002t\241\217\356\274\255\247\261n\177\215\032\324\\\311y\202\363E\355*\342\217\327n\325A\370X\300{\263\371\2162\354\004:\343\237\323\210\021T\351\253}Z\313\324\262\314\rX\2029,4o7gBE\264\253\307j'kJm\035\003\233\351\332\235\372\031n\254v1\300\367\030\254\304X\343\251\332z\3753f\0345\2569\367\232\367Z\367\332w\311,\013R\340t2v\226\233\351\273!k\375\264?*\316\013\373E\343\"\032$\254\331n\254\215\254\230\335\371P\347\021\221T\235\331.\265_\220\211\014v\325^\017\306\021\221\361\307]6S\377\313\367SB\250\3727`]\374\333\r\244\t\030pn\320\312\370wS\202\252\337\202q\2630\303i\001\343\255,\363\307\016\003G\256\242\031\221D\366\330\376\nV\370\0360\216\306\"\373jG\352\227\353\206}\252q\000\352\202\253\360%\254A\265\376\213\275\276\347\357\374>\332|\017\220\240\307\226f\202`\341\2522~ \376^\375Q\243\313\265m\260\210\366\310\367n\310\207\201\356\333\331P\321~\003\r^rV\232\345\366l{\223,\200\376[!+\240/u\242\227\005Zr\226\205l\372\334\272?r\263\363\204G\200\251""\256\254@\022\007\031u\272\002\r\337\010\264\3435\354W\312\2609\013U2\256\311-N\274O(6\372\003\364\3379\231\360\330\277smnN\342\032\306^\243?\3303\2016n5\202ef\314\372\345!\327\025g\325\037r\333\224\023<\266\31742\342b\036\026\207\310\374\375@90dVv\204\305c\t8\237\202'\344f\002u\206\251\302\022b\010\234\022}\203\325\326)\364\276\305\021\236n\034o\334\345Y?o\234\275\270\202T\334\310\027!\036=\266\277n\210\035\202\212\234i\2546OaPZ\350\017\223/\215\3674^\231f\271\217>/zQu&\232\257\350Ap\002w\265En\374\210\226\341\021r\344l=S\247\361\363\261\332W\365k\250Sv{Q\346\177\000g{\031\264j\337\361\332\020\350\361\201F\377^\337qr\034}\353\273\215\264\357\217\273\252\362\264;\212s\340\027\034t\326Z|v\247\251\007g\331\367\330\224I\367h\213\2364<\013;\202\231M\362\013\215\tu\203G\207>\006G=o\277\244'9\032\366\244\033\2349Z\215\364\302ID\256\323\341\303\030@Z\310 \034a\244\373*\271\372\214<\003\243\302\370\317'\237\230]\023\007\340g\342\300\317\007P\211\367\356d\3600\350\252\235\251\337\201\311\\k\334a\016\346\227\2213$\220\004x\324:J\303\251\244\033\274ta\320\317\332\2070\234@\r\223np\313Y\020\220\242\356\343\262\220,\r\205uO\265\327\005\324=\214\305\220\237\320\n\303\304\362\221\235\033\265\031\026\345>\2663_;\017.\301?\211u_\003_w\246\261\314\344o/\010\351\362\233?M\033\371\370\346\007\301_K;w\2337Z/\333\331\275 d\346\277o\376\n\346K@2n4_\266X\363>\344\377\240\371!\014\3069\343\315\007\255\3456\313\212\370\020\005\027\001=\340\r\020\241\356E\262\210QQ\024\226\363u\035\367_\320\236 'aSR\203\202\234\272\331x\346\374\014\376Vo\332>O\276\005\241\335\3539Y{\r\273\345%^A@\317\340$&\313\270QA\272\321VB9\270\001\307x\206\306\345\250\023\017.\371n\357Erq\230\014c\024\2477E\263\202\031\214\265\321\300M\256\255\264\377\"\277[\304\252F\3437\244{\211,\255\223u\003G\234\252\377\211\351\260\360\2101f\307F|\253\361\312\371\025vLo\232\24434\020\205\347\237V\337\264\227\361r\203C\363W+u\305\033\362\033\362\246\004\373g\255k\004\267\321\310\2017\370\363\346\200\205?\326\201\331O\341g\366\323\337""\361\347\367O5\374\321>\375\251\033~~\352~\213?o\2735\374\321\272?\340\317\207\356?\273YR\0273\256\333\365O\353\0314u\25633\347\253\3729T\3418\346\0210M\216aL\"<\023\330\220|&\003\366{8\370\207\332\347h\330\003\270w\237\334\237j\377A^\303\002\026\000`\337i\234#w\177\306\324\tx\014*\330}\344\353\007\344\001\213\222\\'\327\351j\365\325\016\327O\331\207p\345\221k,w\355\315\035tQ\031F]\351\032\305\331\216\036\030;\200\242\365'\273z\300\307\305\263\205x\303\204\032\231\177\332\257\032\277\222\273\023|\\\027\310\205\207\344\341\014\231\301\253\t\273\275\227\310%(>o\313\004\345w;\343Z\237]{\335\347\353\353\030\261\376\027\310\347*x`\273\335_\200=\330\203\367<P\250\377]\273\213\266(\252\247\036\347\030H`\367\277v21\325\036S\2731-T\003\303\002\003\233\203\030\017L\250\210\366\017\234\353BE\232\016\370\251u\254\235\330\341\275\372=zz\370\36504\377\300\321[\331\204j\344\213K\3663\272\335\374z\260A\310\360\263\3661P\224\2115/\003\323q\001\375\232p\020\223\357\177n\017\242C\234Ts\300\336\302\350\225P\363\216\243\220\273\271\266N\336\274M\232\344C\360\034QX\375\212h\312\376\325\324\333\356$w\273\207\350\001\250\374/\013\261\024\227";
    PyObject *data = __Pyx_DecompressString(cstring, 9370, 1);
    if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
    const char* const bytes = __Pyx_PyBytes_AsString(data);
    #if !CYTHON_ASSUME_SAFE_MACROS
    if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
    #endif
    #else /* compression: none (31941 bytes) */
const char* const bytes = "Consclassifier {0} yields a classification with {1} different constraint classesDetector callback returned '{}' of type '{}'. Expected a dictionary with optional keys 'newpartialdecs' and 'result'.Expected iterable as first argument. Got '{}' instead.Format Length of value for 'decchar' must be 1Note that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.<PartialDecomposition: nBlocks=The value of the key 'newpartialdecs' is '{}' of type '{}'. Expected a list of 'PartialDecomposition' objects.Varclassifier {0} yields a classification with {1} different variable classes.>?add_notealldecompositions/border areacannot create Column with GCG_COL* == NULLcannot create ConsPart with ConsPartition* == NULLcannot create DetProbData with DETPROBDATA* == NULLcannot create Model with SCIP* == NULLcannot create PartialDecomposition with PARTIALDECOMP* == NULLcannot create VarPart with VarPartition* == NULLdetection/classification/varclassifier/{}/enableddetection/detectors/{}/enableddetection/detectors/{}/finishingenableddetection/detectors/{}/postprocessingenableddisableenableexperimental benders scoregc is not supported. Only \"svg\" and \"png\" are supported.isenabled, maxForWhiteScore=max foreseeing whitemax foreseeing white with aggregation info, nLinkingVars=, nMasterConss=, nMasterVars=no default __reduce__ due to non-trivial __cinit__ppc-max-whiteppc-max-white with aggregation infopricingsolver/{}/exactenabledpricingsolver/{}/heurenabledself._gcg,self._iis,self._scip,self._valid cannot be converted to a Python object for picklingself._iis,self._scip,self._valid cannot be converted to a Python object for picklingself.consPartition cannot be converted to a Python object for picklingself.detectorname is not None or self.model is not Noneself.gcg_col cannot be converted to a Python object for picklingself.model is not None or self.name is not Noneself.model ""is not None or self.solvername is not Noneself.model is not None or self.scorename is not Noneself.thisptr cannot be converted to a Python object for picklingself.varPartition cannot be converted to a Python object for picklingsrc/pygcgopt/consclassifier.pxisrc/pygcgopt/decomposition.pxisrc/pygcgopt/detector.pxisrc/pygcgopt/detprobdata.pxisrc/pygcgopt/gcg.pyxsrc/pygcgopt/partition.pxisrc/pygcgopt/pricing_solver.pxisrc/pygcgopt/score.pxisrc/pygcgopt/varclassifier.pxi<stringsource>strong decomposition scorevis.gpConsClassifierConsClassifier.__reduce_cython__ConsClassifier.__setstate_cython__ConsClassifier.classifyConsClassifier.freeConsClassifierConsPartConsPart.__reduce_cython__ConsPart.__setstate_cython__ConsPart.addClassConsPart.assignConsToClassConsPart.getAllSubsetsConsPart.getClassDecompInfoConsPart.getClassDescriptionConsPart.getClassNameConsPart.getClassNameOfConsConsPart.getClassOfConsConsPart.getNClassesConsPart.getNConssConsPart.getNConssOfClassesConsPart.getNameConsPart.isConsClassifiedConsPart.reduceClassesConsPart.removeEmptyClassesConsPart.setClassDecompInfoConsPart.setClassDescriptionConsPart.setClassNameDetProbDataDetProbData.__reduce_cython__DetProbData.__setstate_cython__DetProbData.addCandidatesNBlocksNVotesDetProbData.addConsPartitionDetProbData.addPartialdecToAncestorDetProbData.addPartialdecToFinishedDetProbData.addPartialdecToFinishedUncheckedDetProbData.addPartialdecToOpenDetProbData.addVarPartitionDetProbData.candidatesNBlocksDetProbData.classificationtimeDetProbData.clearAncestorPartialdecsDetProbData.clearCurrentPartialdecsDetProbData.clearFinishedPartialdecsDetProbData.conspartitioncollectionDetProbData.createConsPartDetProbData.createConssAdjacencyDetProbData.createVarPartDetProbData.freeTemporaryDataDetProbData.getAncestorPartialdecDetProbData.getConsDetProbData.getConsPartitionDetProbData.getConsPartitionsDetProbData.getConssForConsDetProbData.getConssForVarDetProbData.getFinishedPartialdecDetProbData.getFinishedPartialdecsDetProbData.g""etIndexForConsDetProbData.getIndexForVarDetProbData.getNAncestorPartialdecsDetProbData.getNConsPartitionsDetProbData.getNConssDetProbData.getNConssForConsDetProbData.getNConssForVarDetProbData.getNFinishedPartialdecsDetProbData.getNNonzerosDetProbData.getNOpenPartialdecsDetProbData.getNPartialdecsDetProbData.getNVarPartitionsDetProbData.getNVarsDetProbData.getNVarsForConsDetProbData.getOpenPartialdecsDetProbData.getOrigVarsFixedZeroDetProbData.getRelevantConssDetProbData.getRelevantVarsDetProbData.getSortedCandidatesNBlocksDetProbData.getValDetProbData.getValsForConsDetProbData.getVarDetProbData.getVarPartitionDetProbData.getVarPartitionsDetProbData.getVarsForConsDetProbData.isAssignedToOrigProbDetProbData.isConsCardinalityConsDetProbData.isConsSetppDetProbData.isConsSetppcDetProbData.isConssAdjInitializedDetProbData.isPartialdecDuplicateofFinishedDetProbData.nblockscandidatescalctimeDetProbData.partialdecIsNoDuplicateOfPartialdecsDetProbData.postprocessingtimeDetProbData.sortFinishedForScoreDetProbData.translatePartialdecsDetProbData.translatingtimeDetProbData.varpartitioncollectionDetectorDetector.__reduce_cython__Detector.__setstate_cython__Detector.exitDetectorDetector.finishPartialdecDetector.freeDetectorDetector.initDetectorDetector.postprocessPartialdecDetector.propagatePartialdecDetector.setParamAggressiveDetector.setParamDefaultDetector.setParamFastFalseGCGColumnGCGColumn.__reduce_cython__GCGColumn.__setstate_cython__GCGMasterModelGCGMasterModel.__reduce_cython__GCGMasterModel.__setstate_cython__GCGMasterModel.addColGCGMasterModel.getOrigvarsGCGPricingModelGCGPricingModel.__reduce_cython__GCGPricingModel.__setstate_cython__GCGPricingModel.createGcgColINFEASIBLEIterableListModelModel.__reduce_cython__Model.__setstate_cython__Model.addDecompositionModel.addDecompositionFromConssModel.addPreexistingPartialDecompositionModel.addVarModel.createDecompositionModel.detectModel.getDetprobdataOrigModel.getDetprobdataPresolvedModel.getDualboundModel.getMasterProbModel"".getMastervarsModel.getNConsClassifiersModel.getNVarClassifiersModel.getPartDecompFromIDModel.includeConsClassifierModel.includeDefaultPluginsModel.includeDetectorModel.includePricingSolverModel.includeScoreModel.includeVarClassifierModel.listConsClassifiersModel.listDecompositionsModel.listDetectorsModel.listPricingSolversModel.listScoresModel.listVarClassifiersModel.optimizeModel.presolveModel.printStatisticsModel.printVersionModel.setDetectorEnabledModel.setDetectorFinishingEnabledModel.setDetectorPostprocessingEnabledModel.setGCGSeparatingModel.setPricingSolverEnabledModel.setPricingSolverExactEnabledModel.setPricingSolverHeuristicEnabledModel.setVarClassifierEnabledModel.writeAllDecompsNOTAPPLICABLEOPTIMALPY_ALLPY_BLOCKPY_BOTHPY_COMPLETEPY_COMPLETED_CONSTOMASTERPY_CONS_DECOMPINFOPY_CONS_DECOMPINFO.__reduce_cython__PY_CONS_DECOMPINFO.__setstate_cython__PY_GCG_PRICINGSTATUSPY_GCG_PRICINGSTATUS.__reduce_cython__PY_GCG_PRICINGSTATUS.__setstate_cython__PY_LINKINGPY_MASTERPY_NOTPY_ONLY_MASTERPY_ONLY_PRICINGPY_PARTIALPY_SCIP_CALLPY_USERGIVENPY_USERGIVEN.__reduce_cython__PY_USERGIVEN.__setstate_cython__PY_VAR_DECOMPINFOPY_VAR_DECOMPINFO.__reduce_cython__PY_VAR_DECOMPINFO.__setstate_cython__PartialDecompositionPartialDecomposition.__copy__PartialDecomposition.__reduce_cython__PartialDecomposition.__setstate_cython__PartialDecomposition._repr_png_PartialDecomposition._repr_svg_PartialDecomposition.addAncestorIDPartialDecomposition.addBlockPartialDecomposition.addClockTimePartialDecomposition.addDecChangesFromAncestorPartialDecomposition.addDetectorChainInfoPartialDecomposition.addNNewBlocksPartialDecomposition.addPctConssFromFreePartialDecomposition.addPctConssToBlockPartialDecomposition.addPctConssToBorderPartialDecomposition.addPctVarsFromFreePartialDecomposition.addPctVarsToBlockPartialDecomposition.addPctVarsToBorderPartialDecomposition.aggInfoCalculatedPartialDecomposition.alreadyAssignedConssToBlocksPartialDecomposition.assignCurrentStairlinkingPartialDecomposition"".assignOpenConssToMasterPartialDecomposition.assignSmallestComponentsButOneConssAdjacencyPartialDecomposition.buildDecChainStringPartialDecomposition.calcAggregationInformationPartialDecomposition.checkAllConssAssignedPartialDecomposition.checkConsistencyPartialDecomposition.completePartialDecomposition.completeByConnectedPartialDecomposition.completeByConnectedConssAdjacencyPartialDecomposition.completeGreedilyPartialDecomposition.considerImplicitsPartialDecomposition.copyPartialDecomposition.copyPartitionStatisticsPartialDecomposition.deleteEmptyBlocksPartialDecomposition.deleteOpenconsPartialDecomposition.deleteOpenvarPartialDecomposition.displayInfoPartialDecomposition.findVarsLinkingToMasterPartialDecomposition.findVarsLinkingToStairlinkingPartialDecomposition.fixConsToBlockIdPartialDecomposition.fixConsToBlockPartialDecomposition.fixConsToMasterPartialDecomposition.fixConssToBlockIdPartialDecomposition.fixConssToBlockPartialDecomposition.fixConssToMasterPartialDecomposition.fixVarToLinkingPartialDecomposition.fixVarToMasterPartialDecomposition.fixVarToStairlinkingPartialDecomposition.getAncestorListPartialDecomposition.getAncestorIDPartialDecomposition.getBlocksForEqClassPartialDecomposition.getConssForBlockPartialDecomposition.getConssForBlocksPartialDecomposition.getDetectorchainInfoPartialDecomposition.getDetectorClockTimePartialDecomposition.getDetectorClockTimesPartialDecomposition.getDetprobdataPartialDecomposition.getEqClassForBlockPartialDecomposition.getFinishedByFinisherPartialDecomposition.getHashValuePartialDecomposition.getIDPartialDecomposition.getLinkingvarsPartialDecomposition.getMasterconssPartialDecomposition.getMastervarsPartialDecomposition.getNAncestorsPartialDecomposition.getNBlocksPartialDecomposition.getNCoeffsForMasterPartialDecomposition.getNCoeffsForBlockPartialDecomposition.getNConssPartialDecomposition.getNConssForBlockPartialDecomposition.getNDetectorsPartialDecomposition.getNEquivalenceClassesPartialDecomposition.getNLinkingvarsP""artialDecomposition.getNMasterconssPartialDecomposition.getNMastervarsPartialDecomposition.getNNewBlocksVectorPartialDecomposition.getNNewBlocksPartialDecomposition.getNOpenconssPartialDecomposition.getNOpenvarsPartialDecomposition.getNStairlinkingvarsPartialDecomposition.getNTotalStairlinkingvarsPartialDecomposition.getNVarsPartialDecomposition.getNVarsForBlockPartialDecomposition.getNVarsForBlocksPartialDecomposition.getOpenconssPartialDecomposition.getOpenvarsPartialDecomposition.getPctConssToBorderPartialDecomposition.getPctConssToBorderVectorPartialDecomposition.getPctConssToBlockPartialDecomposition.getPctConssToBlockVectorPartialDecomposition.getPctConssFromFreePartialDecomposition.getPctConssFromFreeVectorPartialDecomposition.getPctVarsFromFreePartialDecomposition.getPctVarsFromFreeVectorPartialDecomposition.getPctVarsToBorderPartialDecomposition.getPctVarsToBorderVectorPartialDecomposition.getPctVarsToBlockPartialDecomposition.getPctVarsToBlockVectorPartialDecomposition.getRepVarmapPartialDecomposition.getScorePartialDecomposition.getTranslatedpartialdecidPartialDecomposition.getUsergivenPartialDecomposition.getVarProbindexForBlockPartialDecomposition.getVarsForBlockPartialDecomposition.hasSetppMasterPartialDecomposition.hasSetppcMasterPartialDecomposition.hasSetppccardMasterPartialDecomposition.isAssignedToOrigProbPartialDecomposition.isCompletePartialDecomposition.isConsMasterconsPartialDecomposition.isConsOpenconsPartialDecomposition.isTrivialPartialDecomposition.isVarBlockvarOfBlockPartialDecomposition.isVarLinkingvarPartialDecomposition.isVarMastervarPartialDecomposition.isVarOpenvarPartialDecomposition.isVarStairlinkingvarPartialDecomposition.isVarStairlinkingvarOfBlockPartialDecomposition.preparePartialDecomposition.refineToBlocksPartialDecomposition.refineToMasterPartialDecomposition.removeAncestorIDPartialDecomposition.removeMasterconsPartialDecomposition.setAncestorListPartialDecomposition.setConsPartitionStatisticsPartialDecomposition.setConsToMa""sterPartialDecomposition.setDetectorPropagatedPartialDecomposition.setDetectorFinishedPartialDecomposition.setDetectorFinishedOrigPartialDecomposition.setDetectorClockTimesPartialDecomposition.setFinishedByFinisherPartialDecomposition.setFinishedByFinisherOrigPartialDecomposition.setNBlocksPartialDecomposition.setPctConssToBlockVectorPartialDecomposition.setPctConssFromFreeVectorPartialDecomposition.setPctConssToBorderVectorPartialDecomposition.setPctVarsFromFreeVectorPartialDecomposition.setPctVarsToBorderVectorPartialDecomposition.setPctVarsToBlockVectorPartialDecomposition.setStemsFromOrigPartialDecomposition.setTranslatedpartialdecidPartialDecomposition.setUsergivenPartialDecomposition.setVarPartitionStatisticsPartialDecomposition.setVarToBlockIdPartialDecomposition.setVarToLinkingPartialDecomposition.setVarToMasterPartialDecomposition.setVarToStairlinkingPartialDecomposition.shouldCompletedByConsToMasterPartialDecomposition.showVisualizationPartialDecomposition.sortPathPricingSolverPricingSolver.__reduce_cython__PricingSolver.__setstate_cython__PricingSolver.exitSolutionPricingSolver.exitSolverPricingSolver.freeSolverPricingSolver.initSolutionPricingSolver.initSolverPricingSolver.solvePricingSolver.solveHeuristicPricingSolver.updateSolver__Pyx_PyDict_NextRefSOLVERLIMITScoreScore.__reduce_cython__Score.__setstate_cython__Score.scorecalculateScore.scorefreeTemporaryDirectoryUNBOUNDEDUNKNOWNVarClassifierVarClassifier.__reduce_cython__VarClassifier.__setstate_cython__VarClassifier.classifyVarClassifier.freeVarClassifierVarPartVarPart.__reduce_cython__VarPart.__setstate_cython__VarPart.addClassVarPart.assignVarToClassVarPart.getAllSubsetsVarPart.getClassDecompInfoVarPart.getClassDescriptionVarPart.getClassNameVarPart.getClassNameOfVarVarPart.getClassOfVarVarPart.getNClassesVarPart.getNVarsVarPart.getNVarsOfClassesVarPart.getNameVarPart.isVarClassifiedVarPart.reduceClassesVarPart.removeEmptyClassesVarPart.setClassDecompInfoVarPart.setClassDescriptionVarPart.setClassN""ameaddAncestorIDaddBlockaddCandidatesNBlocksNVotesaddClassaddClockTimeaddColaddConsPartitionaddDecChangesFromAncestoraddDecompositionaddDecompositionFromConssaddDetectorChainInfoaddNNewBlocksaddPartialdecToAncestoraddPartialdecToFinishedaddPartialdecToFinishedUncheckedaddPartialdecToOpenaddPctConssFromFreeaddPctConssToBlockaddPctConssToBorderaddPctVarsFromFreeaddPctVarsToBlockaddPctVarsToBorderaddPreexistingPartialDecompositionaddVaraddVarPartitionaggInfoCalculatedallalreadyAssignedConssToBlocksancestorancestor_idargsassignConsToClassassignCurrentStairlinkingassignOpenConssToMasterassignSmallestComponentsButOneConssAdjacencyassignVarToClassasyncio.coroutinesblockblock1_idblock2_idblock_conssblock_idblockrepidbothbufferbuildDecChainStringcc_bufferc_consclassifiernamec_deccharc_decinfoc_descc_detectornamec_directoryc_extensionc_namec_scorenamec_shortnamec_solvernamec_valsc_varclassifiernamec_varscalcAggregationInformationcandidatecandidatescandidatesNBlockscheckAllConssAssignedcheckConsistency__class____class_getitem__classicclassificationtimeclassifyclassindexclearAncestorPartialdecsclearCurrentPartialdecsclearFinishedPartialdecscline_in_tracebackclocktimecolcollections.abccompletecompleteByConnectedcompleteByConnectedConssAdjacencycompleteGreedilycomppartialdecconsconsIndexconsclassesmasterconsclassifierconsclassifiernameconsclassifiersconsiderImplicitsconspartitioncollectionconspartitioncollection_elementconspartitioncollection_ptrconspatitionptrconssconsschangedcopycopyPartitionStatistics__copy__cpp_ancestorcpp_ancestor_idcpp_blockcpp_block1_idcpp_block2_idcpp_block_idcpp_blockrepidcpp_candidatescpp_candidatesNBlockscpp_classificationtimecpp_clocktimecpp_comppartialdeccpp_consclassesmastercpp_consindexcpp_conspartitioncollectioncpp_dec_idcpp_detailLevelcpp_detectorchain_idcpp_detectorchainindexcpp_finishedcpp_firstblock_idcpp_fromorigcpp_ignoreDetectionLimitscpp_nblockscpp_nblockscandidatescalctimecpp_newlistcpp_newvectorcpp_nnewblockscpp_otherdatacpp_otherpartial""deccpp_otherpartialdecscpp_partialdeccpp_partialdecscpp_partitioncpp_pctcpp_postprocessingtimecpp_rep_idcpp_repidcpp_translatingtimecpp_varclasseslinkingcpp_varclassesmastercpp_variablescpp_varidcpp_varindexcpp_varpartitioncollectioncreateConsPartcreateConssAdjacencycreateDecompositioncreateDirectorycreateGcgColcreateProbBasiccreateVarPartcreategcgcreatescipdecdec_iddecchardecidsdecinfodecompdecompInfodecompsdefaultPluginsdeleteEmptyBlocksdeleteOpenconsdeleteOpenvardescdet_prob_datadetailLeveldetectdetectordetector_namedetectorchain_iddetectorchainindexdetectornamedetectorsdetprobdata__dict___dictdirectorydisplayInfodualsolconvenabledenabledfinishingenabledpostprocessing__enter__enumerateexactEnabledexist_ok__exit__exitDetectorexitSolutionexitSolverextensionfindVarsLinkingToMasterfindVarsLinkingToStairlinkingfinishPartialdecfinishedfirstblock_idfixConsToBlockfixConsToBlockIdfixConsToMasterfixConssToBlockfixConssToBlockIdfixConssToMasterfixVarToLinkingfixVarToMasterfixVarToStairlinkingformatfreeConsClassifierfreeDetectorfreeSolverfreeTemporaryDatafreeVarClassifier_freegcgfreqcallroundfreqcallroundoriginalfromorig__func__gcggcg_colgetgetAllSubsetsgetAncestorIDgetAncestorListgetAncestorPartialdecgetBlocksForEqClassgetClassDecompInfogetClassDescriptiongetClassNamegetClassNameOfConsgetClassNameOfVargetClassOfConsgetClassOfVargetConsgetConsPartitiongetConsPartitionsgetConssForBlockgetConssForBlocksgetConssForConsgetConssForVargetDetectorClockTimegetDetectorClockTimesgetDetectorchainInfogetDetprobdatagetDetprobdataOriggetDetprobdataPresolvedgetDualboundgetEqClassForBlockgetFinishedByFinishergetFinishedPartialdecgetFinishedPartialdecsgetHashValuegetIDgetIndexForConsgetIndexForVargetLinkingvarsgetMasterProbgetMasterconssgetMastervarsgetNAncestorPartialdecsgetNAncestorsgetNBlocksgetNClassesgetNCoeffsForBlockgetNCoeffsForMastergetNConsClassifiersgetNConsPartitionsgetNConssgetNConssForBlockgetNConssForConsgetNConssForVargetNConssOfClassesgetNDetectorsgetNEquivalenceClassesgetNF""inishedPartialdecsgetNLinkingvarsgetNMasterconssgetNMastervarsgetNNewBlocksgetNNewBlocksVectorgetNNonzerosgetNOpenPartialdecsgetNOpenconssgetNOpenvarsgetNPartialdecsgetNStairlinkingvarsgetNTotalStairlinkingvarsgetNVarClassifiersgetNVarPartitionsgetNVarsgetNVarsForBlockgetNVarsForBlocksgetNVarsForConsgetNVarsOfClassesgetNamegetOpenPartialdecsgetOpenconssgetOpenvarsgetOrigVarsFixedZerogetOrigvarsgetPartDecompFromIDgetPctConssFromFreegetPctConssFromFreeVectorgetPctConssToBlockgetPctConssToBlockVectorgetPctConssToBordergetPctConssToBorderVectorgetPctVarsFromFreegetPctVarsFromFreeVectorgetPctVarsToBlockgetPctVarsToBlockVectorgetPctVarsToBordergetPctVarsToBorderVectorgetRelevantConssgetRelevantVarsgetRepVarmapgetScoregetSortedCandidatesNBlocksgetStagegetTranslatedpartialdecidgetUsergivengetValgetValsForConsgetVargetVarPartitiongetVarPartitionsgetVarProbindexForBlockgetVarsForBlockgetVarsForCons__getstate__hasSetppMasterhasSetppcMasterhasSetppccardMasterheuristicEnablediididxignoreDetectionLimitsincludeConsClassifierincludeDefaultPluginsincludeDetectorincludePricingSolverincludeScoreincludeVarClassifierindexinitDetectorinitSolutioninitSolverisAssignedToOrigProbisCompleteisConsCardinalityConsisConsClassifiedisConsMasterconsisConsOpenconsisConsSetppisConsSetppcisConssAdjInitializedisPartialdecDuplicateofFinishedisTrivialisVarBlockvarOfBlockisVarClassifiedisVarLinkingvarisVarMastervarisVarOpenvarisVarStairlinkingvarisVarStairlinkingvarOfBlock_is_coroutineis_enabledis_presolvedisrayitemsjoinpathkwargslinkinglistConsClassifierslistDecompositionslistDetectorslistPricingSolverslistScoreslistVarClassifierslowerlowerbound__main__mastermaster_conssmaster_probmastervarsmaxForWhiteScoremaxNumberOfClassesmaxcallroundmaxcallroundoriginalmincallroundmincallroundoriginalmkdirmodel__module__n_consclassifiersn_detectorsn_pricing_solversn_scoresn_varclassifiersn_varsname__name__nblocksnblockscandidatescalctimenclassesnconsnconsparts__new__newlistnewpartialdecsnewvectornnewblocksnpartialdecsn""varsnvotesonly_masteronly_pricingoptimizeoriginaloriginalvarsotherdataotherpartialdecotherpartialdecsotherpartialdecs_elementotherpartialdecs_ptrparentspartialdecpartialdecIsNoDuplicateOfPartialdecspartialdecindexpartialdecspartialdecs_elementpartialdecs_ptrpartitionpartitionIndexpathlibpctpdpngpoppostprocessPartialdecpostprocessingtimepreparepresolvepresolvedpricingSolverpricing_solver_namepricing_solverspricingprobprintprintStatisticsprintVersionpriorityproblemNameprobnrpropagatePartialdecproxypyGCGColpyVarpygcgopt.gcgpygcgopt.utilpyscipopt.scip__pyx_checksum__pyx_result__pyx_state__pyx_type__pyx_unpickle_ConsClassifier__pyx_unpickle_Detector__pyx_unpickle_PY_CONS_DECOMPINFO__pyx_unpickle_PY_GCG_PRICINGSTATUS__pyx_unpickle_PY_USERGIVEN__pyx_unpickle_PY_VAR_DECOMPINFO__pyx_unpickle_PricingSolver__pyx_unpickle_Score__pyx_unpickle_VarClassifier__pyx_vtable____qualname__rread_bytesread_textredcost__reduce__reduceClasses__reduce_cython____reduce_ex__refineToBlocksrefineToMasterremoveAncestorIDremoveEmptyClassesremoveMasterconsrep_idrepid_repr_png__repr_svg_resultrowscorescorecalculatescorefreescorenamescoresscorevalueselfsetAncestorListsetBoolParamsetClassDecompInfosetClassDescriptionsetClassNamesetConsPartitionStatisticssetConsToMastersetDetectorClockTimessetDetectorEnabledsetDetectorFinishedsetDetectorFinishedOrigsetDetectorFinishingEnabledsetDetectorPostprocessingEnabledsetDetectorPropagatedsetFinishedByFinishersetFinishedByFinisherOrigsetGCGSeparatingsetNBlockssetParamAggressivesetParamDefaultsetParamFastsetPctConssFromFreeVectorsetPctConssToBlockVectorsetPctConssToBorderVectorsetPctVarsFromFreeVectorsetPctVarsToBlockVectorsetPctVarsToBorderVectorsetPricingSolverEnabledsetPricingSolverExactEnabledsetPricingSolverHeuristicEnabledsetStemsFromOrigsetTranslatedpartialdecidsetUsergivensetVarClassifierEnabledsetVarPartitionStatisticssetVarToBlockIdsetVarToLinkingsetVarToMastersetVarToStairlinking__set_name__setdefault__setstate____setstate_cython__settingshortnameshouldC""ompletedByConsToMastershowVisualizationskipsolvesolveHeuristicsolvernamesortsortFinishedForScoresourceModelstatestatusstr_conversionsupersvgtempfile__test__translatePartialdecstranslateSymmetrytranslatingtimetypingupdateupdateSolveruse_setstateusefulrecallvvalsvaluevaluesvarvarIndexvarbndschangedvarclasseslinkingvarclassesmastervarclassifiervarclassifier_namevarclassifiernamevarclassifiersvariablesvaridvarobjschangedvarpartitioncollectionvarpartitioncollection_elementvarpartitioncollection_ptrvarpatitionptrvarsvisweakrefwith_suffixworkonpartialdecwriteAllDecomps\200\001\330\0040\260\001\260\026\260q\200\001\330\004+\2501\250F\260!\200\001\330\004#\2401\240F\250!\320\004+\2501\330\010\014\210H\220M\240\021\240!\320\004;\2701\360\032\000\t\r\210M\230\021\320\032:\270'\300\021\320BR\320RS\200\001\330\0042\260!\2606\270\021\200\001\330\004*\250!\2506\260\021\200A\200\001\330\004,\250A\250V\2601\200A\360\020\000\t\"\240\024\240\\\3201A\300\021\300!\330\010\014\210N\320\032,\250A\250_\270A\200A\360\020\000\t\"\240\024\240\\\3201A\300\021\300!\330\010\017\210t\220>\240\037\260\001\260\021\200A\360\020\000\t\"\240\024\240\\\3201A\300\021\300!\330\010\017\210t\220>\320!2\260!\2601\200A\360\020\000\t\"\240\024\240\\\3201A\300\021\300!\330\010\017\210t\220>\320!4\260A\260^\3007\310!\3101\200A\360\020\000\t$\2401\330\010\014\210H\220L\240\001\240\021\200A\360\n\000\t$\2401\330\010\014\210H\220N\240!\2401\200A\360\006\000\t$\2401\330\010\014\210H\320\024%\240Q\240a\200A\360\n\000\t$\2401\330\010\032\230$\230h\240n\260A\260Q\330\010\017\210q\200A\360\010\000\t<\2701\340\010\014\320\014/\250q\330\014*\320*;\320;Z\320Z[\330\014'\240z\260\021\260!\330\010\014\210H\320\024/\250q\200A\360\n\000\t#\320\"2\260!\2604\260q\330\010\035\230W\240A\240Q\200A\360\014\000\t\033\320\0322\260\"\260J\270d\300!\330\010'\320'>\270b\300\n\310$\310a\330\010\017\210y\230\007\230q\240\014\250A\250T\260\024\260U\270%\270q\300\001\200A\360\030\000\t2\260\036\270q\340\010.\250a\340\010\014\320\014#\2401""\330\014\036\320\036/\320/B\300!\330\014\033\230:\240Q\240a\330\010\017\210t\2208\320\033@\300\001\320AU\320Uf\320fg\200A\360\n\000\t3\260/\300\021\330\010\014\210H\320\024,\250A\250Q\200A\330\0104\260A\330\010\014\210H\320\0241\260\021\200A\360\n\000\t\034\2304\230x\320';\2701\330\010\017\210q\200A\360\n\000\t\034\2304\230x\320'7\260q\330\010\017\210q\200A\360\"\000\t\034\2304\230x\320'8\270\001\330\010\017\210q\200A\360\n\000\t\034\2304\230x\320'9\270\021\330\010\017\210q\200A\360\n\000\t\034\2304\230x\320'<\270A\330\010\017\210q\200A\360\016\000\t\034\2304\230x\320'A\300\021\330\010\017\210q\200A\360\n\000\t\034\2304\230x\320'D\300A\330\010\017\210q\200A\360\014\000\t$\2404\240x\320/M\310Q\330\010\017\210q\200A\360\n\000\t\034\2304\230x\320'=\270Q\330\010\017\210q\200A\360\n\000\t$\2404\240x\250\177\270a\330\010\032\230'\240\021\240!\200A\360\n\000\t\034\2304\230x\240\177\260a\330\010\017\210q\200A\360\n\000\t\034\2304\230x\240{\260!\330\010\017\210q\200A\360\n\000\t\034\2304\230x\240u\250A\330\010\017\210q\200A\360\020\000\t\034\2304\230x\240z\260\021\330\010\017\210q\200A\360\020\000\t\014\2104\210z\230\021\230'\240\021\330\014\022\220)\2301\320\034T\320T[\320[\\\320\\`\320`a\320ab\330\010\014\210H\220A\330\014\020\320\020 \240\001\240\035\250a\200A\360\020\000\t\014\2104\210z\230\021\230'\240\021\330\014\022\220)\2301\320\034T\320T[\320[\\\320\\`\320`a\320ab\330\010\014\210H\220A\330\014\020\320\020!\240\021\240-\250v\260Q\200A\360\022\000\t\014\2104\210z\230\021\230'\240\021\330\014\022\220)\2301\320\034T\320T[\320[\\\320\\`\320`a\320ab\330\010\035\230Q\330\010\014\210H\220A\340\014\027\220t\230?\250!\250=\270\006\270a\330\010\017\210q\200A\360\034\000\t\014\2106\220\027\230\004\230A\330\014\020\320\020 \240\007\240q\250\001\360\010\000\t\014\2103\210a\210t\320\023%\240R\240t\250;\260a\330\014\020\220\005\220U\230!\2303\230a\230t\320#5\260R\260t\270;\300a\330\020\024\220I\230Q\340\010\034\230D\320 0\260\006\260a\260q\330\010\014\320\014\035\230Q\230f\240A""\330\010\017\210q\200A\360\014\000\t\033\320\0326\260b\270\n\300$\300a\330\010%\320%@\300\002\300*\310D\320PQ\330\010\017\210y\230\007\230q\240\n\250!\2504\250t\2605\270\005\270Q\270a\200A\330\010#\2407\250!\320+<\270A\270T\300\021\200A\360\014\000\t<\2707\300!\320Cg\320gh\320hl\320ls\320st\340\010\017\210q\200A\360\n\000\t,\2508\2601\330\010\014\210H\320\024.\250a\250q\200A\360\014\000\t,\2509\260A\330\010\014\210H\320\024$\240A\240Q\200A\330\010%\320%9\270\021\270$\270a\330\010,\320,?\270q\300\004\300A\340\010\017\210q\320\020 \240\001\240\037\260\001\260\023\260G\2701\270I\300T\310\025\310e\320ST\320TU\200A\360\n\000\t\025\220A\220X\230Q\230d\240!\330\010\014\320\014 \240\007\240q\250\004\250H\260N\300!\3004\300q\200A\360\020\000\t\025\220A\220Y\230a\230t\2401\200A\330\010<\270A\330\010\014\210H\320\024)\250\021\200A\360\n\000\t%\240A\330\010\014\210H\220M\240\021\240!\200A\360\n\000\t-\250A\330\010\014\210H\320\024*\250!\2501\200A\360\n\000\t-\250A\330\010\014\210H\320\024,\250A\250Q\200A\360\n\000\t-\250A\330\010\014\210H\320\024-\250Q\250a\200A\360\n\000\t-\250A\330\010\014\210H\320\024.\250a\250q\200A\340\010\024\220A\220[\240\001\240\024\240Q\200A\360\014\000\t\025\220A\320\025%\240Q\240d\250'\260\021\200A\360\n\000\t\025\220A\320\025)\250\021\250$\250a\200A\340\010\024\220A\320\025'\240q\250\004\250G\2601\200A\360\020\000\t%\240D\250\010\3200@\300\001\300\021\330\010\026\220g\230Q\230h\240a\200A\360\020\000\t%\240D\250\r\260^\3001\300A\330\010\026\220g\230Q\230h\240d\250!\200A\360\014\000\t-\250D\260\010\3208I\310\021\330\010\017\210x\220w\230a\230s\240&\250\004\250E\260\021\200A\360\n\000\t%\240D\250\010\260\r\270Q\330\010\017\210q\200\001\360\010\000\005\r\210A\330\004\014\210G\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\0172\260$\260a\260w\270k\310\027\320PQ\340\010\017\320\0172\260$\260a\260w\270k\310\021\200\001\360\010\000\005\r\210A\330\004\014\210G""\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\0173\2604\260q\270\007\270{\310'\320QR\340\010\017\320\0173\2604\260q\270\007\270{\310!\200\001\360\010\000\005\r\210A\330\004\014\210G\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\0175\260T\270\021\270'\300\033\310G\320ST\340\010\017\320\0175\260T\270\021\270'\300\033\310A\200\001\360\010\000\005\r\210A\330\004\014\210G\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\017-\250T\260\021\260'\270\033\300G\3101\340\010\017\320\017-\250T\260\021\260'\270\033\300A\200A\360\n\000\t%\320$G\300q\310\004\310A\330\0102\3202T\320TU\320UY\320YZ\340\010\017\210q\320\020'\240q\250\016\260a\260s\270'\300\021\300)\3104\310u\320TY\320YZ\320Z[\200A\360\014\000\t%\320$G\300q\310\004\310A\330\010\017\210q\200A\360\014\000\t\r\210H\320\024(\250\001\200A\360\014\000\t)\250\004\250H\3204I\310\021\330\010\017\210y\230\007\230q\240\003\2404\240u\250A\200A\360\030\000\t\031\230\004\230H\240G\2501\330\010\021\220\036\230q\240\001\330\010,\320,<\270A\270U\300(\310*\320TU\330\010\026\220g\230Q\320\036.\250a\200A\360\030\000\t\031\230\004\230H\240G\2501\330\010\021\220\036\230q\240\001\330\010.\320.?\270q\300\005\300X\310Z\320WX\330\010\027\220w\230a\320\0370\260\001\200A\360\010\000\t\r\210H\220H\230A\200A\360\016\000\t\r\210H\220I\230Q\200A\360\n\000\t#\240!\330\010\014\210H\220N\240!\2401\200A\360\016\000\t\r\210H\220O\2401\200A\360\032\000\t\r\210H\220O\2401\240D\250\014\260A\200A\360\014\000\t\r\210H\220O\2401\200A\360\n\000\t\"\240\021\330\010\014\210H\320\024*\250!\2501\200A\360\n\000\t\"\240\037\260\001\330\010\014\210H\320\024*\250!\2501\200A\360\n\000\t\r\210H\320\0242\260!\200A\360\010\000\t\024\220>\240\021\240!\330\010\014\210H\320\024(""\250\001\250\021\200A\360\n\000\t\"\240\037\260\001\330\010\014\210H\320\024(\250\001\250\021\200A\360\006\000\t\r\210H\320\024)\250\021\200A\360\020\000\t\r\210H\320\0246\260a\200A\360\006\000\t\r\210H\320\024,\250A\200A\360\014\000\t\r\210H\320\024$\240A\240T\250\021\200A\360\n\000\t\r\210H\320\024,\250A\200A\360\030\000\t\r\210H\320\024A\300\021\200A\360\014\000\t\r\210H\320\024,\250A\200A\360\016\000\t\r\210H\320\024%\240Q\200A\360\n\000\t\r\210H\320\024-\250Q\200A\360\n\000\t\"\240\021\330\010\014\210H\320\024%\240Q\240a\200A\360\024\000\t\r\210H\320\024&\240a\200A\360\n\000\t\r\210H\320\024&\240a\200A\360\006\000\t\r\210H\320\024&\240a\200A\360\020\000\t#\240!\330\010\014\210H\320\024&\240a\240q\200A\360\n\000\t\"\240\021\330\010\014\210H\320\024.\250a\250q\200A\330\010*\250!\330\010\014\210H\320\024'\240q\200A\360\020\000\t\r\210H\320\024/\250q\260\013\2701\200A\360\014\000\t+\250!\330\010\014\210H\320\024/\250q\260\001\200A\360\006\000\t+\250!\330\010,\250I\260Q\330\0101\260\021\330\0100\260\001\330\010\014\210H\320\024.\250a\320/G\300\177\320Vm\320mn\200A\360\006\000\t+\250!\330\010,\250I\260Q\330\0101\260\021\330\010\014\210H\320\024/\250q\3200H\310\017\320WX\200A\360\014\000\t-\250I\260Q\330\010\014\210H\320\024%\240Q\240a\200A\360\n\000\t&\320%I\310\021\310$\310a\330\0104\3204W\320WX\320X\\\320\\]\340\010\017\210q\320\020(\250\001\250\037\270\001\270\023\270G\3001\300I\310T\320QV\320V[\320[\\\320\\]\200A\360\014\000\t&\320%I\310\021\310$\310a\330\010\017\210q\200A\360\006\000\t)\320(K\3101\310D\320PQ\330\010\032\230'\240\021\240!\200A\360\020\000\t!\240\004\240L\260\017\270q\300\001\330\010\014\210M\320\031*\250!\250>\270\021\200A\360\020\000\t!\240\004\240L\260\017\270q\300\001\330\010\017\210t\220=\320 0\260\001\260\021\200A\360\020\000\t!\240\004\240L\260\017\270q\300\001\330\010\017\210t\220=\320 2\260!\260=\300\007\300q\310\001\200A\360\020\000\t!\240\004\240L\260\017\270q\300\001\330\010\017\210t\220=\240\016\250a\250q\200A\360\020\000\t\r\210M""\320\031,\250A\250\\\270\021\200A\360\n\000\t\035\230M\250\021\250$\250a\330\010\"\240,\250a\250t\2601\340\010\017\210q\220\017\230q\240\006\240a\240s\250'\260\021\260)\2704\270u\300E\310\021\310!\200A\360\014\000\t\025\220N\240!\2401\330\010\014\210H\320\024)\250\021\250!\200A\360\020\000\t\r\210N\320\032-\250Q\250l\270!\200A\360\006\000\t)\320(P\320PQ\320QU\320UV\330\010\032\230'\240\021\240!\200A\340\010 \320 @\300\001\300\024\300Q\330\010\033\2306\240\026\240q\250\r\260R\260q\340\0103\2601\260D\270\007\270q\300\010\310\001\310\021\340\010\022\320\022'\240w\250a\320/S\320ST\320TX\320X_\320_e\320ef\320fk\320ko\320ot\320ty\320yz\320z{\340\010\014\210A\210Q\340\010\017\210q\200A\330\010-\250Q\330\010\014\210H\320\024*\250!\200A\360\016\000\t\036\230Q\330\010\035\230Q\330\010\032\230$\230h\320&>\270a\270{\310!\330\010\017\210q\200A\360\022\000\t\036\230Q\330\010\"\240!\330\010\"\240$\240h\250m\2701\270K\300q\330\010\017\210q\200A\360\022\000\t&\240Q\330\010*\250$\250h\260o\300Q\330\010\014\210H\320\024)\250\021\250-\260\177\300a\300s\310,\320VW\200A\330\010\014\320\014\035\230Q\230a\200A\360\026\000\t \320\037=\270Q\270d\300!\330\010(\320(E\300Q\300d\310!\340\010\017\210q\320\020\"\240!\2409\250A\250S\260\007\260q\270\t\300\024\300U\310%\310q\320PQ\200A\360\n\000\t+\250!\330\010\035\230T\240\030\320);\2701\270A\330\010\017\210q\200A\360\020\000\t&\240T\250\030\3201B\300!\3001\330\010\027\220w\230a\230x\240}\260G\2706\300\021\300!\200A\360\n\000\t&\240T\250\030\3201F\300a\330\010\017\210q\200A\360\020\000\t&\240T\250\030\3201G\300q\310\001\330\010#\2407\250!\2501\200A\360\n\000\t&\240T\250\030\3201G\300q\330\010\017\210q\200A\360\n\000\t&\240T\250\030\3201I\310\021\330\010\017\210q\200A\360\n\000\t&\240T\250\030\3201J\310!\330\010\017\210q\200A\360\n\000\t&\240T\250\030\3201K\3101\330\010\017\210q\200A\360\014\000\t.\250T\260\030\3209L\310A\330\010\017\320\017$\240G\2501\250C\250t\2605\270\001\200A\360\014\000\t.\250T\260\030\3209P\320PQ\330\010\017\320\017$\240G\2501""\250C\250t\2605\270\001\200A\360\n\000\t+\250!\330\010\035\230T\240\030\320)<\270A\270Q\330\010\017\210q\200A\360\n\000\t+\250!\330\010\035\230T\240\030\320)=\270Q\270a\330\010\017\210q\200A\360\020\000\t&\240T\250\036\260~\300Q\300a\330\010\027\220w\230a\230x\240t\2501\200A\360\n\000\t)\250\001\330\010\035\230T\240\030\320)>\270a\270q\330\010\017\210q\200A\360\006\000\t.\250T\260\030\270\021\330\010\017\210q\200A\360\006\000\t\036\230T\240\030\250\021\330\010\017\210q\200A\360\006\000\t.\250T\260\030\270\021\330\010\017\210x\220w\230a\230s\240&\250\004\250E\260\021\200A\360\014\000\t*\250\024\250X\3205E\300Q\330\010\017\210y\230\007\230q\240\003\2404\240u\250A\200A\360\014\000\t*\250\024\250X\3205F\300a\330\010\017\210{\230'\240\021\240#\240T\250\025\250a\200A\360\020\000\t\032\230\027\240\001\240\024\240X\250X\260Q\260a\200A\360\032\000\t\"\240\024\240Y\250c\260\023\260A\330\010%\320%6\260a\260t\2707\300$\300a\330\010#\2407\250!\2501\200A\360\020\000\t.\250Z\260q\330\010\014\210H\320\0245\260Q\260a\200A\360\014\000\t.\250Z\260q\330\010\014\210H\320\024,\250A\250Q\200A\360\020\000\t.\250Z\260q\330\010\017\210t\2208\320\033;\2701\270A\200A\360\024\000\t.\250Z\260q\330\010\017\210t\2208\320\0333\2601\260A\200A\360\020\000\t.\250Z\260q\330\010\017\210t\2208\320\033/\250q\260\001\200A\360\010\000\t:\270\021\340\010\014\320\014.\250a\330\014)\320)9\3209W\320WX\330\014&\240j\260\001\260\021\330\010\014\210H\320\024.\250a\200A\360\n\000\t\037\230a\330\010\014\210H\320\024(\250\001\250\021\200A\360\n\000\t\037\230a\330\010\014\210H\320\024&\240a\240q\200A\330\010\036\230a\330\010\014\210H\320\024.\250a\250q\200A\360\n\000\t\037\230a\330\010\014\210H\320\024'\240q\250\001\200A\360\022\000\t/\250a\330\010\014\210H\320\024/\250q\260\001\200A\360\014\000\t\037\230a\330\010\"\240$\240h\320.B\300!\3001\330\010\017\210q\200A\360\024\000\t\020\210\177\230a\230t\2401\200A\360\006\000\t/\250d\260(\270!\330\010\017\210y\230\007\230q\240\003\240=\260\007\260v\270Q\270g\300T\310\025""\310a\200A\330\010*\250$\250h\3206H\310\001\330\010*\250$\250h\260o\300Q\330\010\017\210q\220\013\2307\240!\240=\260\010\270\001\270\034\300T\310\035\320V]\320]a\320aj\320jk\200A\360\020\000\t\033\230$\230h\320&;\2701\270A\330\010\017\210q\200A\360\n\000\t\033\230$\230h\320&6\260a\330\010\017\210q\200A\360\014\000\t\033\230$\230h\320&7\260q\270\001\330\010\017\210q\200A\360\n\000\t\033\230$\230h\320&8\270\001\330\010\017\210q\200A\360\014\000\t!\240\001\330\010\032\230$\230h\320&8\270\001\270\021\330\010\017\210q\200A\360\014\000\t!\240\001\330\010\032\230$\230h\320&9\270\021\270!\330\010\017\210q\200A\360\014\000\t\033\230$\230h\320&9\270\021\330\010\017\210y\230\007\230q\240\004\240H\320,=\270Q\270d\300&\310\004\310E\320QV\320VW\320WX\200A\360\n\000\t#\240$\240h\320.B\300!\330\010\017\210q\200A\360\010\000\t\033\230$\230h\320&=\270Q\330\010\017\210q\200A\360\n\000\t#\240$\240h\320.>\270a\330\010\017\210q\200A\360\014\000\t#\240$\240h\320.>\270a\270q\330\010*\250$\250h\260o\300Q\330\010\017\210y\230\007\230q\240\r\250W\260A\260[\300\004\300L\320PQ\200A\360\n\000\t\033\230$\230h\320&:\270!\330\010\017\210q\200A\360\n\000\t\033\230$\230h\320&@\300\001\330\010\017\210q\200A\330\010\032\230$\230h\320&@\300\001\330\010\017\210q\200A\360\014\000\t#\240$\240h\320.?\270q\300\001\330\010*\250$\250h\260o\300Q\330\010\017\210{\230'\240\021\240-\250x\260q\270\014\300D\310\r\320UV\200A\360\n\000\t\033\230$\230h\240f\250A\330\010\017\210q\200A\360\n\000\t\033\230$\230h\240i\250q\330\010\017\210q\200A\360\n\000\t\033\230$\230h\240j\260\001\330\010\017\210q\200A\360\n\000\t\033\230$\230h\240k\260\021\330\010\017\210q\200A\360\n\000\t#\240$\240h\250l\270!\330\010*\250$\250h\260o\300Q\330\010\017\210y\230\007\230q\240\r\250W\260A\260[\300\004\300L\320PQ\200A\360\n\000\t#\240$\240h\250m\2701\330\010*\250$\250h\260o\300Q\330\010\017\210{\230'\240\021\240-\250x\260q\270\014\300D\310\r\320UV\200A\360\n\000\t\033\230$\230h\240m\2601\330\010\017\210q\200A\360\n\000\t)\250\001\330\010\032""\230$\230h\240n\260A\260Q\330\010\017\210q\200A\360\n\000\t#\240$\240h\250n\270A\330\010*\250$\250h\260o\300Q\330\010\017\210y\230\007\230q\240\r\250W\260A\260[\300\004\300L\320PQ\200A\360\n\000\t\033\230$\230h\240n\260A\330\010\017\210q\200A\360\016\000\t+\250$\250h\260o\300Q\330\010\033\2304\230x\320'7\260q\270\r\300_\320TU\320UX\320XY\330\010\017\210q\200A\360\016\000\t+\250$\250h\260o\300Q\330\010\033\2304\230x\320'8\270\001\270\035\320FV\320VW\320W[\320[\\\330\010\017\210q\200A\360\016\000\t+\250$\250h\260o\300Q\330\010\033\2304\230x\240}\260A\260]\300/\320QR\320RU\320UV\330\010\017\210q\200A\360\020\000\t+\250$\250h\260o\300Q\330\010\033\2304\230x\320'<\270A\270]\310/\320YZ\320Z]\320]i\320ij\330\010\017\210q\200A\360\016\000\t+\250$\250h\260o\300Q\330\010\033\2304\230x\320'<\270A\270]\310/\320YZ\320Z]\320]^\330\010\017\210q\200A\360\020\000\t+\250$\250h\260o\300Q\330\010\033\2304\230x\320'C\3001\300M\320Q`\320`a\320ad\320dp\320pq\330\010\017\210q\200A\360\016\000\t+\250$\250h\260o\300Q\330\010\033\2304\230x\240\177\260a\260}\320DT\320TU\320UY\320YZ\330\010\017\210q\200A\360\016\000\t+\250$\250h\260o\300Q\330\010\033\2304\230x\240\177\260a\260}\300O\320ST\320TW\320WX\330\010\017\210q\200A\360\014\000\t+\250$\250h\260o\300Q\330\010\014\210H\220N\240!\240=\260\017\270q\300\003\3001\200A\360\020\000\t!\240\001\330\010*\250$\250h\260o\300Q\330\010\014\210H\220N\240!\240=\260\017\270q\300\003\300<\310q\200A\360\014\000\t+\250$\250h\260o\300Q\330\010\014\210H\220O\2401\240M\3201A\300\021\300$\300a\200A\360\020\000\t+\250$\250h\260o\300Q\330\010\014\210H\220O\2401\240M\260\037\300\001\300\023\300A\200A\360\014\000\t+\250$\250h\260o\300Q\330\010\014\210H\320\024$\240A\240]\3202B\300!\3004\300q\200A\360\014\000\t+\250$\250h\260o\300Q\330\010\014\210H\320\024$\240A\240]\260/\300\021\300#\300Q\200A\360\014\000\t+\250$\250h\260o\300Q\330\010\014\210H\320\024%\240Q\240m\3203C\3001\300D\310\001\200A\360\026\000\t\"\240\021\330\010!\240\021\330\010*\250$\250h\260o\300Q\330""\010\014\210H\320\024)\250\021\250-\260\177\300a\300s\310,\320Ve\320ef\200A\360\n\000\t#\240$\240h\250o\270Q\330\010*\250$\250h\260o\300Q\330\010\017\210{\230'\240\021\240-\250x\260q\270\014\300D\310\r\320UV\200A\360\n\000\t#\240$\240h\250o\270Q\330\010*\250$\250h\260o\300Q\330\010\017\210y\230\007\230q\240\r\250W\260A\260[\300\004\300L\320PQ\200A\360\n\000\t\033\230$\230h\240o\260Q\330\010\017\210q\200A\360\020\000\t\027\220n\240A\240Q\330\010\026\220n\240A\240Q\330\010\021\220\036\230q\240\001\330\010\024\220A\220_\240A\330\014\020\220\007\220}\240M\260\021\330\014\034\230G\240=\260\001\340\010\r\210Y\220g\230W\240F\250!\2501\330\010\r\210]\230!\330\010\021\220\021\220!\200A\340\010\017\210q\200A\330\010\017\210q\200A\360\016\000\t\023\220(\230!\330\010\022\220-\230q\330\0102\260!\2604\260w\270j\310\001\200A\360\024\000\t\031\230\017\240q\250\004\250A\330\010\020\220\003\2201\220A\330\010\"\240,\250f\260A\260V\2702\270Q\330\010\"\240,\250f\260A\260V\2702\270Q\340\010\014\210E\220\025\220a\220q\330\014\022\220!\2206\230\032\2409\250A\250S\260\001\330\014\022\220!\2205\230\004\230A\230Q\340\010\027\220q\230\005\230T\240\030\250\021\250)\2608\2708\3008\3107\320RY\320YZ\340\010\034\230G\2401\240A\340\010\014\210A\210Q\330\010\014\210A\210Q\340\010\017\210q\200A\330\010\030\230\017\240q\250\004\250A\330\010\024\220A\220_\240A\240U\250#\250Q\200A\340\010\027\220q\230\004\230G\2401\340\010\r\210R\210}\230A\200A\360\n\000\t \230q\330\010\014\210H\220K\230q\240\001\200A\360\n\000\t(\240q\330\010\014\210H\320\024$\240A\240Q\200A\360\020\000\t\022\220\036\230q\240\001\330\010\014\210M\320\031-\250Q\250l\270!\200A\360\020\000\t\022\220\036\230q\240\001\330\010\014\210M\230\035\240a\240|\2601\200A\360\020\000\t\022\220\036\230q\240\001\330\010\014\210N\320\032.\250a\250|\2701\200A\360\020\000\t\022\220\036\230q\240\001\330\010\014\210N\230-\240q\250\014\260A\200A\360\030\000\t\022\220\036\230q\240\001\330\010\021\220\036\230q\240\001\330\010\017\210t\220=\240\t\250\021\250(""\260(\270!\200A\360\030\000\t\022\220\036\230q\240\001\330\010\021\220\036\230q\240\001\330\010\017\210t\220>\240\031\250!\2508\2608\2701\200A\330\010\020\220\n\230%\230r\240\027\250\002\250(\260!\340\010\026\220a\220u\230K\240q\340\010\017\210q\200A\360\014\000\t\020\210t\220=\240\010\250\002\250'\260\021\260!\200A\330\010\017\210t\2201\220A\200A\360\n\000\t\020\210t\2208\230=\250\001\200A\360\024\000\t\020\210t\2208\2307\240!\2405\250\001\200A\360\014\000\t\020\210t\2208\2309\240A\200A\360\014\000\t\020\210t\2208\2309\240A\240\\\260\021\260$\260h\270o\310R\310w\320VZ\320Zh\320hi\320in\320no\200A\360\014\000\t\020\210t\2208\320\0330\260\001\200A\360\020\000\t\020\210t\2208\230?\250!\2501\200A\360\024\000\t\020\210t\2208\320\033+\2501\250A\200A\360\020\000\t\020\210t\2208\320\033+\2501\250A\200A\360\020\000\t\020\210t\2208\320\033+\2501\250D\260\001\200A\360\014\000\t\020\210t\2208\320\033+\2501\200A\360\024\000\t\020\210t\2208\230?\250!\2501\200A\360\020\000\t\020\210t\2208\320\0331\260\021\260!\200A\360\014\000\t\020\210t\2208\320\0331\260\021\200A\360\014\000\t\020\210t\2208\230=\250\001\200A\360\020\000\t\020\210t\2208\230=\250\001\250\021\200A\360\014\000\t\020\210t\2208\320\0333\2601\200A\360\020\000\t\020\210t\2208\230?\250!\2503\250a\200A\360\020\000\t\020\210t\2208\320\033,\250A\250Q\200A\360\014\000\t\020\210t\2208\230:\240Q\200A\360\014\000\t\020\210t\2208\320\033-\250Q\200A\360\014\000\t\020\210t\2208\320\033.\250a\200A\360\014\000\t\020\210t\2208\320\033/\250q\200A\360\020\000\t\020\210t\2208\230<\240q\250\001\200A\360\014\000\t\020\210t\220>\240\032\2501\200A\360\014\000\t\020\210t\220=\240\t\250\021\200A\360\014\000\t\020\210t\220=\320 2\260!\200A\360\014\000\t\020\210t\220=\320 3\2601\200A\360\020\000\t\020\210t\220=\320 3\2601\260A\200A\360\014\000\t\020\210t\220>\320!4\260A\200A\360\020\000\t\020\210t\220>\320!4\260A\260Q\200A\360\020\000\t\020\210t\220=\320 4\260A\260[\300\007\300q\310\001\200A\360\020\000\t\020\210t\220>\320!5\260Q\260k\300\027""\310\001\310\021\200A\360\014\000\t\020\210t\220>\240\030\250\022\2507\260!\2601\200A\360\014\000\t\020\210t\220=\240\014\250A\200A\330\010\017\210t\320\023,\250A\250Q\200A\360\014\000\t\020\210t\220>\240\034\250Q\200A\360\020\000\t\020\210t\220=\240\r\250Q\250k\270\027\300\001\300\021\200A\360\020\000\t\020\210t\220>\240\035\250a\250{\270'\300\021\300!\200A\360\034\000\t\020\210t\220=\240\016\250a\250u\260I\270X\300Q\200A\360\024\000\t(\240t\320+?\270q\330\010\n\320\n\033\2301\230A\330\010\014\210E\220\031\230)\2401\240A\330\014\017\210t\220:\230Q\230g\240Q\330\020\022\220/\240\021\240'\250\021\340\020\022\320\022\"\240!\2407\250!\330\010\014\320\014\035\230Q\230a\330\010\017\210q\200A\360\030\000\t\020\210t\220>\240\036\250q\260\006\260m\3001\200A\360\014\000\t\030\220w\230a\230t\2408\2507\260!\2601\320\004D\300A\360\026\000\t\r\210M\230\021\320\032C\3007\310!\320K[\320[\\\320\004E\300Q\360\022\000\t\r\210M\230\021\320\032M\310W\320TU\320Uj\320jk\320\004F\300a\360\026\000\t\r\320\014)\250\021\320*?\270q\330\010\014\320\014-\250Q\320.C\3001\320\004(\320(H\320H]\320]r\360\000\000s\001I\002\360\000\000I\002J\002\360\016\000\t\014\2101\330\014\020\220\001\220\032\2306\240\021\240)\2506\260\030\270\021\330\010\026\220n\240A\240Q\330\010\026\220n\240A\240Q\330\010\024\220A\320\025'\240q\250\004\250G\260=\300\r\310Z\320WX\320\004I\310\021\360\026\000\t\r\210M\230\021\320\032H\310\007\310q\320P`\320`a\320\004K\3101\360\024\000\t\r\210M\230\021\320\0329\270\027\300\001\320AW\320WX\320\004O\310q\360\024\000\t\r\210M\230\021\320\0328\270\007\270q\320@V\320VW\200\001\330\004\n\210+\220Q\200\001\360\010\000\005\016\210T\220\037\240\004\240A\330\004\014\210G\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\017)\250\024\250Q\250g\260[\300\007\300q\340\010\017\320\017)\250\024\250Q\250g\260[\300\001\200\001\360\010\000\005\016\210T\220\030\230\024\230Q\330\004\014\210G\2201\220F\230,""\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\017.\250d\260!\2607\270+\300W\310A\340\010\017\320\017.\250d\260!\2607\270+\300Q\200\001\360\010\000\005\016\210T\220\030\230\024\230Q\330\004\014\210G\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\017&\240d\250!\2507\260+\270W\300A\340\010\017\320\017&\240d\250!\2507\260+\270Q\200\001\360\010\000\005\016\210T\220\030\230\024\230Q\330\004\014\210G\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\017/\250t\2601\260G\270;\300g\310Q\340\010\017\320\017/\250t\2601\260G\270;\300a\200\001\330\004&\240a\240v\250Q\320\004b\320bm\320mn\360\016\000\t\037\230n\250A\250Q\330\010\021\220\036\230q\240\001\330\010\024\220A\320\025,\250A\330\014\020\220\007\320\027,\250H\260J\270a\330\014!\240\037\3200E\300Q\340\010\025\220Y\230g\240W\250F\260!\2601\330\010\025\220X\230Q\330\010\021\220\021\220!\320\004e\320ef\360\024\000\t+\250)\2601\340\0103\2601\340\010\014\320\014(\250\001\330\014#\320#4\3204L\310A\330\014 \240\n\250!\2501\330\010-\250T\260\030\3209N\310a\310\177\320^t\320tu\330\010\017\320\017$\240G\2501\250C\250t\2605\270\001\320\004f\320fq\320qr\360\016\000\t \230~\250Q\250a\330\010\021\220\036\230q\240\001\330\010\024\220A\320\025-\250Q\330\014\020\220\007\320\027-\250X\260Z\270q\330\014!\320!1\3201G\300q\340\010\026\220i\230w\240g\250V\2601\260A\330\010\026\220h\230a\330\010\021\220\021\220!\320\004\\\320\\l\360\000\000m\001C\002\360\000\000C\002\\\002\360\000\000\\\002t\002\360\000\000t\002R\003\360\000\000R\003^\003\360\000\000^\003i\003\360\000\000i\003@\004\360\000\000@\004]\004\360\000\000]\004i\004\360\000\000i\004}\004\360\000\000}\004~\004\360\022\000\t\014\2103\210a\210y\230\003\2301\330\014\022\220*\230A\230Q\340\010\031\230\036\240q""\250\001\330\010\024\220C\220q\230\016\240a\240q\330\010\021\220\036\230q\240\001\330\010\024\220A\320\025'\240q\330\014\020\220\007\320\027'\240{\260(\270/\310\036\320WX\330\014#\320#9\3209O\310z\320Yb\320bc\330\014#\2406\250\036\3207J\310*\320Td\320de\330\014\034\320\034;\320;W\320WX\330\014*\320*E\300Q\340\010\020\220\t\230\027\240\007\240v\250Q\250a\330\010\020\320\020 \240\001\330\010\021\220\021\220!\320\004[\320[o\360\000\000p\001D\002\360\000\000D\002E\002\330\010\027\220~\240Q\240a\330\010\021\220\036\230q\240\001\340\010\024\220A\320\025+\2501\330\014\020\220\007\220~\240X\250Z\3207I\310\036\320WX\330\014\"\320\"<\320<Q\320Qf\320fg\330\014$\320$<\320<M\310Q\340\010\025\220Y\230g\240W\250F\260!\2601\330\010\025\220^\2401\330\010\021\220\021\220!\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\2205\230\010\240\001\240\021\330\004\007\200|\2207\230!\330\010'\240q\250\010\260\016\270a\330\004\013\2101\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\220>\240\030\250\021\250!\330\004\007\200|\2207\230!\330\0100\260\001\3201B\300.\320PQ\330\004\013\2101\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\220=\240\010\250\001\250\021\330\004\007\200|\2207\230!\330\010/\250q\3200@\300\016\310a\330\004\013\2101\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\2208\2308\2401\240A\330\004\007\200|\2207\230!\330\010*\250!\250;\260n\300A\330\004\013\2101\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\320\023$\240H\250A\250Q\330\004\007\200|\2207\230!\330\0103\2601\3204H\310\016\320VW\330\004\013\2101\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\320\023%\240X\250Q\250a\330\004\007\200|\2207\230!\330\0104\260A\3205J\310.\320XY\330\004\013\2101\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\320\023'\240x\250q\260\001\330\004\007\200|\2207\230!\330\0106\260a\3207N\310n\320\\]\330\004\013\2101\200\001\340\004\037\230q\320 0\260\013\270;\300k""\320QR\330\004\023\220<\230x\240q\250\001\330\004\007\200|\2207\230!\330\010.\250a\250\177\270n\310A\330\004\013\2101\200\001\330\004/\250q\260\006\260a";
    PyObject *data = NULL;
    CYTHON_UNUSED_VAR(__Pyx_DecompressString);
    #endif
    PyObject **stringtab = __pyx_mstate->__pyx_string_tab;
    Py_ssize_t pos = 0;
    for (int i = 0; i < 1053; i++) {
      Py_ssize_t bytes_length = index[i].length;
      PyObject *string = PyUnicode_DecodeUTF8(bytes + pos, bytes_length, NULL);
      if (likely(string) && i >= 64) PyUnicode_InternInPlace(&string);
      if (unlikely(!string)) {
        Py_XDECREF(data);
        __PYX_ERR(0, 1, __pyx_L1_error)
      }
      stringtab[i] = string;
      pos += bytes_length;
    }
    for (int i = 1053; i < 1344; i++) {
      Py_ssize_t bytes_length = index[i].length;
      PyObject *string = PyBytes_FromStringAndSize(bytes + pos, bytes_length);
      stringtab[i] = string;
      pos += bytes_length;
      if (unlikely(!string)) {
        Py_XDECREF(data);
        __PYX_ERR(0, 1, __pyx_L1_error)
      }
    }
    Py_XDECREF(data);
    for (Py_ssize_t i = 0; i < 1344; i++) {
      if (unlikely(PyObject_Hash(stringtab[i]) == -1)) {
        __PYX_ERR(0, 1, __pyx_L1_error)
      }
    }
    #if CYTHON_IMMORTAL_CONSTANTS
    {
      PyObject **table = stringtab + 1053;
      for (Py_ssize_t i=0; i<291; ++i) {
        #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
        Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
        #else
        Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
        #endif
      }
    }
    #endif
  }
  {
    PyObject **numbertab = __pyx_mstate->__pyx_number_tab + 0;
    int8_t const cint_constants_1[] = {0,1};
    int32_t const cint_constants_4[] = {76513566L,104261058L,160002037L,229442799L,238750788L};
    for (int i = 0; i < 7; i++) {
      numbertab[i] = PyLong_FromLong((i < 2 ? cint_constants_1[i - 0] : cint_constants_4[i - 2]));
      if (unlikely(!numbertab[i])) __PYX_ERR(0, 1, __pyx_L1_error)
    }
  }
  #if CYTHON_IMMORTAL_CONSTANTS
  {
    PyObject **table = __pyx_mstate->__pyx_number_tab;
    for (Py_ssize_t i=0; i<7; ++i) {
      #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
      Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
      #else
      Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
      #endif
    }
  }
  #endif
  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: init_codeobjects ### */
typedef struct {
    unsigned int argcount : 5;
    unsigned int num_posonly_args : 1;
    unsigned int num_kwonly_args : 1;
    unsigned int nlocals : 5;
    unsigned int flags : 10;
    unsigned int first_line : 11;
} __Pyx_PyCode_New_function_description;
/* NewCodeObj.proto */
static PyObject* __Pyx_PyCode_New(
        const __Pyx_PyCode_New_function_description descr,
        PyObject * const *varnames,
        PyObject *filename,
        PyObject *funcname,
        PyObject *line_table,
        PyObject *tuple_dedup_map
);


static int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate) {
  PyObject* tuple_dedup_map = PyDict_New();
  if (unlikely(!tuple_dedup_map)) return -1;
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 6};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[0] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_freeDetector, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[0])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 10};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[1] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_initDetector, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[1])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 14};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[2] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_exitDetector, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[2])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 18};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detprobdata, __pyx_mstate->__pyx_n_u_workonpartialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[3] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_propagatePartialdec, __pyx_mstate->__pyx_kp_b_iso88591_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[3])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 22};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detprobdata, __pyx_mstate->__pyx_n_u_workonpartialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[4] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_finishPartialdec, __pyx_mstate->__pyx_kp_b_iso88591_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[4])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 26};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detprobdata, __pyx_mstate->__pyx_n_u_workonpartialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[5] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_postprocessPartialdec, __pyx_mstate->__pyx_kp_b_iso88591_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[5])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 30};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[6] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_setParamAggressive, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[6])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 34};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[7] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_setParamDefault, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[7])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 38};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[8] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detector_pxi, __pyx_mstate->__pyx_n_u_setParamFast, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[8])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[9] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_T_A_G1F_a_vWE_Q_q_q_Qg_q_Qg, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[9])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[10] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_avQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[10])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 7};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[11] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_pricing_solver_pxi, __pyx_mstate->__pyx_n_u_freeSolver, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[11])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 10};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[12] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_pricing_solver_pxi, __pyx_mstate->__pyx_n_u_initSolver, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[12])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 13};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[13] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_pricing_solver_pxi, __pyx_mstate->__pyx_n_u_exitSolver, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[13])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[14] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_pricing_solver_pxi, __pyx_mstate->__pyx_n_u_initSolution, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[14])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 19};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[15] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_pricing_solver_pxi, __pyx_mstate->__pyx_n_u_exitSolution, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[15])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {6, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 22};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pricingprob, __pyx_mstate->__pyx_n_u_probnr, __pyx_mstate->__pyx_n_u_varobjschanged, __pyx_mstate->__pyx_n_u_varbndschanged, __pyx_mstate->__pyx_n_u_consschanged};
    __pyx_mstate_global->__pyx_codeobj_tab[16] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_pricing_solver_pxi, __pyx_mstate->__pyx_n_u_updateSolver, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[16])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 25};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pricingprob, __pyx_mstate->__pyx_n_u_probnr, __pyx_mstate->__pyx_n_u_dualsolconv};
    __pyx_mstate_global->__pyx_codeobj_tab[17] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_pricing_solver_pxi, __pyx_mstate->__pyx_n_u_solve, __pyx_mstate->__pyx_kp_b_iso88591_A_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[17])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 28};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pricingprob, __pyx_mstate->__pyx_n_u_probnr, __pyx_mstate->__pyx_n_u_dualsolconv};
    __pyx_mstate_global->__pyx_codeobj_tab[18] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_pricing_solver_pxi, __pyx_mstate->__pyx_n_u_solveHeuristic, __pyx_mstate->__pyx_kp_b_iso88591_A_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[18])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[19] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_T_Q_G1F_a_vWE_Q_q_q_d_7_WA_d_7, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[19])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[20] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_1F, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[20])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 7};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[21] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_score_pxi, __pyx_mstate->__pyx_n_u_scorefree, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[21])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 11};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[22] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_score_pxi, __pyx_mstate->__pyx_n_u_scorecalculate, __pyx_mstate->__pyx_kp_b_iso88591_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[22])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[23] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_T_Q_G1F_a_vWE_Q_q_q_d_7_WA_d_7_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[23])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[24] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_1F_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[24])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 13};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex};
    __pyx_mstate_global->__pyx_codeobj_tab[25] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassDescription, __pyx_mstate->__pyx_kp_b_iso88591_A_t_5Qk, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[25])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 23};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex};
    __pyx_mstate_global->__pyx_codeobj_tab[26] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassName, __pyx_mstate->__pyx_kp_b_iso88591_A_t_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[26])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 33};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[27] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getName, __pyx_mstate->__pyx_kp_b_iso88591_A_t_7_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[27])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 41};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[28] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getNClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_t_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[28])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 49};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[29] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_removeEmptyClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_t_4A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[29])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 57};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[30] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_setClassDescription, __pyx_mstate->__pyx_kp_b_iso88591_A_q_N_a_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[30])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 68};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex, __pyx_mstate->__pyx_n_u_name, __pyx_mstate->__pyx_n_u_c_name};
    __pyx_mstate_global->__pyx_codeobj_tab[31] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_setClassName, __pyx_mstate->__pyx_kp_b_iso88591_A_q_N_q_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[31])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 79};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_name, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_decompInfo, __pyx_mstate->__pyx_n_u_c_name, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[32] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_addClass, __pyx_mstate->__pyx_kp_b_iso88591_A_q_q_t_881, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[32])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 95};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_classindex, __pyx_mstate->__pyx_n_u_cpp_consindex};
    __pyx_mstate_global->__pyx_codeobj_tab[33] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_assignConsToClass, __pyx_mstate->__pyx_kp_b_iso88591_A_1A_N_A_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[33])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 106};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_both, __pyx_mstate->__pyx_n_u_only_master, __pyx_mstate->__pyx_n_u_only_pricing};
    __pyx_mstate_global->__pyx_codeobj_tab[34] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getAllSubsets, __pyx_mstate->__pyx_kp_b_iso88591_A_t_q_m1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[34])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 120};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex};
    __pyx_mstate_global->__pyx_codeobj_tab[35] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassDecompInfo, __pyx_mstate->__pyx_kp_b_iso88591_A_t_4AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[35])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 130};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_cpp_consindex};
    __pyx_mstate_global->__pyx_codeobj_tab[36] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassNameOfCons, __pyx_mstate->__pyx_kp_b_iso88591_A_1A_t_4A_7_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[36])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 141};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_cpp_consindex};
    __pyx_mstate_global->__pyx_codeobj_tab[37] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassOfCons, __pyx_mstate->__pyx_kp_b_iso88591_A_1A_t, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[37])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 152};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[38] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getNConss, __pyx_mstate->__pyx_kp_b_iso88591_A_t_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[38])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 160};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[39] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getNConssOfClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_t_4A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[39])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 168};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_cpp_consindex};
    __pyx_mstate_global->__pyx_codeobj_tab[40] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_isConsClassified, __pyx_mstate->__pyx_kp_b_iso88591_A_1A_t_2_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[40])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 179};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_maxNumberOfClasses, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[41] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_reduceClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_T_Qa_waxt1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[41])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 190};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex, __pyx_mstate->__pyx_n_u_decompInfo};
    __pyx_mstate_global->__pyx_codeobj_tab[42] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_setClassDecompInfo, __pyx_mstate->__pyx_kp_b_iso88591_A_N_Ql, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[42])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[43] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[43])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[44] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[44])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 212};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex};
    __pyx_mstate_global->__pyx_codeobj_tab[45] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassDescription, __pyx_mstate->__pyx_kp_b_iso88591_A_t_4A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[45])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 222};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex};
    __pyx_mstate_global->__pyx_codeobj_tab[46] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassName, __pyx_mstate->__pyx_kp_b_iso88591_A_t_Qk, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[46])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 232};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[47] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getName, __pyx_mstate->__pyx_kp_b_iso88591_A_t, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[47])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 240};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[48] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getNClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_t_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[48])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 248};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[49] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_removeEmptyClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_t_31, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[49])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 256};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[50] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_setClassDescription, __pyx_mstate->__pyx_kp_b_iso88591_A_q_M_Ql, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[50])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 267};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex, __pyx_mstate->__pyx_n_u_name, __pyx_mstate->__pyx_n_u_c_name};
    __pyx_mstate_global->__pyx_codeobj_tab[51] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_setClassName, __pyx_mstate->__pyx_kp_b_iso88591_A_q_M_a_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[51])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 278};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_name, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_decompInfo, __pyx_mstate->__pyx_n_u_c_name, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[52] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_addClass, __pyx_mstate->__pyx_kp_b_iso88591_A_q_q_t, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[52])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 294};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_classindex, __pyx_mstate->__pyx_n_u_cpp_varindex};
    __pyx_mstate_global->__pyx_codeobj_tab[53] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_assignVarToClass, __pyx_mstate->__pyx_kp_b_iso88591_A_L_q_M, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[53])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 305};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_all, __pyx_mstate->__pyx_n_u_linking, __pyx_mstate->__pyx_n_u_master, __pyx_mstate->__pyx_n_u_block};
    __pyx_mstate_global->__pyx_codeobj_tab[54] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getAllSubsets, __pyx_mstate->__pyx_kp_b_iso88591_A_t_auIXQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[54])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 321};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex};
    __pyx_mstate_global->__pyx_codeobj_tab[55] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassDecompInfo, __pyx_mstate->__pyx_kp_b_iso88591_A_t_31A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[55])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 331};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_cpp_varindex};
    __pyx_mstate_global->__pyx_codeobj_tab[56] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassNameOfVar, __pyx_mstate->__pyx_kp_b_iso88591_A_L_q_t_2_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[56])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 342};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_cpp_varindex};
    __pyx_mstate_global->__pyx_codeobj_tab[57] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getClassOfVar, __pyx_mstate->__pyx_kp_b_iso88591_A_L_q_t_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[57])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 353};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[58] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getNVars, __pyx_mstate->__pyx_kp_b_iso88591_A_t_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[58])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 361};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[59] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_getNVarsOfClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_t_2_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[59])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 369};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_cpp_varindex};
    __pyx_mstate_global->__pyx_codeobj_tab[60] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_isVarClassified, __pyx_mstate->__pyx_kp_b_iso88591_A_L_q_t_0, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[60])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 380};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_maxNumberOfClasses, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[61] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_reduceClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_D_1A_gQhd, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[61])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 391};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classindex, __pyx_mstate->__pyx_n_u_decompInfo};
    __pyx_mstate_global->__pyx_codeobj_tab[62] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_partition_pxi, __pyx_mstate->__pyx_n_u_setClassDecompInfo, __pyx_mstate->__pyx_kp_b_iso88591_A_M_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[62])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[63] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[63])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[64] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[64])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 35};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[65] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_copy_2, __pyx_mstate->__pyx_kp_b_iso88591_A_7_AT, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[65])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 38};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[66] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_copy, __pyx_mstate->__pyx_kp_b_iso88591_A_t1A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[66])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 59};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[67] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_hiq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[67])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 67};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[68] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_assignOpenConssToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_H_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[68])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 72};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[69] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isComplete, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[69])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 80};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[70] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isTrivial, __pyx_mstate->__pyx_kp_b_iso88591_A_4xz_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[70])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 91};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[71] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_hk_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[71])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 99};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[72] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNConss, __pyx_mstate->__pyx_kp_b_iso88591_A_hj_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[72])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 107};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[73] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNVars, __pyx_mstate->__pyx_kp_b_iso88591_A_hiq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[73])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 115};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[74] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getID, __pyx_mstate->__pyx_kp_b_iso88591_A_hfA_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[74])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 123};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[75] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getHashValue, __pyx_mstate->__pyx_kp_b_iso88591_A_D_Q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[75])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 131};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[76] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getDetprobdata, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[76])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 139};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons};
    __pyx_mstate_global->__pyx_codeobj_tab[77] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixConsToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_H_AT, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[77])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 147};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_conss, __pyx_mstate->__pyx_n_u_cons};
    __pyx_mstate_global->__pyx_codeobj_tab[78] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixConssToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_4z_1_TT_aab_HA_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[78])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 160};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_block_id};
    __pyx_mstate_global->__pyx_codeobj_tab[79] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixConsToBlockId, __pyx_mstate->__pyx_kp_b_iso88591_A_HO1D_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[79])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 175};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_conss, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_cons};
    __pyx_mstate_global->__pyx_codeobj_tab[80] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixConssToBlockId, __pyx_mstate->__pyx_kp_b_iso88591_A_4z_1_TT_aab_HA_vQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[80])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 207};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_block, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_block_id};
    __pyx_mstate_global->__pyx_codeobj_tab[81] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixConsToBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_q_3at_Rt_a_U_3at_5Rt_a_IQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[81])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 234};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_conss, __pyx_mstate->__pyx_n_u_block, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_cons};
    __pyx_mstate_global->__pyx_codeobj_tab[82] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixConssToBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_4z_1_TT_aab_Q_HA_t_a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[82])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 251};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[83] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_hasSetppccardMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[83])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 259};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[84] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_hasSetppcMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_7q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[84])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 267};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[85] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_hasSetppMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[85])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 275};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[86] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNOpenconss, __pyx_mstate->__pyx_kp_b_iso88591_A_hnA_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[86])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 283};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[87] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getOpenconss, __pyx_mstate->__pyx_kp_b_iso88591_A_hm1_hoQ_xq_D_UV, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[87])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 292};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[88] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNLinkingvars, __pyx_mstate->__pyx_kp_b_iso88591_A_h_6a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[88])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 300};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_varIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[89] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getLinkingvars, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_hoQ_y_q_WA_LPQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[89])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 309};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[90] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNMasterconss, __pyx_mstate->__pyx_kp_b_iso88591_A_h_6a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[90])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 317};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[91] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getMasterconss, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_hoQ_xq_D_UV, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[91])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 326};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[92] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNMastervars, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[92])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 334};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_varIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[93] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getMastervars, __pyx_mstate->__pyx_kp_b_iso88591_A_hnA_hoQ_y_q_WA_LPQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[93])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 343};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[94] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNOpenvars, __pyx_mstate->__pyx_kp_b_iso88591_A_hm1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[94])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 351};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_varIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[95] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getOpenvars, __pyx_mstate->__pyx_kp_b_iso88591_A_hl_hoQ_y_q_WA_LPQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[95])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 360};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[96] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNStairlinkingvars, __pyx_mstate->__pyx_kp_b_iso88591_A_h_1A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[96])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 383};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[97] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getConssForBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_h_q_hoQ_xq_D_UV, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[97])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 393};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_block, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[98] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getConssForBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_h6H_hoQ_q_7_T_V_aajjk, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[98])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 398};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[99] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNVarsForBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_h_7q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[99])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 407};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_varIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[100] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getVarsForBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_h_aq_hoQ_y_q_WA_LPQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[100])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 417};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[101] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setConsToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_H_A_2B_4q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[101])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 426};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_cpp_block_id, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[102] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setVarToBlockId, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_HN_q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[102])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 438};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[103] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setVarToLinking, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_H_A_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[103])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 447};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[104] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixVarToLinking, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_H_A_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[104])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 456};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[105] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setVarToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_HO1M_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[105])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 467};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[106] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixVarToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_HO1M_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[106])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 478};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_block1_id, __pyx_mstate->__pyx_n_u_block2_id, __pyx_mstate->__pyx_n_u_cpp_block1_id, __pyx_mstate->__pyx_n_u_cpp_block2_id, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[107] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setVarToStairlinking, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_H_as_Veef, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[107])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 494};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_firstblock_id, __pyx_mstate->__pyx_n_u_cpp_firstblock_id, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[108] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_fixVarToStairlinking, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_hoQ_H_as_VW, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[108])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 507};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[109] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isConsMastercons, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_4x_8_FVVWW_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[109])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 518};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[110] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isConsOpencons, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_4x_a_DTTUUYYZ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[110])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 529};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[111] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isVarBlockvarOfBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_4x_A_YZZ_iij_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[111])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 541};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[112] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isVarLinkingvar, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_4x_7q__TUUXXY_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[112])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 552};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[113] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isVarMastervar, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_4x_a_OSTTWWX_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[113])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 563};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[114] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isVarOpenvar, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_4x_A_QRRUUV_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[114])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 574};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[115] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isVarStairlinkingvar, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_4x_A_YZZ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[115])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 585};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_det_prob_data, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[116] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isVarStairlinkingvarOfBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_4x_C1MQ_aaddppq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[116])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 597};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[117] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_deleteOpencons, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_HO1M1A_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[117])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 606};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[118] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_deleteOpenvar, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_HN_q_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[118])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 615};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_value};
    __pyx_mstate_global->__pyx_codeobj_tab[119] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setUsergiven, __pyx_mstate->__pyx_kp_b_iso88591_1_HM, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[119])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 618};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[120] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getUsergiven, __pyx_mstate->__pyx_kp_b_iso88591_A_t8, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[120])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 668};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_clocktime, __pyx_mstate->__pyx_n_u_cpp_clocktime};
    __pyx_mstate_global->__pyx_codeobj_tab[121] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addClockTime, __pyx_mstate->__pyx_kp_b_iso88591_A_A_HM, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[121])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 676};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pct, __pyx_mstate->__pyx_n_u_cpp_pct};
    __pyx_mstate_global->__pyx_codeobj_tab[122] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addPctConssFromFree, __pyx_mstate->__pyx_kp_b_iso88591_A_a_H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[122])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 684};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pct, __pyx_mstate->__pyx_n_u_cpp_pct};
    __pyx_mstate_global->__pyx_codeobj_tab[123] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addPctConssToBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_a_H_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[123])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 692};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pct, __pyx_mstate->__pyx_n_u_cpp_pct};
    __pyx_mstate_global->__pyx_codeobj_tab[124] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addPctConssToBorder, __pyx_mstate->__pyx_kp_b_iso88591_A_a_H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[124])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 700};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pct, __pyx_mstate->__pyx_n_u_cpp_pct};
    __pyx_mstate_global->__pyx_codeobj_tab[125] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addPctVarsFromFree, __pyx_mstate->__pyx_kp_b_iso88591_A_a_H_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[125])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 708};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pct, __pyx_mstate->__pyx_n_u_cpp_pct};
    __pyx_mstate_global->__pyx_codeobj_tab[126] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addPctVarsToBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_a_H_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[126])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 716};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pct, __pyx_mstate->__pyx_n_u_cpp_pct};
    __pyx_mstate_global->__pyx_codeobj_tab[127] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addPctVarsToBorder, __pyx_mstate->__pyx_kp_b_iso88591_A_a_H_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[127])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 724};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchainindex, __pyx_mstate->__pyx_n_u_cpp_detectorchainindex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[128] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctVarsToBorder, __pyx_mstate->__pyx_kp_b_iso88591_A_T_AQ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[128])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 733};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[129] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctVarsToBorderVector, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1J_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[129])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 741};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchainindex, __pyx_mstate->__pyx_n_u_cpp_detectorchainindex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[130] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctVarsToBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[130])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 750};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[131] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctVarsToBlockVector, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1I_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[131])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 758};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchainindex, __pyx_mstate->__pyx_n_u_cpp_detectorchainindex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[132] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctVarsFromFree, __pyx_mstate->__pyx_kp_b_iso88591_A_T_AQ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[132])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 767};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[133] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctVarsFromFreeVector, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1J_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[133])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 775};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchainindex, __pyx_mstate->__pyx_n_u_cpp_detectorchainindex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[134] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctConssToBorder, __pyx_mstate->__pyx_kp_b_iso88591_A_T_Qa_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[134])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 784};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[135] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctConssToBorderVector, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1K1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[135])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 792};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchainindex, __pyx_mstate->__pyx_n_u_cpp_detectorchainindex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[136] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctConssToBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_T_AQ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[136])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 801};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[137] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctConssToBlockVector, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1J_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[137])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 809};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchainindex, __pyx_mstate->__pyx_n_u_cpp_detectorchainindex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[138] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctConssFromFree, __pyx_mstate->__pyx_kp_b_iso88591_A_T_Qa_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[138])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 818};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[139] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getPctConssFromFreeVector, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1K1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[139])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 826};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_score};
    __pyx_mstate_global->__pyx_codeobj_tab[140] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getScore, __pyx_mstate->__pyx_kp_b_iso88591_A_t89A_hoRwVZZhhiinno, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[140])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 844};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[141] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_checkAllConssAssigned, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_Q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[141])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 852};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[142] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_checkConsistency, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_8_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[142])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 872};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[143] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_complete, __pyx_mstate->__pyx_kp_b_iso88591_A_HIQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[143])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 881};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[144] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_sort, __pyx_mstate->__pyx_kp_b_iso88591_A_4xuA_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[144])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 889};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[145] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_completeByConnected, __pyx_mstate->__pyx_kp_b_iso88591_A_H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[145])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 897};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[146] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_completeByConnectedConssAdjacenc, __pyx_mstate->__pyx_kp_b_iso88591_A_H_6a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[146])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 907};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[147] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_completeGreedily, __pyx_mstate->__pyx_kp_b_iso88591_A_H_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[147])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 916};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[148] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_prepare, __pyx_mstate->__pyx_kp_b_iso88591_A_HHA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[148])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 922};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[149] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNDetectors, __pyx_mstate->__pyx_kp_b_iso88591_A_hnA_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[149])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 930};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[150] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNEquivalenceClasses, __pyx_mstate->__pyx_kp_b_iso88591_A_h_Q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[150])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 937};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[151] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNCoeffsForMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_h_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[151])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 945};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_nblocks, __pyx_mstate->__pyx_n_u_cpp_nblocks};
    __pyx_mstate_global->__pyx_codeobj_tab[152] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setNBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_q_HKq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[152])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 953};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[153] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNTotalStairlinkingvars, __pyx_mstate->__pyx_kp_b_iso88591_A_h_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[153])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 961};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[154] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNVarsForBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_h_8_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[154])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 969};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[155] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_findVarsLinkingToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_H_A_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[155])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 976};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[156] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_findVarsLinkingToStairlinking, __pyx_mstate->__pyx_kp_b_iso88591_A_H_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[156])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 983};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_cpp_block_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[157] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNCoeffsForBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_h_9_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[157])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 993};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_nnewblocks, __pyx_mstate->__pyx_n_u_cpp_nnewblocks};
    __pyx_mstate_global->__pyx_codeobj_tab[158] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addNNewBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_HN_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[158])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1001};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_cpp_block_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[159] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNConssForBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_h_8_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[159])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1011};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons, __pyx_mstate->__pyx_n_u_det_prob_data};
    __pyx_mstate_global->__pyx_codeobj_tab[160] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_removeMastercons, __pyx_mstate->__pyx_kp_b_iso88591_A_hoQ_H_Qm3C1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[160])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1020};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[161] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_isAssignedToOrigProb, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[161])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1028};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[162] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_refineToBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_HO1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[162])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1037};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[163] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_refineToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_HO1_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[163])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1045};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[164] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_alreadyAssignedConssToBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_DA_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[164])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1053};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[165] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_assignCurrentStairlinking, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_A_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[165])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1063};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[166] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_aggInfoCalculated, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_9_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[166])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1071};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[167] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_considerImplicits, __pyx_mstate->__pyx_kp_b_iso88591_A_H_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[167])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1083};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detailLevel, __pyx_mstate->__pyx_n_u_cpp_detailLevel};
    __pyx_mstate_global->__pyx_codeobj_tab[168] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_displayInfo, __pyx_mstate->__pyx_kp_b_iso88591_A_1_HL, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[168])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1094};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[169] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getAncestorList, __pyx_mstate->__pyx_kp_b_iso88591_A_h_a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[169])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1102};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[170] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_assignSmallestComponentsButOneCo, __pyx_mstate->__pyx_kp_b_iso88591_A_H_A_3, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[170])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1116};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_variables, __pyx_mstate->__pyx_n_u_cpp_variables};
    __pyx_mstate_global->__pyx_codeobj_tab[171] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_deleteEmptyBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_H_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[171])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1127};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[172] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getTranslatedpartialdecid, __pyx_mstate->__pyx_kp_b_iso88591_A_h_q_3, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[172])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1131};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_dec_id, __pyx_mstate->__pyx_n_u_cpp_dec_id};
    __pyx_mstate_global->__pyx_codeobj_tab[173] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setTranslatedpartialdecid, __pyx_mstate->__pyx_kp_b_iso88591_A_a_H_aq_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[173])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1135};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_buffer, __pyx_mstate->__pyx_n_u_c_buffer};
    __pyx_mstate_global->__pyx_codeobj_tab[174] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_buildDecChainString, __pyx_mstate->__pyx_kp_b_iso88591_A_H_3, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[174])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1142};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_ancestor, __pyx_mstate->__pyx_n_u_cpp_ancestor};
    __pyx_mstate_global->__pyx_codeobj_tab[175] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addDecChangesFromAncestor, __pyx_mstate->__pyx_kp_b_iso88591_A_81_H_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[175])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1150};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_decinfo, __pyx_mstate->__pyx_n_u_c_decinfo};
    __pyx_mstate_global->__pyx_codeobj_tab[176] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addDetectorChainInfo, __pyx_mstate->__pyx_kp_b_iso88591_A_N_1_H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[176])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1159};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_ancestor_id, __pyx_mstate->__pyx_n_u_cpp_ancestor_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[177] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getAncestorID, __pyx_mstate->__pyx_kp_b_iso88591_A_1_hnAQ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[177])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1168};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_otherpartialdec, __pyx_mstate->__pyx_n_u_cpp_otherpartialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[178] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_copyPartitionStatistics, __pyx_mstate->__pyx_kp_b_iso88591_A_3_H_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[178])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1176};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_ancestor_id, __pyx_mstate->__pyx_n_u_cpp_ancestor_id};
    __pyx_mstate_global->__pyx_codeobj_tab[179] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_removeAncestorID, __pyx_mstate->__pyx_kp_b_iso88591_A_1_H_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[179])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1182};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_ancestor_id, __pyx_mstate->__pyx_n_u_cpp_ancestor_id};
    __pyx_mstate_global->__pyx_codeobj_tab[180] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_addAncestorID, __pyx_mstate->__pyx_kp_b_iso88591_A_1_HN_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[180])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1190};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_rep_id, __pyx_mstate->__pyx_n_u_cpp_rep_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[181] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getBlocksForEqClass, __pyx_mstate->__pyx_kp_b_iso88591_A_a_h_B_1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[181])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1200};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[182] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNNewBlocksVector, __pyx_mstate->__pyx_kp_b_iso88591_A_h_B_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[182])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1208};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[183] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNAncestors, __pyx_mstate->__pyx_kp_b_iso88591_A_hnA_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[183])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1216};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchain_id, __pyx_mstate->__pyx_n_u_cpp_detectorchain_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[184] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getNNewBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_hnAQ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[184])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1225};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[185] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getFinishedByFinisher, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_Q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[185])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1233};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[186] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getDetectorchainInfo, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1Fa_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[186])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1241};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[187] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_shouldCompletedByConsToMaster, __pyx_mstate->__pyx_kp_b_iso88591_A_4x_MQ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[187])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1250};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_finished, __pyx_mstate->__pyx_n_u_cpp_finished};
    __pyx_mstate_global->__pyx_codeobj_tab[188] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setFinishedByFinisher, __pyx_mstate->__pyx_kp_b_iso88591_A_H_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[188])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1258};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_ignoreDetectionLimits, __pyx_mstate->__pyx_n_u_cpp_ignoreDetectionLimits};
    __pyx_mstate_global->__pyx_codeobj_tab[189] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_calcAggregationInformation, __pyx_mstate->__pyx_kp_b_iso88591_A_a_H_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[189])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1270};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detector, __pyx_mstate->__pyx_n_u_dec};
    __pyx_mstate_global->__pyx_codeobj_tab[190] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setDetectorPropagated, __pyx_mstate->__pyx_kp_b_iso88591_A_H_1_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[190])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1278};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detector, __pyx_mstate->__pyx_n_u_dec};
    __pyx_mstate_global->__pyx_codeobj_tab[191] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setDetectorFinished, __pyx_mstate->__pyx_kp_b_iso88591_A_H_4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[191])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1286};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[192] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setDetectorFinishedOrig, __pyx_mstate->__pyx_kp_b_iso88591_A_H_A_4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[192])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1294};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_newvector, __pyx_mstate->__pyx_n_u_cpp_newvector};
    __pyx_mstate_global->__pyx_codeobj_tab[193] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setPctConssToBlockVector, __pyx_mstate->__pyx_kp_b_iso88591_A_A_H_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[193])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1302};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_newvector, __pyx_mstate->__pyx_n_u_cpp_newvector};
    __pyx_mstate_global->__pyx_codeobj_tab[194] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setPctConssFromFreeVector, __pyx_mstate->__pyx_kp_b_iso88591_A_A_H_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[194])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1310};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_newvector, __pyx_mstate->__pyx_n_u_cpp_newvector};
    __pyx_mstate_global->__pyx_codeobj_tab[195] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setPctConssToBorderVector, __pyx_mstate->__pyx_kp_b_iso88591_A_A_H_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[195])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1318};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_newvector, __pyx_mstate->__pyx_n_u_cpp_newvector};
    __pyx_mstate_global->__pyx_codeobj_tab[196] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setPctVarsToBorderVector, __pyx_mstate->__pyx_kp_b_iso88591_A_A_H_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[196])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1326};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_newvector, __pyx_mstate->__pyx_n_u_cpp_newvector};
    __pyx_mstate_global->__pyx_codeobj_tab[197] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setPctVarsToBlockVector, __pyx_mstate->__pyx_kp_b_iso88591_A_A_H_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[197])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1334};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_newvector, __pyx_mstate->__pyx_n_u_cpp_newvector};
    __pyx_mstate_global->__pyx_codeobj_tab[198] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setPctVarsFromFreeVector, __pyx_mstate->__pyx_kp_b_iso88591_A_A_H_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[198])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1342};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_newvector, __pyx_mstate->__pyx_n_u_cpp_newvector};
    __pyx_mstate_global->__pyx_codeobj_tab[199] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setDetectorClockTimes, __pyx_mstate->__pyx_kp_b_iso88591_A_A_H_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[199])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1350};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_finished, __pyx_mstate->__pyx_n_u_cpp_finished};
    __pyx_mstate_global->__pyx_codeobj_tab[200] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setFinishedByFinisherOrig, __pyx_mstate->__pyx_kp_b_iso88591_A_H_aq_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[200])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1358};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_fromorig, __pyx_mstate->__pyx_n_u_cpp_fromorig};
    __pyx_mstate_global->__pyx_codeobj_tab[201] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setStemsFromOrig, __pyx_mstate->__pyx_kp_b_iso88591_A_H_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[201])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1366};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchain_id, __pyx_mstate->__pyx_n_u_cpp_detectorchain_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[202] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getDetectorClockTime, __pyx_mstate->__pyx_kp_b_iso88591_A_T_aq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[202])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1375};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_block_id, __pyx_mstate->__pyx_n_u_cpp_block_id, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[203] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getEqClassForBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_h_9_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[203])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1385};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[204] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_showVisualization, __pyx_mstate->__pyx_kp_b_iso88591_A_H_a_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[204])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1392};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[205] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_repr_svg, __pyx_mstate->__pyx_kp_b_iso88591_A_t_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[205])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1395};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[206] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_repr_png, __pyx_mstate->__pyx_kp_b_iso88591_A_t_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[206])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1448};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_newlist, __pyx_mstate->__pyx_n_u_cpp_newlist};
    __pyx_mstate_global->__pyx_codeobj_tab[207] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setAncestorList, __pyx_mstate->__pyx_kp_b_iso88591_A_q_H_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[207])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1456};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[208] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getDetectorClockTimes, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1Gq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[208])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1472};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_repid, __pyx_mstate->__pyx_n_u_blockrepid, __pyx_mstate->__pyx_n_u_cpp_repid, __pyx_mstate->__pyx_n_u_cpp_blockrepid, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[209] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getRepVarmap, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_hm1Kq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[209])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1486};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_varid, __pyx_mstate->__pyx_n_u_block, __pyx_mstate->__pyx_n_u_cpp_varid, __pyx_mstate->__pyx_n_u_cpp_block, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[210] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_getVarProbindexForBlock, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_Q_h_a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[210])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1515};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchainindex, __pyx_mstate->__pyx_n_u_partition, __pyx_mstate->__pyx_n_u_consclassesmaster, __pyx_mstate->__pyx_n_u_cpp_detectorchainindex, __pyx_mstate->__pyx_n_u_cpp_partition, __pyx_mstate->__pyx_n_u_cpp_consclassesmaster};
    __pyx_mstate_global->__pyx_codeobj_tab[211] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setConsPartitionStatistics, __pyx_mstate->__pyx_kp_b_iso88591_A_IQ_1_H_q0H_WX, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[211])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1531};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detectorchainindex, __pyx_mstate->__pyx_n_u_partition, __pyx_mstate->__pyx_n_u_varclasseslinking, __pyx_mstate->__pyx_n_u_varclassesmaster, __pyx_mstate->__pyx_n_u_cpp_detectorchainindex, __pyx_mstate->__pyx_n_u_cpp_partition, __pyx_mstate->__pyx_n_u_cpp_varclasseslinking, __pyx_mstate->__pyx_n_u_cpp_varclassesmaster};
    __pyx_mstate_global->__pyx_codeobj_tab[212] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_decomposition_pxi, __pyx_mstate->__pyx_n_u_setVarPartitionStatistics, __pyx_mstate->__pyx_kp_b_iso88591_A_IQ_1_0_H_a_G_Vmmn, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[212])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[213] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[213])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[214] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[214])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 12};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_name, __pyx_mstate->__pyx_n_u_nclasses, __pyx_mstate->__pyx_n_u_ncons, __pyx_mstate->__pyx_n_u_gcg, __pyx_mstate->__pyx_n_u_c_name, __pyx_mstate->__pyx_n_u_conspatitionptr};
    __pyx_mstate_global->__pyx_codeobj_tab[215] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_createConsPart, __pyx_mstate->__pyx_kp_b_iso88591_A_HG1_q_q_XZWX_wa_0, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[215])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 29};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_name, __pyx_mstate->__pyx_n_u_nclasses, __pyx_mstate->__pyx_n_u_nvars, __pyx_mstate->__pyx_n_u_gcg, __pyx_mstate->__pyx_n_u_c_name, __pyx_mstate->__pyx_n_u_varpatitionptr};
    __pyx_mstate_global->__pyx_codeobj_tab[216] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_createVarPart, __pyx_mstate->__pyx_kp_b_iso88591_A_HG1_q_AU_TU_gQ_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[216])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 46};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[217] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_candidatesNBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_T_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[217])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 52};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_candidatesNBlocks, __pyx_mstate->__pyx_n_u_cpp_candidatesNBlocks};
    __pyx_mstate_global->__pyx_codeobj_tab[218] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_candidatesNBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_A_H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[218])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 56};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_r};
    __pyx_mstate_global->__pyx_codeobj_tab[219] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_conspartitioncollection, __pyx_mstate->__pyx_kp_b_iso88591_A_d_y_q_vQgT_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[219])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 62};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_conspartitioncollection, __pyx_mstate->__pyx_n_u_cpp_conspartitioncollection, __pyx_mstate->__pyx_n_u_conspartitioncollection_ptr, __pyx_mstate->__pyx_n_u_conspartitioncollection_element};
    __pyx_mstate_global->__pyx_codeobj_tab[220] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_conspartitioncollection, __pyx_mstate->__pyx_kp_b_iso88591_A_1_q_ZZ_z_H_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[220])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 73};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_r};
    __pyx_mstate_global->__pyx_codeobj_tab[221] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_varpartitioncollection, __pyx_mstate->__pyx_kp_b_iso88591_A_T_xwas_E, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[221])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 79};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_varpartitioncollection, __pyx_mstate->__pyx_n_u_cpp_varpartitioncollection, __pyx_mstate->__pyx_n_u_varpartitioncollection_ptr, __pyx_mstate->__pyx_n_u_varpartitioncollection_element};
    __pyx_mstate_global->__pyx_codeobj_tab[222] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_varpartitioncollection, __pyx_mstate->__pyx_kp_b_iso88591_A_a_99WWX_j_H_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[222])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 90};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[223] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_classificationtime, __pyx_mstate->__pyx_kp_b_iso88591_A_T_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[223])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 96};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_classificationtime, __pyx_mstate->__pyx_n_u_cpp_classificationtime};
    __pyx_mstate_global->__pyx_codeobj_tab[224] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_classificationtime, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[224])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 100};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[225] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_nblockscandidatescalctime, __pyx_mstate->__pyx_kp_b_iso88591_A_T_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[225])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 106};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_nblockscandidatescalctime, __pyx_mstate->__pyx_n_u_cpp_nblockscandidatescalctime};
    __pyx_mstate_global->__pyx_codeobj_tab[226] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_nblockscandidatescalctime, __pyx_mstate->__pyx_kp_b_iso88591_A_4A_H_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[226])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 110};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[227] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_postprocessingtime, __pyx_mstate->__pyx_kp_b_iso88591_A_T_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[227])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 116};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_postprocessingtime, __pyx_mstate->__pyx_n_u_cpp_postprocessingtime};
    __pyx_mstate_global->__pyx_codeobj_tab[228] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_postprocessingtime, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[228])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 120};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[229] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_translatingtime, __pyx_mstate->__pyx_kp_b_iso88591_A_T_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[229])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 126};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_translatingtime, __pyx_mstate->__pyx_n_u_cpp_translatingtime};
    __pyx_mstate_global->__pyx_codeobj_tab[230] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_translatingtime, __pyx_mstate->__pyx_kp_b_iso88591_A_H_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[230])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 130};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partition, __pyx_mstate->__pyx_n_u_cpp_partition};
    __pyx_mstate_global->__pyx_codeobj_tab[231] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_addConsPartition, __pyx_mstate->__pyx_kp_b_iso88591_A_IQ_H_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[231])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 139};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_candidate, __pyx_mstate->__pyx_n_u_nvotes};
    __pyx_mstate_global->__pyx_codeobj_tab[232] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_addCandidatesNBlocksNVotes, __pyx_mstate->__pyx_kp_b_iso88591_A_H_q_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[232])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 149};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdec, __pyx_mstate->__pyx_n_u_cpp_partialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[233] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_addPartialdecToAncestor, __pyx_mstate->__pyx_kp_b_iso88591_A_Zq_H_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[233])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 158};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdec, __pyx_mstate->__pyx_n_u_cpp_partialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[234] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_addPartialdecToOpen, __pyx_mstate->__pyx_kp_b_iso88591_A_Zq_t8_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[234])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 169};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdec, __pyx_mstate->__pyx_n_u_cpp_partialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[235] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_addPartialdecToFinished, __pyx_mstate->__pyx_kp_b_iso88591_A_Zq_t8_31A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[235])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 182};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdec, __pyx_mstate->__pyx_n_u_cpp_partialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[236] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_addPartialdecToFinishedUnchecked, __pyx_mstate->__pyx_kp_b_iso88591_A_Zq_H_5Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[236])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 193};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partition, __pyx_mstate->__pyx_n_u_cpp_partition};
    __pyx_mstate_global->__pyx_codeobj_tab[237] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_addVarPartition, __pyx_mstate->__pyx_kp_b_iso88591_A_9A_H_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[237])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 202};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[238] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_clearAncestorPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_H_Q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[238])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 209};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[239] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_clearCurrentPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_H_A_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[239])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 216};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[240] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_clearFinishedPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_H_Q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[240])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 223};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[241] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_createConssAdjacency, __pyx_mstate->__pyx_kp_b_iso88591_A_H_5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[241])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 228};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[242] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_freeTemporaryData, __pyx_mstate->__pyx_kp_b_iso88591_A_H_a_3, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[242])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 233};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdecindex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[243] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getAncestorPartialdec, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1Gq_7_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[243])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 244};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partitionIndex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[244] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getConsPartition, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1B_1_wax_G6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[244])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 255};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_nconsparts, __pyx_mstate->__pyx_n_u_r};
    __pyx_mstate_global->__pyx_codeobj_tab[245] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getConsPartitions, __pyx_mstate->__pyx_kp_b_iso88591_A_h_9_y_q_H_Qd_EQVVWWX, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[245])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 264};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[246] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getCons, __pyx_mstate->__pyx_kp_b_iso88591_A_XXQa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[246])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 274};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[247] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getConssForCons, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[247])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 286};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_varIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[248] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getConssForVar, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[248])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 296};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_r};
    __pyx_mstate_global->__pyx_codeobj_tab[249] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getOpenPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_T_9LA_G1Ct5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[249])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 305};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdecindex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[250] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getFinishedPartialdec, __pyx_mstate->__pyx_kp_b_iso88591_A_T_1Gq_7_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[250])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 316};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_r};
    __pyx_mstate_global->__pyx_codeobj_tab[251] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getFinishedPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_T_9PPQ_G1Ct5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[251])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 325};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_cons};
    __pyx_mstate_global->__pyx_codeobj_tab[252] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getIndexForCons, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[252])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 335};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var};
    __pyx_mstate_global->__pyx_codeobj_tab[253] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getIndexForVar, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_3a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[253])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 345};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[254] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNAncestorPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_31, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[254])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 353};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[255] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNConsPartitions, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[255])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 361};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[256] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNConss, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[256])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 369};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[257] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNConssForCons, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[257])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 379};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_varIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[258] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNConssForVar, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1A_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[258])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 389};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[259] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNOpenPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[259])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 397};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[260] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNFinishedPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_31, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[260])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 405};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[261] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNPartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[261])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 413};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[262] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNNonzeros, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[262])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 421};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[263] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNVarPartitions, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_Q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[263])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 429};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[264] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNVars, __pyx_mstate->__pyx_kp_b_iso88591_A_t89A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[264])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 437};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[265] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getNVarsForCons, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1A_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[265])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 447};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_v};
    __pyx_mstate_global->__pyx_codeobj_tab[266] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getOrigVarsFixedZero, __pyx_mstate->__pyx_kp_b_iso88591_A_H4I_y_q_4uA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[266])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 456};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_c};
    __pyx_mstate_global->__pyx_codeobj_tab[267] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getRelevantConss, __pyx_mstate->__pyx_kp_b_iso88591_A_X5Fa_T_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[267])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 465};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_v};
    __pyx_mstate_global->__pyx_codeobj_tab[268] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getRelevantVars, __pyx_mstate->__pyx_kp_b_iso88591_A_X5EQ_y_q_4uA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[268])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 483};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_candidates, __pyx_mstate->__pyx_n_u_cpp_candidates};
    __pyx_mstate_global->__pyx_codeobj_tab[269] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getSortedCandidatesNBlocks, __pyx_mstate->__pyx_kp_b_iso88591_A_H_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[269])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 492};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_row, __pyx_mstate->__pyx_n_u_col};
    __pyx_mstate_global->__pyx_codeobj_tab[270] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getVal, __pyx_mstate->__pyx_kp_b_iso88591_A_t87_5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[270])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 504};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[271] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getValsForCons, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1_3, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[271])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 516};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partitionIndex, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[272] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getVarPartition, __pyx_mstate->__pyx_kp_b_iso88591_A_D_0_gQha, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[272])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 527};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_r};
    __pyx_mstate_global->__pyx_codeobj_tab[273] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getVarPartitions, __pyx_mstate->__pyx_kp_b_iso88591_A_D_8I_xwas_E, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[273])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 536};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_varIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[274] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getVar, __pyx_mstate->__pyx_kp_b_iso88591_A_wat87_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[274])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 544};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[275] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_getVarsForCons, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[275])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 554};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[276] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_isConsCardinalityCons, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1_4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[276])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 564};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[277] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_isConssAdjInitialized, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_1_5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[277])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 572};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[278] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_isConsSetpp, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[278])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 582};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consIndex};
    __pyx_mstate_global->__pyx_codeobj_tab[279] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_isConsSetppc, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_3, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[279])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 592};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdec, __pyx_mstate->__pyx_n_u_cpp_partialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[280] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_isPartialdecDuplicateofFinished, __pyx_mstate->__pyx_kp_b_iso88591_A_Zq_t8_1A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[280])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 603};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[281] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_isAssignedToOrigProb, __pyx_mstate->__pyx_kp_b_iso88591_A_t8_0, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[281])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 611};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_comppartialdec, __pyx_mstate->__pyx_n_u_partialdecs, __pyx_mstate->__pyx_n_u_sort, __pyx_mstate->__pyx_n_u_cpp_comppartialdec, __pyx_mstate->__pyx_n_u_cpp_partialdecs, __pyx_mstate->__pyx_n_u_partialdecs_ptr, __pyx_mstate->__pyx_n_u_partialdecs_element};
    __pyx_mstate_global->__pyx_codeobj_tab[282] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_partialdecIsNoDuplicateOfPartial, __pyx_mstate->__pyx_kp_b_iso88591_A_2_q_a_1_B_Qa_t8_AUUffg, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[282])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 632};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[283] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_sortFinishedForScore, __pyx_mstate->__pyx_kp_b_iso88591_A_H_5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[283])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 10, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 637};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_otherdata, __pyx_mstate->__pyx_n_u_otherpartialdecs, __pyx_mstate->__pyx_n_u_translateSymmetry, __pyx_mstate->__pyx_n_u_cpp_otherdata, __pyx_mstate->__pyx_n_u_cpp_otherpartialdecs, __pyx_mstate->__pyx_n_u_otherpartialdecs_ptr, __pyx_mstate->__pyx_n_u_otherpartialdecs_element, __pyx_mstate->__pyx_n_u_result, __pyx_mstate->__pyx_n_u_r};
    __pyx_mstate_global->__pyx_codeobj_tab[284] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_detprobdata_pxi, __pyx_mstate->__pyx_n_u_translatePartialdecs, __pyx_mstate->__pyx_kp_b_iso88591_eef_1_31_44LA_1_T_9Na_ttu_G1Ct5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[284])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[285] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[285])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[286] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[286])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 6};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[287] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_consclassifier_pxi, __pyx_mstate->__pyx_n_u_freeConsClassifier, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[287])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 10};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_conss, __pyx_mstate->__pyx_n_u_partition};
    __pyx_mstate_global->__pyx_codeobj_tab[288] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_consclassifier_pxi, __pyx_mstate->__pyx_n_u_classify, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[288])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[289] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_T_Q_G1F_a_vWE_Q_q_q_t1G_gQ_t1G, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[289])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[290] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_AV1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[290])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 6};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[291] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_varclassifier_pxi, __pyx_mstate->__pyx_n_u_freeVarClassifier, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[291])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 10};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_vars, __pyx_mstate->__pyx_n_u_partition};
    __pyx_mstate_global->__pyx_codeobj_tab[292] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_varclassifier_pxi, __pyx_mstate->__pyx_n_u_classify, __pyx_mstate->__pyx_kp_b_iso88591_A_q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[292])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[293] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_T_Q_G1F_a_vWE_Q_q_q_d_7_WA_d_7, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[293])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[294] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_1F, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[294])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[295] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_A_G1F_a_vWE_Q_q_q_5T_GST_5T_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[295])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[296] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_2_6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[296])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[297] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_A_G1F_a_vWE_Q_q_q_T_G1_T_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[297])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[298] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[298])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[299] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_A_G1F_a_vWE_Q_q_q_2_awk_PQ_2_aw, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[299])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[300] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_q_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[300])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __pyx_mstate_global->__pyx_codeobj_tab[301] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_A_G1F_a_vWE_Q_q_q_34q_QR_34q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[301])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 16};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[302] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_0_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[302])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 124};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[303] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_includeDefaultPlugins, __pyx_mstate->__pyx_kp_b_iso88591_A_A_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[303])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS), 131};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_args, __pyx_mstate->__pyx_n_u_kwargs, __pyx_mstate->__pyx_n_u_pyVar};
    __pyx_mstate_global->__pyx_codeobj_tab[304] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_addVar, __pyx_mstate->__pyx_kp_b_iso88591_A_r_auKq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[304])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 138};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[305] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_presolve, __pyx_mstate->__pyx_kp_b_iso88591_A_A_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[305])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 142};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[306] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_detect, __pyx_mstate->__pyx_kp_b_iso88591_A_AYat1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[306])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 152};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[307] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_printStatistics, __pyx_mstate->__pyx_kp_b_iso88591_A_A_q_G1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[307])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 156};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[308] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_printVersion, __pyx_mstate->__pyx_kp_b_iso88591_A_q_G1_R_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[308])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 162};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[309] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_optimize, __pyx_mstate->__pyx_kp_b_iso88591_A_AXQd_q_HN_4q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[309])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 170};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[310] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getDualbound, __pyx_mstate->__pyx_kp_b_iso88591_A_at1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[310])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 182};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detprobdata};
    __pyx_mstate_global->__pyx_codeobj_tab[311] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getDetprobdataOrig, __pyx_mstate->__pyx_kp_b_iso88591_A_K1DPQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[311])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 188};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detprobdata};
    __pyx_mstate_global->__pyx_codeobj_tab[312] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getDetprobdataPresolved, __pyx_mstate->__pyx_kp_b_iso88591_A_PPQQUUV, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[312])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 194};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_npartialdecs, __pyx_mstate->__pyx_n_u_decids, __pyx_mstate->__pyx_n_u_decomps, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[313] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_listDecompositions, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_6_q_Rq_31D_q_wa_SSTTXX__eeff, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[313])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 207};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_id, __pyx_mstate->__pyx_n_u_pd};
    __pyx_mstate_global->__pyx_codeobj_tab[314] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getPartDecompFromID, __pyx_mstate->__pyx_kp_b_iso88591_A_7_Cgghhllsst_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[314])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS), 217};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_master_conss, __pyx_mstate->__pyx_n_u_block_conss, __pyx_mstate->__pyx_n_u_pd, __pyx_mstate->__pyx_n_u_idx, __pyx_mstate->__pyx_n_u_conss};
    __pyx_mstate_global->__pyx_codeobj_tab[315] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_addDecompositionFromConss, __pyx_mstate->__pyx_kp_b_iso88591_A_t_q_1A_E_1A_t_QgQ_7_Qa_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[315])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 237};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[316] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_addPreexistingPartialDecompositi, __pyx_mstate->__pyx_kp_b_iso88591_A_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[316])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 240};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_partialdec};
    __pyx_mstate_global->__pyx_codeobj_tab[317] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_addDecomposition, __pyx_mstate->__pyx_kp_b_iso88591_A_q_2_4wj, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[317])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 251};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_is_presolved, __pyx_mstate->__pyx_n_u_decomp};
    __pyx_mstate_global->__pyx_codeobj_tab[318] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_createDecomposition, __pyx_mstate->__pyx_kp_b_iso88591_A_Yc_A_6at7_a_7_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[318])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {7, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 268};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pricingSolver, __pyx_mstate->__pyx_n_u_solvername, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_priority, __pyx_mstate->__pyx_n_u_heuristicEnabled, __pyx_mstate->__pyx_n_u_exactEnabled, __pyx_mstate->__pyx_n_u_c_solvername, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[319] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_includePricingSolver, __pyx_mstate->__pyx_kp_b_iso88591_o_p_D_D_E_Qa_q_A_1_XZ7I_WX_QQff, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[319])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 281};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_n_pricing_solvers, __pyx_mstate->__pyx_n_u_pricing_solvers, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[320] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_listPricingSolvers, __pyx_mstate->__pyx_kp_b_iso88591_A_9_a_q_A_q_G1IT_eSTTU, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[320])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 287};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pricing_solver_name, __pyx_mstate->__pyx_n_u_is_enabled};
    __pyx_mstate_global->__pyx_codeobj_tab[321] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_setPricingSolverEnabled, __pyx_mstate->__pyx_kp_b_iso88591_Fa_q_Q_C1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[321])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 301};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pricing_solver_name, __pyx_mstate->__pyx_n_u_is_enabled};
    __pyx_mstate_global->__pyx_codeobj_tab[322] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_setPricingSolverExactEnabled, __pyx_mstate->__pyx_kp_b_iso88591_K1_M_9_AWWX, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[322])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 313};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pricing_solver_name, __pyx_mstate->__pyx_n_u_is_enabled};
    __pyx_mstate_global->__pyx_codeobj_tab[323] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_setPricingSolverHeuristicEnabled, __pyx_mstate->__pyx_kp_b_iso88591_Oq_M_8_q_VVW, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[323])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {6, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 325};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_consclassifier, __pyx_mstate->__pyx_n_u_consclassifiername, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_priority, __pyx_mstate->__pyx_n_u_enabled, __pyx_mstate->__pyx_n_u_c_consclassifiername, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[324] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_includeConsClassifier, __pyx_mstate->__pyx_kp_b_iso88591_ffqqr_Qa_q_A_Q_XZq_11Gq_iwgV1A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[324])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 342};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_n_consclassifiers};
    __pyx_mstate_global->__pyx_codeobj_tab[325] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getNConsClassifiers, __pyx_mstate->__pyx_kp_b_iso88591_A_I_a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[325])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 351};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_n_consclassifiers, __pyx_mstate->__pyx_n_u_consclassifiers, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[326] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_listConsClassifiers, __pyx_mstate->__pyx_kp_b_iso88591_A_I_a_44WWXX_q_G1ITQVV, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[326])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {6, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 361};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_varclassifier, __pyx_mstate->__pyx_n_u_varclassifiername, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_priority, __pyx_mstate->__pyx_n_u_enabled, __pyx_mstate->__pyx_n_u_c_varclassifiername, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[327] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_includeVarClassifier, __pyx_mstate->__pyx_kp_b_iso88591_bbmmn_nAQ_q_A_A_HJa_0EQ_YgWF_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[327])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 378};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_n_varclassifiers};
    __pyx_mstate_global->__pyx_codeobj_tab[328] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getNVarClassifiers, __pyx_mstate->__pyx_kp_b_iso88591_A_Gq_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[328])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 387};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_n_varclassifiers, __pyx_mstate->__pyx_n_u_varclassifiers, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[329] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_listVarClassifiers, __pyx_mstate->__pyx_kp_b_iso88591_A_Gq_A_22TTUUYYZ_q_q_as_4uTYYZZ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[329])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 397};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_varclassifier_name, __pyx_mstate->__pyx_n_u_is_enabled};
    __pyx_mstate_global->__pyx_codeobj_tab[330] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_setVarClassifierEnabled, __pyx_mstate->__pyx_kp_b_iso88591_EQ_M_MWTUUjjk, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[330])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {17, 0, 0, 20, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 408};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detector, __pyx_mstate->__pyx_n_u_detectorname, __pyx_mstate->__pyx_n_u_decchar, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_freqcallround, __pyx_mstate->__pyx_n_u_maxcallround, __pyx_mstate->__pyx_n_u_mincallround, __pyx_mstate->__pyx_n_u_freqcallroundoriginal, __pyx_mstate->__pyx_n_u_maxcallroundoriginal, __pyx_mstate->__pyx_n_u_mincallroundoriginal, __pyx_mstate->__pyx_n_u_priority, __pyx_mstate->__pyx_n_u_enabled, __pyx_mstate->__pyx_n_u_enabledfinishing, __pyx_mstate->__pyx_n_u_enabledpostprocessing, __pyx_mstate->__pyx_n_u_skip, __pyx_mstate->__pyx_n_u_usefulrecall, __pyx_mstate->__pyx_n_u_c_detectorname, __pyx_mstate->__pyx_n_u_c_decchar, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[331] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_includeDetector, __pyx_mstate->__pyx_kp_b_iso88591_l_m_C_C_t_t_R_R_i_i_i_i_3ay_1_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[331])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 434};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_score, __pyx_mstate->__pyx_n_u_scorename, __pyx_mstate->__pyx_n_u_shortname, __pyx_mstate->__pyx_n_u_desc, __pyx_mstate->__pyx_n_u_c_scorename, __pyx_mstate->__pyx_n_u_c_shortname, __pyx_mstate->__pyx_n_u_c_desc};
    __pyx_mstate_global->__pyx_codeobj_tab[332] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_includeScore, __pyx_mstate->__pyx_kp_b_iso88591_A_nAQ_nAQ_q_A_A_M_G_YgWF_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[332])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 453};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_n_detectors, __pyx_mstate->__pyx_n_u_detectors, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[333] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_listDetectors, __pyx_mstate->__pyx_kp_b_iso88591_A_Qd_EQd_q_9AS_q_U_qPQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[333])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 469};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_n_scores, __pyx_mstate->__pyx_n_u_scores, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[334] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_listScores, __pyx_mstate->__pyx_kp_b_iso88591_A_M_a_at1_q_q_as_4uE, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[334])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 479};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detector_name, __pyx_mstate->__pyx_n_u_is_enabled};
    __pyx_mstate_global->__pyx_codeobj_tab[335] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_setDetectorEnabled, __pyx_mstate->__pyx_kp_b_iso88591_1_M_BRRS, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[335])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 494};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detector_name, __pyx_mstate->__pyx_n_u_is_enabled};
    __pyx_mstate_global->__pyx_codeobj_tab[336] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_setDetectorFinishingEnabled, __pyx_mstate->__pyx_kp_b_iso88591_DA_M_C7_K, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[336])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 507};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_detector_name, __pyx_mstate->__pyx_n_u_is_enabled};
    __pyx_mstate_global->__pyx_codeobj_tab[337] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_setDetectorPostprocessingEnabled, __pyx_mstate->__pyx_kp_b_iso88591_I_M_H_qP_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[337])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 520};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_master_prob};
    __pyx_mstate_global->__pyx_codeobj_tab[338] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getMasterProb, __pyx_mstate->__pyx_kp_b_iso88591_A_2_4q_WAQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[338])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 528};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_setting};
    __pyx_mstate_global->__pyx_codeobj_tab[339] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_setGCGSeparating, __pyx_mstate->__pyx_kp_b_iso88591_A_A_Qd, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[339])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {6, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 536};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_directory, __pyx_mstate->__pyx_n_u_extension, __pyx_mstate->__pyx_n_u_original, __pyx_mstate->__pyx_n_u_presolved, __pyx_mstate->__pyx_n_u_createDirectory, __pyx_mstate->__pyx_n_u_c_directory, __pyx_mstate->__pyx_n_u_c_extension};
    __pyx_mstate_global->__pyx_codeobj_tab[340] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_writeAllDecomps, __pyx_mstate->__pyx_kp_b_iso88591_HH_r_s_I_I_J_1_6_6_nAQ_nAQ_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[340])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 549};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_n_vars, __pyx_mstate->__pyx_n_u_mastervars, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[341] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getMastervars, __pyx_mstate->__pyx_kp_b_iso88591_A_6b_a_DPQ_y_q_4t5_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[341])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[342] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[342])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[343] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[343])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {6, 0, 0, 13, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 572};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_probnr, __pyx_mstate->__pyx_n_u_variables, __pyx_mstate->__pyx_n_u_vals, __pyx_mstate->__pyx_n_u_isray, __pyx_mstate->__pyx_n_u_redcost, __pyx_mstate->__pyx_n_u_gcg_col, __pyx_mstate->__pyx_n_u_gcg, __pyx_mstate->__pyx_n_u_nvars, __pyx_mstate->__pyx_n_u_c_vars, __pyx_mstate->__pyx_n_u_c_vals, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_pyGCGCol};
    __pyx_mstate_global->__pyx_codeobj_tab[344] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_createGcgCol, __pyx_mstate->__pyx_kp_b_iso88591_A_q_A_1A_fAV2Q_fAV2Q_E_aq_6_9AS, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[344])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[345] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[345])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[346] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[346])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 613};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_col, __pyx_mstate->__pyx_n_u_gcg};
    __pyx_mstate_global->__pyx_codeobj_tab[347] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_addCol, __pyx_mstate->__pyx_kp_b_iso88591_A_q_A_A_AU_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[347])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 617};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_var, __pyx_mstate->__pyx_n_u_n_vars, __pyx_mstate->__pyx_n_u_originalvars, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[348] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_pygcgopt_gcg_pyx, __pyx_mstate->__pyx_n_u_getOrigvars, __pyx_mstate->__pyx_kp_b_iso88591_A_2_Jd_b_a_y_q_AT_U_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[348])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[349] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[349])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[350] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[350])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[351] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[351])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[352] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[352])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[353] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_Detector, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_881A_7_nA_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[353])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[354] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_PricingSolver, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_7_q0_a_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[354])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[355] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_Score, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_5_7_q_a_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[355])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[356] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_ConsClassifier, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_7_0_1B_PQ_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[356])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[357] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_VarClassifier, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_7_q0_a_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[357])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[358] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_PY_GCG_PRICINGSTA, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_xq_7_6a7Nn_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[358])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[359] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_PY_USERGIVEN, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_xq_7_a_nA_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[359])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[360] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_PY_VAR_DECOMPINFO, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_HAQ_7_314H_VW_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[360])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[361] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_PY_CONS_DECOMPINF, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_XQa_7_4A5J_XY_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[361])) goto bad;
  }
  Py_DECREF(tuple_dedup_map);
  return 0;
  bad:
  Py_DECREF(tuple_dedup_map);
  return -1;
}
/* #### Code section: init_globals ### */

static int __Pyx_InitGlobals(void) {
  /* PythonCompatibility.init */
  if (likely(__Pyx_init_co_variables() == 0)); else
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  /* CommonTypesMetaclass.init */
  if (likely(__pyx_CommonTypesMetaclass_init(__pyx_m) == 0)); else
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  /* CachedMethodType.init */
  #if CYTHON_COMPILING_IN_LIMITED_API
  {
      PyObject *typesModule=NULL;
      typesModule = PyImport_ImportModule("types");
      if (typesModule) {
          __pyx_mstate_global->__Pyx_CachedMethodType = PyObject_GetAttrString(typesModule, "MethodType");
          Py_DECREF(typesModule);
      }
  } // error handling follows
  #endif
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  /* CythonFunctionShared.init */
  if (likely(__pyx_CyFunction_init(__pyx_m) == 0)); else
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: cleanup_globals ### */
/* #### Code section: cleanup_module ### */
/* #### Code section: main_method ### */
/* #### Code section: utility_code_pragmas ### */
#ifdef _MSC_VER
#pragma warning( push )
/* Warning 4127: conditional expression is constant
 * Cython uses constant conditional expressions to allow in inline functions to be optimized at
 * compile-time, so this warning is not useful
 */
#pragma warning( disable : 4127 )
#endif



/* #### Code section: utility_code_def ### */

/* --- Runtime support code --- */
/* Refnanny */
#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule(modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, "RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif

/* PyErrExceptionMatches (used by PyObjectGetAttrStrNoError) */
#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);
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
    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) {
    int result;
    PyObject *exc_type;
#if PY_VERSION_HEX >= 0x030C00A6
    PyObject *current_exception = tstate->current_exception;
    if (unlikely(!current_exception)) return 0;
    exc_type = (PyObject*) Py_TYPE(current_exception);
    if (exc_type == err) return 1;
#else
    exc_type = tstate->curexc_type;
    if (exc_type == err) return 1;
    if (unlikely(!exc_type)) return 0;
#endif
    #if CYTHON_AVOID_BORROWED_REFS
    Py_INCREF(exc_type);
    #endif
    if (unlikely(PyTuple_Check(err))) {
        result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
    } else {
        result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
    }
    #if CYTHON_AVOID_BORROWED_REFS
    Py_DECREF(exc_type);
    #endif
    return result;
}
#endif

/* PyErrFetchRestore (used by PyObjectGetAttrStrNoError) */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
#if PY_VERSION_HEX >= 0x030C00A6
    PyObject *tmp_value;
    assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value)));
    if (value) {
        #if CYTHON_COMPILING_IN_CPYTHON
        if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb))
        #endif
            PyException_SetTraceback(value, tb);
    }
    tmp_value = tstate->current_exception;
    tstate->current_exception = value;
    Py_XDECREF(tmp_value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
#else
    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);
#endif
}
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
#if PY_VERSION_HEX >= 0x030C00A6
    PyObject* exc_value;
    exc_value = tstate->current_exception;
    tstate->current_exception = 0;
    *value = exc_value;
    *type = NULL;
    *tb = NULL;
    if (exc_value) {
        *type = (PyObject*) Py_TYPE(exc_value);
        Py_INCREF(*type);
        #if CYTHON_COMPILING_IN_CPYTHON
        *tb = ((PyBaseExceptionObject*) exc_value)->traceback;
        Py_XINCREF(*tb);
        #else
        *tb = PyException_GetTraceback(exc_value);
        #endif
    }
#else
    *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
}
#endif

/* PyObjectGetAttrStr (used by PyObjectGetAttrStrNoError) */
#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);
    return PyObject_GetAttr(obj, attr_name);
}
#endif

/* PyObjectGetAttrStrNoError (used by GetBuiltinName) */
#if __PYX_LIMITED_VERSION_HEX < 0x030d0000
static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        __Pyx_PyErr_Clear();
}
#endif
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) {
    PyObject *result;
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
    (void) PyObject_GetOptionalAttr(obj, attr_name, &result);
    return result;
#else
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS
    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;
#endif
}

/* GetBuiltinName */
static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_mstate_global->__pyx_b, name);
    if (unlikely(!result) && !PyErr_Occurred()) {
        PyErr_Format(PyExc_NameError,
            "name '%U' is not defined", name);
    }
    return result;
}

/* 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) {
    PyObject* exc_type;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    exc_type = __Pyx_PyErr_CurrentExceptionType();
    if (unlikely(exc_type)) {
        if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))
            return -1;
        __Pyx_PyErr_Clear();
        return 0;
    }
    return 0;
}

/* UnpackItemEndCheck */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
    if (unlikely(retval)) {
        Py_DECREF(retval);
        __Pyx_RaiseTooManyValuesError(expected);
        return -1;
    }
    return __Pyx_IterFinish();
}

/* TupleAndListFromArray (used by fastcall) */
#if !CYTHON_COMPILING_IN_CPYTHON && CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject *
__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
{
    PyObject *res;
    Py_ssize_t i;
    if (n <= 0) {
        return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_tuple);
    }
    res = PyTuple_New(n);
    if (unlikely(res == NULL)) return NULL;
    for (i = 0; i < n; i++) {
        if (unlikely(__Pyx_PyTuple_SET_ITEM(res, i, src[i]) < (0))) {
            Py_DECREF(res);
            return NULL;
        }
        Py_INCREF(src[i]);
    }
    return res;
}
#elif CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
    PyObject *v;
    Py_ssize_t i;
    for (i = 0; i < length; i++) {
        v = dest[i] = src[i];
        Py_INCREF(v);
    }
}
static CYTHON_INLINE PyObject *
__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
{
    PyObject *res;
    if (n <= 0) {
        return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_tuple);
    }
    res = PyTuple_New(n);
    if (unlikely(res == NULL)) return NULL;
    __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n);
    return res;
}
static CYTHON_INLINE PyObject *
__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n)
{
    PyObject *res;
    if (n <= 0) {
        return PyList_New(0);
    }
    res = PyList_New(n);
    if (unlikely(res == NULL)) return NULL;
    __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n);
    return res;
}
#endif

/* BytesEquals (used by UnicodeEquals) */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL ||\
        !(CYTHON_ASSUME_SAFE_SIZE && CYTHON_ASSUME_SAFE_MACROS)
    return PyObject_RichCompareBool(s1, s2, equals);
#else
    if (s1 == s2) {
        return (equals == Py_EQ);
    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
        const char *ps1, *ps2;
        Py_ssize_t length = PyBytes_GET_SIZE(s1);
        if (length != PyBytes_GET_SIZE(s2))
            return (equals == Py_NE);
        ps1 = PyBytes_AS_STRING(s1);
        ps2 = PyBytes_AS_STRING(s2);
        if (ps1[0] != ps2[0]) {
            return (equals == Py_NE);
        } else if (length == 1) {
            return (equals == Py_EQ);
        } else {
            int result;
#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000)
            Py_hash_t hash1, hash2;
            hash1 = ((PyBytesObject*)s1)->ob_shash;
            hash2 = ((PyBytesObject*)s2)->ob_shash;
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                return (equals == Py_NE);
            }
#endif
            result = memcmp(ps1, ps2, (size_t)length);
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
        return (equals == Py_NE);
    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
        return (equals == Py_NE);
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
#endif
}

/* UnicodeEquals (used by fastcall) */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL
    return PyObject_RichCompareBool(s1, s2, equals);
#else
    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 (s1_is_unicode & s2_is_unicode) {
        Py_ssize_t length, length2;
        int kind;
        void *data1, *data2;
        #if !CYTHON_COMPILING_IN_LIMITED_API
        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
            return -1;
        #endif
        length = __Pyx_PyUnicode_GET_LENGTH(s1);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(length < 0)) return -1;
        #endif
        length2 = __Pyx_PyUnicode_GET_LENGTH(s2);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(length2 < 0)) return -1;
        #endif
        if (length != length2) {
            goto return_ne;
        }
#if CYTHON_USE_UNICODE_INTERNALS
        {
            Py_hash_t hash1, hash2;
            hash1 = ((PyASCIIObject*)s1)->hash;
            hash2 = ((PyASCIIObject*)s2)->hash;
            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));
            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_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
return_eq:
    return (equals == Py_EQ);
return_ne:
    return (equals == Py_NE);
#endif
}

/* fastcall */
#if CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s)
{
    Py_ssize_t i, n = __Pyx_PyTuple_GET_SIZE(kwnames);
    #if !CYTHON_ASSUME_SAFE_SIZE
    if (unlikely(n == -1)) return NULL;
    #endif
    for (i = 0; i < n; i++)
    {
        PyObject *namei = __Pyx_PyTuple_GET_ITEM(kwnames, i);
        #if !CYTHON_ASSUME_SAFE_MACROS
        if (unlikely(!namei)) return NULL;
        #endif
        if (s == namei) return kwvalues[i];
    }
    for (i = 0; i < n; i++)
    {
        PyObject *namei = __Pyx_PyTuple_GET_ITEM(kwnames, i);
        #if !CYTHON_ASSUME_SAFE_MACROS
        if (unlikely(!namei)) return NULL;
        #endif
        int eq = __Pyx_PyUnicode_Equals(s, namei, Py_EQ);
        if (unlikely(eq != 0)) {
            if (unlikely(eq < 0)) return NULL;
            return kwvalues[i];
        }
    }
    return NULL;
}
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) {
    Py_ssize_t i, nkwargs;
    PyObject *dict;
#if !CYTHON_ASSUME_SAFE_SIZE
    nkwargs = PyTuple_Size(kwnames);
    if (unlikely(nkwargs < 0)) return NULL;
#else
    nkwargs = PyTuple_GET_SIZE(kwnames);
#endif
    dict = PyDict_New();
    if (unlikely(!dict))
        return NULL;
    for (i=0; i<nkwargs; i++) {
#if !CYTHON_ASSUME_SAFE_MACROS
        PyObject *key = PyTuple_GetItem(kwnames, i);
        if (!key) goto bad;
#else
        PyObject *key = PyTuple_GET_ITEM(kwnames, i);
#endif
        if (unlikely(PyDict_SetItem(dict, key, kwvalues[i]) < 0))
            goto bad;
    }
    return dict;
bad:
    Py_DECREF(dict);
    return NULL;
}
#endif
#endif

/* RaiseArgTupleInvalid */
static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *more_or_less;
    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

/* PyObjectCall (used by PyObjectFastCall) */
#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(" 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 (used by PyObjectFastCall) */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
    PyObject *self, *result;
    PyCFunction cfunc;
    cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func);
    self = __Pyx_CyOrPyCFunction_GET_SELF(func);
    if (unlikely(Py_EnterRecursiveCall(" while calling a Python object")))
        return NULL;
    result = cfunc(self, arg);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectFastCall (used by PyObjectCallOneArg) */
#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API
static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject * const*args, size_t nargs, PyObject *kwargs) {
    PyObject *argstuple;
    PyObject *result = 0;
    size_t i;
    argstuple = PyTuple_New((Py_ssize_t)nargs);
    if (unlikely(!argstuple)) return NULL;
    for (i = 0; i < nargs; i++) {
        Py_INCREF(args[i]);
        if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) != (0)) goto bad;
    }
    result = __Pyx_PyObject_Call(func, argstuple, kwargs);
  bad:
    Py_DECREF(argstuple);
    return result;
}
#endif
#if CYTHON_VECTORCALL && !CYTHON_COMPILING_IN_LIMITED_API
  #if PY_VERSION_HEX < 0x03090000
    #define __Pyx_PyVectorcall_Function(callable) _PyVectorcall_Function(callable)
  #elif CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE vectorcallfunc __Pyx_PyVectorcall_Function(PyObject *callable) {
    PyTypeObject *tp = Py_TYPE(callable);
    #if defined(__Pyx_CyFunction_USED)
    if (__Pyx_CyFunction_CheckExact(callable)) {
        return __Pyx_CyFunction_func_vectorcall(callable);
    }
    #endif
    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
        return NULL;
    }
    assert(PyCallable_Check(callable));
    Py_ssize_t offset = tp->tp_vectorcall_offset;
    assert(offset > 0);
    vectorcallfunc ptr;
    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
    return ptr;
}
  #else
    #define __Pyx_PyVectorcall_Function(callable) PyVectorcall_Function(callable)
  #endif
#endif
static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject *const *args, size_t _nargs, PyObject *kwargs) {
    Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs);
#if CYTHON_COMPILING_IN_CPYTHON
    if (nargs == 0 && kwargs == NULL) {
        if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS))
            return __Pyx_PyObject_CallMethO(func, NULL);
    }
    else if (nargs == 1 && kwargs == NULL) {
        if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O))
            return __Pyx_PyObject_CallMethO(func, args[0]);
    }
#endif
    if (kwargs == NULL) {
        #if CYTHON_VECTORCALL
          #if CYTHON_COMPILING_IN_LIMITED_API
            return PyObject_Vectorcall(func, args, _nargs, NULL);
          #else
            vectorcallfunc f = __Pyx_PyVectorcall_Function(func);
            if (f) {
                return f(func, args, _nargs, NULL);
            }
          #endif
        #endif
    }
    if (nargs == 0) {
        return __Pyx_PyObject_Call(func, __pyx_mstate_global->__pyx_empty_tuple, kwargs);
    }
    #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API
    return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs);
    #else
    return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs);
    #endif
}

/* PyObjectCallOneArg (used by CallUnboundCMethod0) */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *args[2] = {NULL, arg};
    return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* UnpackUnboundCMethod (used by CallUnboundCMethod0) */
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030C0000
static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) {
    PyObject *result;
    PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args));
    if (unlikely(!selfless_args)) return NULL;
    result = PyObject_Call(method, selfless_args, kwargs);
    Py_DECREF(selfless_args);
    return result;
}
#elif CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03090000
static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) {
        return _PyObject_Vectorcall
            (method, args ? args+1 : NULL, nargs ? nargs-1 : 0, kwnames);
}
#else
static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) {
    return
#if PY_VERSION_HEX < 0x03090000
    _PyObject_Vectorcall
#else
    PyObject_Vectorcall
#endif
        (method, args ? args+1 : NULL, nargs ? (size_t) nargs-1 : 0, kwnames);
}
#endif
static PyMethodDef __Pyx_UnboundCMethod_Def = {
     "CythonUnboundCMethod",
     __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall),
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030C0000
     METH_VARARGS | METH_KEYWORDS,
#else
     METH_FASTCALL | METH_KEYWORDS,
#endif
     NULL
};
static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
    PyObject *method, *result=NULL;
    method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
    if (unlikely(!method))
        return -1;
    result = method;
#if CYTHON_COMPILING_IN_CPYTHON
    if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type)))
    {
        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);
    } else
#endif
#if CYTHON_COMPILING_IN_PYPY
#else
    if (PyCFunction_Check(method))
#endif
    {
        PyObject *self;
        int self_found;
#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY
        self = PyObject_GetAttrString(method, "__self__");
        if (!self) {
            PyErr_Clear();
        }
#else
        self = PyCFunction_GET_SELF(method);
#endif
        self_found = (self && self != Py_None);
#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY
        Py_XDECREF(self);
#endif
        if (self_found) {
            PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method);
            if (unlikely(!unbound_method)) return -1;
            Py_DECREF(method);
            result = unbound_method;
        }
    }
#if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    if (unlikely(target->method)) {
        Py_DECREF(result);
    } else
#endif
    target->method = result;
    return 0;
}

/* CallUnboundCMethod0 */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
    int was_initialized = __Pyx_CachedCFunction_GetAndSetInitializing(cfunc);
    if (likely(was_initialized == 2 && cfunc->func)) {
        if (likely(cfunc->flag == METH_NOARGS))
            return __Pyx_CallCFunction(cfunc, self, NULL);
        if (likely(cfunc->flag == METH_FASTCALL))
            return __Pyx_CallCFunctionFast(cfunc, self, NULL, 0);
        if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS))
            return __Pyx_CallCFunctionFastWithKeywords(cfunc, self, NULL, 0, NULL);
        if (likely(cfunc->flag == (METH_VARARGS | METH_KEYWORDS)))
            return __Pyx_CallCFunctionWithKeywords(cfunc, self, __pyx_mstate_global->__pyx_empty_tuple, NULL);
        if (cfunc->flag == METH_VARARGS)
            return __Pyx_CallCFunction(cfunc, self, __pyx_mstate_global->__pyx_empty_tuple);
        return __Pyx__CallUnboundCMethod0(cfunc, self);
    }
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    else if (unlikely(was_initialized == 1)) {
        __Pyx_CachedCFunction tmp_cfunc = {
#ifndef __cplusplus
            0
#endif
        };
        tmp_cfunc.type = cfunc->type;
        tmp_cfunc.method_name = cfunc->method_name;
        return __Pyx__CallUnboundCMethod0(&tmp_cfunc, self);
    }
#endif
    PyObject *result = __Pyx__CallUnboundCMethod0(cfunc, self);
    __Pyx_CachedCFunction_SetFinishedInitializing(cfunc);
    return result;
}
#endif
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
    PyObject *result;
    if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
    result = __Pyx_PyObject_CallOneArg(cfunc->method, self);
    return result;
}

/* py_dict_items (used by OwnedDictNext) */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) {
    return __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_items, d);
}

/* py_dict_values (used by OwnedDictNext) */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
    return __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_values, d);
}

/* OwnedDictNext (used by RejectKeywords) */
#if CYTHON_AVOID_BORROWED_REFS
static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject **pkey, PyObject **pvalue) {
    PyObject *next = NULL;
    if (!*ppos) {
        if (pvalue) {
            PyObject *dictview = pkey ? __Pyx_PyDict_Items(p) : __Pyx_PyDict_Values(p);
            if (unlikely(!dictview)) goto bad;
            *ppos = PyObject_GetIter(dictview);
            Py_DECREF(dictview);
        } else {
            *ppos = PyObject_GetIter(p);
        }
        if (unlikely(!*ppos)) goto bad;
    }
    next = PyIter_Next(*ppos);
    if (!next) {
        if (PyErr_Occurred()) goto bad;
        return 0;
    }
    if (pkey && pvalue) {
        *pkey = __Pyx_PySequence_ITEM(next, 0);
        if (unlikely(*pkey)) goto bad;
        *pvalue = __Pyx_PySequence_ITEM(next, 1);
        if (unlikely(*pvalue)) goto bad;
        Py_DECREF(next);
    } else if (pkey) {
        *pkey = next;
    } else {
        assert(pvalue);
        *pvalue = next;
    }
    return 1;
  bad:
    Py_XDECREF(next);
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d0000
    PyErr_FormatUnraisable("Exception ignored in __Pyx_PyDict_NextRef");
#else
    PyErr_WriteUnraisable(__pyx_mstate_global->__pyx_n_u_Pyx_PyDict_NextRef);
#endif
    if (pkey) *pkey = NULL;
    if (pvalue) *pvalue = NULL;
    return 0;
}
#else // !CYTHON_AVOID_BORROWED_REFS
static int __Pyx_PyDict_NextRef(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue) {
    int result = PyDict_Next(p, ppos, pkey, pvalue);
    if (likely(result == 1)) {
        if (pkey) Py_INCREF(*pkey);
        if (pvalue) Py_INCREF(*pvalue);
    }
    return result;
}
#endif

/* RejectKeywords */
static void __Pyx_RejectKeywords(const char* function_name, PyObject *kwds) {
    PyObject *key = NULL;
    if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds))) {
        key = __Pyx_PySequence_ITEM(kwds, 0);
    } else {
#if CYTHON_AVOID_BORROWED_REFS
        PyObject *pos = NULL;
#else
        Py_ssize_t pos = 0;
#endif
#if !CYTHON_COMPILING_IN_PYPY || defined(PyArg_ValidateKeywordArguments)
        if (unlikely(!PyArg_ValidateKeywordArguments(kwds))) return;
#endif
        __Pyx_PyDict_NextRef(kwds, &pos, &key, NULL);
#if CYTHON_AVOID_BORROWED_REFS
        Py_XDECREF(pos);
#endif
    }
    if (likely(key)) {
        PyErr_Format(PyExc_TypeError,
            "%s() got an unexpected keyword argument '%U'",
            function_name, key);
        Py_DECREF(key);
    }
}

/* RaiseDoubleKeywords (used by ParseKeywordsImpl) */
static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
}

/* CallUnboundCMethod2 */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2) {
    int was_initialized = __Pyx_CachedCFunction_GetAndSetInitializing(cfunc);
    if (likely(was_initialized == 2 && cfunc->func)) {
        PyObject *args[2] = {arg1, arg2};
        if (cfunc->flag == METH_FASTCALL) {
            return __Pyx_CallCFunctionFast(cfunc, self, args, 2);
        }
        if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS))
            return __Pyx_CallCFunctionFastWithKeywords(cfunc, self, args, 2, NULL);
    }
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    else if (unlikely(was_initialized == 1)) {
        __Pyx_CachedCFunction tmp_cfunc = {
#ifndef __cplusplus
            0
#endif
        };
        tmp_cfunc.type = cfunc->type;
        tmp_cfunc.method_name = cfunc->method_name;
        return __Pyx__CallUnboundCMethod2(&tmp_cfunc, self, arg1, arg2);
    }
#endif
    PyObject *result = __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2);
    __Pyx_CachedCFunction_SetFinishedInitializing(cfunc);
    return result;
}
#endif
static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2){
    if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
#if CYTHON_COMPILING_IN_CPYTHON
    if (cfunc->func && (cfunc->flag & METH_VARARGS)) {
        PyObject *result = NULL;
        PyObject *args = PyTuple_New(2);
        if (unlikely(!args)) return NULL;
        Py_INCREF(arg1);
        PyTuple_SET_ITEM(args, 0, arg1);
        Py_INCREF(arg2);
        PyTuple_SET_ITEM(args, 1, arg2);
        if (cfunc->flag & METH_KEYWORDS)
            result = __Pyx_CallCFunctionWithKeywords(cfunc, self, args, NULL);
        else
            result = __Pyx_CallCFunction(cfunc, self, args);
        Py_DECREF(args);
        return result;
    }
#endif
    {
        PyObject *args[4] = {NULL, self, arg1, arg2};
        return __Pyx_PyObject_FastCall(cfunc->method, args+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
    }
}

/* ParseKeywordsImpl (used by ParseKeywords) */
static int __Pyx_ValidateDuplicatePosArgs(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    const char* function_name)
{
    PyObject ** const *name = argnames;
    while (name != first_kw_arg) {
        PyObject *key = **name;
        int found = PyDict_Contains(kwds, key);
        if (unlikely(found)) {
            if (found == 1) __Pyx_RaiseDoubleKeywordsError(function_name, key);
            goto bad;
        }
        name++;
    }
    return 0;
bad:
    return -1;
}
#if CYTHON_USE_UNICODE_INTERNALS
static CYTHON_INLINE int __Pyx_UnicodeKeywordsEqual(PyObject *s1, PyObject *s2) {
    int kind;
    Py_ssize_t len = PyUnicode_GET_LENGTH(s1);
    if (len != PyUnicode_GET_LENGTH(s2)) return 0;
    kind = PyUnicode_KIND(s1);
    if (kind != PyUnicode_KIND(s2)) return 0;
    const void *data1 = PyUnicode_DATA(s1);
    const void *data2 = PyUnicode_DATA(s2);
    return (memcmp(data1, data2, (size_t) len * (size_t) kind) == 0);
}
#endif
static int __Pyx_MatchKeywordArg_str(
    PyObject *key,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    size_t *index_found,
    const char *function_name)
{
    PyObject ** const *name;
    #if CYTHON_USE_UNICODE_INTERNALS
    Py_hash_t key_hash = ((PyASCIIObject*)key)->hash;
    if (unlikely(key_hash == -1)) {
        key_hash = PyObject_Hash(key);
        if (unlikely(key_hash == -1))
            goto bad;
    }
    #endif
    name = first_kw_arg;
    while (*name) {
        PyObject *name_str = **name;
        #if CYTHON_USE_UNICODE_INTERNALS
        if (key_hash == ((PyASCIIObject*)name_str)->hash && __Pyx_UnicodeKeywordsEqual(name_str, key)) {
            *index_found = (size_t) (name - argnames);
            return 1;
        }
        #else
        #if CYTHON_ASSUME_SAFE_SIZE
        if (PyUnicode_GET_LENGTH(name_str) == PyUnicode_GET_LENGTH(key))
        #endif
        {
            int cmp = PyUnicode_Compare(name_str, key);
            if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
            if (cmp == 0) {
                *index_found = (size_t) (name - argnames);
                return 1;
            }
        }
        #endif
        name++;
    }
    name = argnames;
    while (name != first_kw_arg) {
        PyObject *name_str = **name;
        #if CYTHON_USE_UNICODE_INTERNALS
        if (unlikely(key_hash == ((PyASCIIObject*)name_str)->hash)) {
            if (__Pyx_UnicodeKeywordsEqual(name_str, key))
                goto arg_passed_twice;
        }
        #else
        #if CYTHON_ASSUME_SAFE_SIZE
        if (PyUnicode_GET_LENGTH(name_str) == PyUnicode_GET_LENGTH(key))
        #endif
        {
            if (unlikely(name_str == key)) goto arg_passed_twice;
            int cmp = PyUnicode_Compare(name_str, key);
            if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
            if (cmp == 0) goto arg_passed_twice;
        }
        #endif
        name++;
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    goto bad;
bad:
    return -1;
}
static int __Pyx_MatchKeywordArg_nostr(
    PyObject *key,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    size_t *index_found,
    const char *function_name)
{
    PyObject ** const *name;
    if (unlikely(!PyUnicode_Check(key))) goto invalid_keyword_type;
    name = first_kw_arg;
    while (*name) {
        int cmp = PyObject_RichCompareBool(**name, key, Py_EQ);
        if (cmp == 1) {
            *index_found = (size_t) (name - argnames);
            return 1;
        }
        if (unlikely(cmp == -1)) goto bad;
        name++;
    }
    name = argnames;
    while (name != first_kw_arg) {
        int cmp = PyObject_RichCompareBool(**name, key, Py_EQ);
        if (unlikely(cmp != 0)) {
            if (cmp == 1) goto arg_passed_twice;
            else goto bad;
        }
        name++;
    }
    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;
bad:
    return -1;
}
static CYTHON_INLINE int __Pyx_MatchKeywordArg(
    PyObject *key,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    size_t *index_found,
    const char *function_name)
{
    return likely(PyUnicode_CheckExact(key)) ?
        __Pyx_MatchKeywordArg_str(key, argnames, first_kw_arg, index_found, function_name) :
        __Pyx_MatchKeywordArg_nostr(key, argnames, first_kw_arg, index_found, function_name);
}
static void __Pyx_RejectUnknownKeyword(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    const char *function_name)
{
    #if CYTHON_AVOID_BORROWED_REFS
    PyObject *pos = NULL;
    #else
    Py_ssize_t pos = 0;
    #endif
    PyObject *key = NULL;
    __Pyx_BEGIN_CRITICAL_SECTION(kwds);
    while (
        #if CYTHON_AVOID_BORROWED_REFS
        __Pyx_PyDict_NextRef(kwds, &pos, &key, NULL)
        #else
        PyDict_Next(kwds, &pos, &key, NULL)
        #endif
    ) {
        PyObject** const *name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (!*name) {
            size_t index_found = 0;
            int cmp = __Pyx_MatchKeywordArg(key, argnames, first_kw_arg, &index_found, function_name);
            if (cmp != 1) {
                if (cmp == 0) {
                    PyErr_Format(PyExc_TypeError,
                        "%s() got an unexpected keyword argument '%U'",
                        function_name, key);
                }
                #if CYTHON_AVOID_BORROWED_REFS
                Py_DECREF(key);
                #endif
                break;
            }
        }
        #if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(key);
        #endif
    }
    __Pyx_END_CRITICAL_SECTION();
    #if CYTHON_AVOID_BORROWED_REFS
    Py_XDECREF(pos);
    #endif
    assert(PyErr_Occurred());
}
static int __Pyx_ParseKeywordDict(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs)
{
    PyObject** const *name;
    PyObject** const *first_kw_arg = argnames + num_pos_args;
    Py_ssize_t extracted = 0;
#if !CYTHON_COMPILING_IN_PYPY || defined(PyArg_ValidateKeywordArguments)
    if (unlikely(!PyArg_ValidateKeywordArguments(kwds))) return -1;
#endif
    name = first_kw_arg;
    while (*name && num_kwargs > extracted) {
        PyObject * key = **name;
        PyObject *value;
        int found = 0;
        #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
        found = PyDict_GetItemRef(kwds, key, &value);
        #else
        value = PyDict_GetItemWithError(kwds, key);
        if (value) {
            Py_INCREF(value);
            found = 1;
        } else {
            if (unlikely(PyErr_Occurred())) goto bad;
        }
        #endif
        if (found) {
            if (unlikely(found < 0)) goto bad;
            values[name-argnames] = value;
            extracted++;
        }
        name++;
    }
    if (num_kwargs > extracted) {
        if (ignore_unknown_kwargs) {
            if (unlikely(__Pyx_ValidateDuplicatePosArgs(kwds, argnames, first_kw_arg, function_name) == -1))
                goto bad;
        } else {
            __Pyx_RejectUnknownKeyword(kwds, argnames, first_kw_arg, function_name);
            goto bad;
        }
    }
    return 0;
bad:
    return -1;
}
static int __Pyx_ParseKeywordDictToDict(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject** const *name;
    PyObject** const *first_kw_arg = argnames + num_pos_args;
    Py_ssize_t len;
#if !CYTHON_COMPILING_IN_PYPY || defined(PyArg_ValidateKeywordArguments)
    if (unlikely(!PyArg_ValidateKeywordArguments(kwds))) return -1;
#endif
    if (PyDict_Update(kwds2, kwds) < 0) goto bad;
    name = first_kw_arg;
    while (*name) {
        PyObject *key = **name;
        PyObject *value;
#if !CYTHON_COMPILING_IN_LIMITED_API && (PY_VERSION_HEX >= 0x030d00A2 || defined(PyDict_Pop))
        int found = PyDict_Pop(kwds2, key, &value);
        if (found) {
            if (unlikely(found < 0)) goto bad;
            values[name-argnames] = value;
        }
#elif __PYX_LIMITED_VERSION_HEX >= 0x030d0000
        int found = PyDict_GetItemRef(kwds2, key, &value);
        if (found) {
            if (unlikely(found < 0)) goto bad;
            values[name-argnames] = value;
            if (unlikely(PyDict_DelItem(kwds2, key) < 0)) goto bad;
        }
#else
    #if CYTHON_COMPILING_IN_CPYTHON
        value = _PyDict_Pop(kwds2, key, kwds2);
    #else
        value = __Pyx_CallUnboundCMethod2(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_pop, kwds2, key, kwds2);
    #endif
        if (value == kwds2) {
            Py_DECREF(value);
        } else {
            if (unlikely(!value)) goto bad;
            values[name-argnames] = value;
        }
#endif
        name++;
    }
    len = PyDict_Size(kwds2);
    if (len > 0) {
        return __Pyx_ValidateDuplicatePosArgs(kwds, argnames, first_kw_arg, function_name);
    } else if (unlikely(len == -1)) {
        goto bad;
    }
    return 0;
bad:
    return -1;
}
static int __Pyx_ParseKeywordsTuple(
    PyObject *kwds,
    PyObject * const *kwvalues,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs)
{
    PyObject *key = NULL;
    PyObject** const * name;
    PyObject** const *first_kw_arg = argnames + num_pos_args;
    for (Py_ssize_t pos = 0; pos < num_kwargs; pos++) {
#if CYTHON_AVOID_BORROWED_REFS
        key = __Pyx_PySequence_ITEM(kwds, pos);
#else
        key = __Pyx_PyTuple_GET_ITEM(kwds, pos);
#endif
#if !CYTHON_ASSUME_SAFE_MACROS
        if (unlikely(!key)) goto bad;
#endif
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            PyObject *value = kwvalues[pos];
            values[name-argnames] = __Pyx_NewRef(value);
        } else {
            size_t index_found = 0;
            int cmp = __Pyx_MatchKeywordArg(key, argnames, first_kw_arg, &index_found, function_name);
            if (cmp == 1) {
                PyObject *value = kwvalues[pos];
                values[index_found] = __Pyx_NewRef(value);
            } else {
                if (unlikely(cmp == -1)) goto bad;
                if (kwds2) {
                    PyObject *value = kwvalues[pos];
                    if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
                } else if (!ignore_unknown_kwargs) {
                    goto invalid_keyword;
                }
            }
        }
        #if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(key);
        key = NULL;
        #endif
    }
    return 0;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    goto bad;
bad:
    #if CYTHON_AVOID_BORROWED_REFS
    Py_XDECREF(key);
    #endif
    return -1;
}

/* ParseKeywords */
static int __Pyx_ParseKeywords(
    PyObject *kwds,
    PyObject * const *kwvalues,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs)
{
    if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)))
        return __Pyx_ParseKeywordsTuple(kwds, kwvalues, argnames, kwds2, values, num_pos_args, num_kwargs, function_name, ignore_unknown_kwargs);
    else if (kwds2)
        return __Pyx_ParseKeywordDictToDict(kwds, argnames, kwds2, values, num_pos_args, function_name);
    else
        return __Pyx_ParseKeywordDict(kwds, argnames, values, num_pos_args, num_kwargs, function_name, ignore_unknown_kwargs);
}

/* ExtTypeTest */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    __Pyx_TypeName obj_type_name;
    __Pyx_TypeName type_name;
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(__Pyx_TypeCheck(obj, type)))
        return 1;
    obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
    type_name = __Pyx_PyType_GetFullyQualifiedName(type);
    PyErr_Format(PyExc_TypeError,
                 "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME,
                 obj_type_name, type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    __Pyx_DECREF_TypeName(type_name);
    return 0;
}

/* RaiseUnexpectedTypeError */
static int
__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj)
{
    __Pyx_TypeName obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME,
                 expected, obj_type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return 0;
}

/* GetAttr3 */
#if __PYX_LIMITED_VERSION_HEX < 0x030d0000
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;
}
#endif
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
    PyObject *r;
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
    int res = PyObject_GetOptionalAttr(o, n, &r);
    return (res != 0) ? r : __Pyx_NewRef(d);
#else
  #if CYTHON_USE_TYPE_SLOTS
    if (likely(PyUnicode_Check(n))) {
        r = __Pyx_PyObject_GetAttrStrNoError(o, n);
        if (unlikely(!r) && likely(!PyErr_Occurred())) {
            r = __Pyx_NewRef(d);
        }
        return r;
    }
  #endif
    r = PyObject_GetAttr(o, n);
    return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
#endif
}

/* PyDictVersioning (used by GetModuleGlobalName) */
#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_COMPILING_IN_LIMITED_API
    if (unlikely(!__pyx_m)) {
        if (!PyErr_Occurred())
            PyErr_SetNone(PyExc_NameError);
        return NULL;
    }
    result = PyObject_GetAttr(__pyx_m, name);
    if (likely(result)) {
        return result;
    }
    PyErr_Clear();
#elif CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
    if (unlikely(__Pyx_PyDict_GetItemRef(__pyx_mstate_global->__pyx_d, name, &result) == -1)) PyErr_Clear();
    __PYX_UPDATE_DICT_CACHE(__pyx_mstate_global->__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return result;
    }
#else
    result = _PyDict_GetItem_KnownHash(__pyx_mstate_global->__pyx_d, name, ((PyASCIIObject *) name)->hash);
    __PYX_UPDATE_DICT_CACHE(__pyx_mstate_global->__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    }
    PyErr_Clear();
#endif
    return __Pyx_GetBuiltinName(name);
}

/* PyObjectFastCallMethod */
#if !CYTHON_VECTORCALL || PY_VERSION_HEX < 0x03090000
static PyObject *__Pyx_PyObject_FastCallMethod(PyObject *name, PyObject *const *args, size_t nargsf) {
    PyObject *result;
    PyObject *attr = PyObject_GetAttr(args[0], name);
    if (unlikely(!attr))
        return NULL;
    result = __Pyx_PyObject_FastCall(attr, args+1, nargsf - 1);
    Py_DECREF(attr);
    return result;
}
#endif

/* RaiseException */
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 PY_VERSION_HEX >= 0x030C00A6
        PyException_SetTraceback(value, tb);
#elif CYTHON_FAST_THREAD_STATE
        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);
        }
#else
        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);
#endif
    }
bad:
    Py_XDECREF(owned_instance);
    return;
}

/* GetItemInt */
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (unlikely(!j)) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck, int unsafe_shared) {
    CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
#if CYTHON_ASSUME_SAFE_SIZE
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyList_GET_SIZE(o);
    }
    if ((CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS)) {
        return __Pyx_PyList_GetItemRefFast(o, wrapped_i, unsafe_shared);
    } else
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
        return __Pyx_NewRef(PyList_GET_ITEM(o, wrapped_i));
    }
    return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
#else
    (void)wraparound;
    (void)boundscheck;
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck, int unsafe_shared) {
    CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
#if CYTHON_ASSUME_SAFE_SIZE && 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)))) {
        return __Pyx_NewRef(PyTuple_GET_ITEM(o, wrapped_i));
    }
    return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
#else
    (void)wraparound;
    (void)boundscheck;
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
                                                     int wraparound, int boundscheck, int unsafe_shared) {
    CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
#if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
        if ((CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS)) {
            return __Pyx_PyList_GetItemRefFast(o, n, unsafe_shared);
        } else if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
            return __Pyx_NewRef(PyList_GET_ITEM(o, n));
        }
    } else
    #if !CYTHON_AVOID_BORROWED_REFS
    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)))) {
            return __Pyx_NewRef(PyTuple_GET_ITEM(o, n));
        }
    } else
    #endif
#endif
#if CYTHON_USE_TYPE_SLOTS && !CYTHON_COMPILING_IN_PYPY
    {
        PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping;
        PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence;
        if (!is_list && mm && mm->mp_subscript) {
            PyObject *r, *key = PyLong_FromSsize_t(i);
            if (unlikely(!key)) return NULL;
            r = mm->mp_subscript(o, key);
            Py_DECREF(key);
            return r;
        }
        if (is_list || likely(sm && sm->sq_item)) {
            if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) {
                Py_ssize_t l = sm->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                        return NULL;
                    PyErr_Clear();
                }
            }
            return sm->sq_item(o, i);
        }
    }
#else
    if (is_list || !PyMapping_Check(o)) {
        return PySequence_GetItem(o, i);
    }
#endif
    (void)wraparound;
    (void)boundscheck;
    return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
}

/* ObjectGetItem */
#if CYTHON_USE_TYPE_SLOTS
static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) {
    PyObject *runerr = NULL;
    Py_ssize_t key_value;
    key_value = __Pyx_PyIndex_AsSsize_t(index);
    if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) {
        return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1, 1);
    }
    if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
        __Pyx_TypeName index_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(index));
        PyErr_Clear();
        PyErr_Format(PyExc_IndexError,
            "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name);
        __Pyx_DECREF_TypeName(index_type_name);
    }
    return NULL;
}
static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) {
    __Pyx_TypeName obj_type_name;
    if (likely(PyType_Check(obj))) {
        PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_mstate_global->__pyx_n_u_class_getitem);
        if (!meth) {
            PyErr_Clear();
        } else {
            PyObject *result = __Pyx_PyObject_CallOneArg(meth, key);
            Py_DECREF(meth);
            return result;
        }
    }
    obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError,
        "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return NULL;
}
static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) {
    PyTypeObject *tp = Py_TYPE(obj);
    PyMappingMethods *mm = tp->tp_as_mapping;
    PySequenceMethods *sm = tp->tp_as_sequence;
    if (likely(mm && mm->mp_subscript)) {
        return mm->mp_subscript(obj, key);
    }
    if (likely(sm && sm->sq_item)) {
        return __Pyx_PyObject_GetIndex(obj, key);
    }
    return __Pyx_PyObject_GetItem_Slow(obj, key);
}
#endif

/* WriteUnraisableException */
static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                  int lineno, const char *filename,
                                  int full_traceback, int nogil) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    __Pyx_PyThreadState_declare
    PyGILState_STATE state;
    if (nogil)
        state = PyGILState_Ensure();
    else state = (PyGILState_STATE)0;
    CYTHON_UNUSED_VAR(clineno);
    CYTHON_UNUSED_VAR(lineno);
    CYTHON_UNUSED_VAR(filename);
    CYTHON_MAYBE_UNUSED_VAR(nogil);
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
    if (full_traceback) {
        Py_XINCREF(old_exc);
        Py_XINCREF(old_val);
        Py_XINCREF(old_tb);
        __Pyx_ErrRestore(old_exc, old_val, old_tb);
        PyErr_PrintEx(0);
    }
    ctx = PyUnicode_FromString(name);
    __Pyx_ErrRestore(old_exc, old_val, old_tb);
    if (!ctx) {
        PyErr_WriteUnraisable(Py_None);
    } else {
        PyErr_WriteUnraisable(ctx);
        Py_DECREF(ctx);
    }
    if (nogil)
        PyGILState_Release(state);
}

/* RaiseNoneIterError */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
}

/* decode_c_string */
static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
         const char* cstring, 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)) {
    Py_ssize_t length;
    if (unlikely((start < 0) | (stop < 0))) {
        size_t slen = strlen(cstring);
        if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) {
            PyErr_SetString(PyExc_OverflowError,
                            "c-string too long to convert to Python");
            return NULL;
        }
        length = (Py_ssize_t) slen;
        if (start < 0) {
            start += length;
            if (start < 0)
                start = 0;
        }
        if (stop < 0)
            stop += length;
    }
    if (unlikely(stop <= start))
        return __Pyx_NewRef(__pyx_mstate_global->__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);
    }
}

/* ArgTypeTestFunc (used by ArgTypeTest) */
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
{
    __Pyx_TypeName type_name;
    __Pyx_TypeName obj_type_name;
    PyObject *extra_info = __pyx_mstate_global->__pyx_empty_unicode;
    int from_annotation_subclass = 0;
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    else if (!exact) {
        if (likely(__Pyx_TypeCheck(obj, type))) return 1;
    } else if (exact == 2) {
        if (__Pyx_TypeCheck(obj, type)) {
            from_annotation_subclass = 1;
            extra_info = __pyx_mstate_global->__pyx_kp_u_Note_that_Cython_is_deliberately;
        }
    }
    type_name = __Pyx_PyType_GetFullyQualifiedName(type);
    obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME
        ", got " __Pyx_FMT_TYPENAME ")"
#if __PYX_LIMITED_VERSION_HEX < 0x030C0000
        "%s%U"
#endif
        , name, type_name, obj_type_name
#if __PYX_LIMITED_VERSION_HEX < 0x030C0000
        , (from_annotation_subclass ? ". " : ""), extra_info
#endif
        );
#if __PYX_LIMITED_VERSION_HEX >= 0x030C0000
    if (exact == 2 && from_annotation_subclass) {
        PyObject *res;
        PyObject *vargs[2];
        vargs[0] = PyErr_GetRaisedException();
        vargs[1] = extra_info;
        res = PyObject_VectorcallMethod(__pyx_mstate_global->__pyx_kp_u_add_note, vargs, 2, NULL);
        Py_XDECREF(res);
        PyErr_SetRaisedException(vargs[0]);
    }
#endif
    __Pyx_DECREF_TypeName(type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return 0;
}

/* JoinPyUnicode */
static PyObject* __Pyx_PyUnicode_Join(PyObject** values, Py_ssize_t value_count, Py_ssize_t result_ulength,
                                      Py_UCS4 max_char) {
#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    PyObject *result_uval;
    int result_ukind, kind_shift;
    Py_ssize_t i, char_pos;
    void *result_udata;
    if (max_char > 1114111) max_char = 1114111;
    result_uval = PyUnicode_New(result_ulength, max_char);
    if (unlikely(!result_uval)) return NULL;
    result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND;
    kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1;
    result_udata = PyUnicode_DATA(result_uval);
    assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0);
    if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - result_ulength < 0))
        goto overflow;
    char_pos = 0;
    for (i=0; i < value_count; i++) {
        int ukind;
        Py_ssize_t ulength;
        void *udata;
        PyObject *uval = values[i];
        #if !CYTHON_COMPILING_IN_LIMITED_API
        if (__Pyx_PyUnicode_READY(uval) == (-1))
            goto bad;
        #endif
        ulength = __Pyx_PyUnicode_GET_LENGTH(uval);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(ulength < 0)) goto bad;
        #endif
        if (unlikely(!ulength))
            continue;
        if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos))
            goto overflow;
        ukind = __Pyx_PyUnicode_KIND(uval);
        udata = __Pyx_PyUnicode_DATA(uval);
        if (ukind == result_ukind) {
            memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift));
        } else {
            #if PY_VERSION_HEX >= 0x030d0000
            if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad;
            #elif CYTHON_COMPILING_IN_CPYTHON || 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
    Py_ssize_t i;
    PyObject *result = NULL;
    PyObject *value_tuple = PyTuple_New(value_count);
    if (unlikely(!value_tuple)) return NULL;
    CYTHON_UNUSED_VAR(max_char);
    CYTHON_UNUSED_VAR(result_ulength);
    for (i=0; i<value_count; i++) {
        if (__Pyx_PyTuple_SET_ITEM(value_tuple, i, values[i]) != (0)) goto bad;
        Py_INCREF(values[i]);
    }
    result = PyUnicode_Join(__pyx_mstate_global->__pyx_empty_unicode, value_tuple);
bad:
    Py_DECREF(value_tuple);
    return result;
#endif
}

/* PyObjectLookupSpecial */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) {
    PyObject *res;
    PyTypeObject *tp = Py_TYPE(obj);
    res = _PyType_Lookup(tp, attr_name);
    if (likely(res)) {
        descrgetfunc f = Py_TYPE(res)->tp_descr_get;
        if (!f) {
            Py_INCREF(res);
        } else {
            res = f(res, obj, (PyObject *)tp);
        }
    } else if (with_error) {
        PyErr_SetObject(PyExc_AttributeError, attr_name);
    }
    return res;
}
#endif

/* RaiseUnboundLocalError */
static void __Pyx_RaiseUnboundLocalError(const char *varname) {
    PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
}

/* GetTopmostException (used by SaveResetException) */
#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
static _PyErr_StackItem *
__Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
{
    _PyErr_StackItem *exc_info = tstate->exc_info;
    while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) &&
           exc_info->previous_item != NULL)
    {
        exc_info = exc_info->previous_item;
    }
    return exc_info;
}
#endif

/* SaveResetException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
  #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
    PyObject *exc_value = exc_info->exc_value;
    if (exc_value == NULL || exc_value == Py_None) {
        *value = NULL;
        *type = NULL;
        *tb = NULL;
    } else {
        *value = exc_value;
        Py_INCREF(*value);
        *type = (PyObject*) Py_TYPE(exc_value);
        Py_INCREF(*type);
        *tb = PyException_GetTraceback(exc_value);
    }
  #elif CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
    *type = exc_info->exc_type;
    *value = exc_info->exc_value;
    *tb = exc_info->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
  #else
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
  #endif
}
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
  #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
    _PyErr_StackItem *exc_info = tstate->exc_info;
    PyObject *tmp_value = exc_info->exc_value;
    exc_info->exc_value = value;
    Py_XDECREF(tmp_value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
  #else
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = type;
    exc_info->exc_value = value;
    exc_info->exc_traceback = tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
  #endif
}
#endif

/* GetException */
#if CYTHON_FAST_THREAD_STATE
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
#endif
{
    PyObject *local_type = NULL, *local_value, *local_tb = NULL;
#if CYTHON_FAST_THREAD_STATE
    PyObject *tmp_type, *tmp_value, *tmp_tb;
  #if PY_VERSION_HEX >= 0x030C0000
    local_value = tstate->current_exception;
    tstate->current_exception = 0;
  #else
    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;
  #endif
#elif __PYX_LIMITED_VERSION_HEX > 0x030C0000
    local_value = PyErr_GetRaisedException();
#else
    PyErr_Fetch(&local_type, &local_value, &local_tb);
#endif
#if __PYX_LIMITED_VERSION_HEX > 0x030C0000
    if (likely(local_value)) {
        local_type = (PyObject*) Py_TYPE(local_value);
        Py_INCREF(local_type);
        local_tb = PyException_GetTraceback(local_value);
    }
#else
    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 (local_tb) {
        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
            goto bad;
    }
#endif // __PYX_LIMITED_VERSION_HEX > 0x030C0000
    Py_XINCREF(local_tb);
    Py_XINCREF(local_type);
    Py_XINCREF(local_value);
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
#if CYTHON_FAST_THREAD_STATE
    #if CYTHON_USE_EXC_INFO_STACK
    {
        _PyErr_StackItem *exc_info = tstate->exc_info;
      #if PY_VERSION_HEX >= 0x030B00a4
        tmp_value = exc_info->exc_value;
        exc_info->exc_value = local_value;
        tmp_type = NULL;
        tmp_tb = NULL;
        Py_XDECREF(local_type);
        Py_XDECREF(local_tb);
      #else
        tmp_type = exc_info->exc_type;
        tmp_value = exc_info->exc_value;
        tmp_tb = exc_info->exc_traceback;
        exc_info->exc_type = local_type;
        exc_info->exc_value = local_value;
        exc_info->exc_traceback = local_tb;
      #endif
    }
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = local_type;
    tstate->exc_value = local_value;
    tstate->exc_traceback = local_tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#elif __PYX_LIMITED_VERSION_HEX >= 0x030b0000
    PyErr_SetHandledException(local_value);
    Py_XDECREF(local_value);
    Py_XDECREF(local_type);
    Py_XDECREF(local_tb);
#else
    PyErr_SetExcInfo(local_type, local_value, local_tb);
#endif
    return 0;
#if __PYX_LIMITED_VERSION_HEX <= 0x030C0000
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
#endif
}

/* DictGetItem */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
    PyObject *value;
    if (unlikely(__Pyx_PyDict_GetItemRef(d, key, &value) == 0)) { // no value, no error
        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 value;
}
#endif

/* PyObjectCallNoArg */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
    PyObject *arg[2] = {NULL, NULL};
    return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* 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);
    return PyObject_SetAttr(obj, attr_name, value);
}
#endif

/* KeywordStringCheck */
static int __Pyx_CheckKeywordStrings(
    const char* function_name,
    PyObject *kw)
{
#if CYTHON_COMPILING_IN_PYPY && !defined(PyArg_ValidateKeywordArguments)
    CYTHON_UNUSED_VAR(function_name);
    CYTHON_UNUSED_VAR(kw);
    return 0;
#else
    if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kw))) {
#if PY_VERSION_HEX >= 0x03090000
        CYTHON_UNUSED_VAR(function_name);
#else
        Py_ssize_t kwsize;
        #if CYTHON_ASSUME_SAFE_SIZE
        kwsize = PyTuple_GET_SIZE(kw);
        #else
        kwsize = PyTuple_Size(kw);
        if (unlikely(kwsize < 0)) return -1;
        #endif
        for (Py_ssize_t pos = 0; pos < kwsize; pos++) {
            PyObject* key = NULL;
            #if CYTHON_ASSUME_SAFE_MACROS
            key = PyTuple_GET_ITEM(kw, pos);
            #else
            key = PyTuple_GetItem(kw, pos);
            if (unlikely(!key)) return -1;
            #endif
            if (unlikely(!PyUnicode_Check(key))) {
                PyErr_Format(PyExc_TypeError,
                    "%.200s() keywords must be strings", function_name);
                return -1;
            }
        }
#endif
    } else {
        if (unlikely(!PyArg_ValidateKeywordArguments(kw))) return -1;
    }
    return 0;
#endif
}

/* PyLongBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_Fallback___Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, int inplace) {
    return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
}
#if CYTHON_USE_PYLONG_INTERNALS
static PyObject* __Pyx_Unpacked___Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
    CYTHON_MAYBE_UNUSED_VAR(inplace);
    CYTHON_UNUSED_VAR(zerodivision_check);
    const long b = intval;
    long a;
    const PY_LONG_LONG llb = intval;
    PY_LONG_LONG lla;
    if (unlikely(__Pyx_PyLong_IsZero(op1))) {
        return __Pyx_NewRef(op2);
    }
    const int is_positive = __Pyx_PyLong_IsPos(op1);
    const digit* digits = __Pyx_PyLong_Digits(op1);
    const Py_ssize_t size = __Pyx_PyLong_DigitCount(op1);
    if (likely(size == 1)) {
        a = (long) digits[0];
        if (!is_positive) a *= -1;
    } 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]));
                    if (!is_positive) a *= -1;
                    goto calculate_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]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
            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]));
                    if (!is_positive) a *= -1;
                    goto calculate_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]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
            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]));
                    if (!is_positive) a *= -1;
                    goto calculate_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]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
        }
        return PyLong_Type.tp_as_number->nb_add(op1, op2);
    }
    calculate_long:
        {
            long x;
            x = a + b;
            return PyLong_FromLong(x);
        }
    calculate_long_long:
        {
            PY_LONG_LONG llx;
            llx = lla + llb;
            return PyLong_FromLongLong(llx);
        }
    
}
#endif
static PyObject* __Pyx_Float___Pyx_PyLong_AddObjC(PyObject *float_val, long intval, int zerodivision_check) {
    CYTHON_UNUSED_VAR(zerodivision_check);
    const long b = intval;
    double a = __Pyx_PyFloat_AS_DOUBLE(float_val);
        double result;
        
        result = ((double)a) + (double)b;
        return PyFloat_FromDouble(result);
}
static CYTHON_INLINE PyObject* __Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
    CYTHON_MAYBE_UNUSED_VAR(intval);
    CYTHON_UNUSED_VAR(zerodivision_check);
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        return __Pyx_Unpacked___Pyx_PyLong_AddObjC(op1, op2, intval, inplace, zerodivision_check);
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        return __Pyx_Float___Pyx_PyLong_AddObjC(op1, intval, zerodivision_check);
    }
    return __Pyx_Fallback___Pyx_PyLong_AddObjC(op1, op2, inplace);
}
#endif

/* UnicodeAsUCS4 (used by object_ord) */
static void __Pyx_PyUnicode_AsPy_UCS4_error(Py_ssize_t length) {
    if (likely(length >= 0)) {
        PyErr_Format(PyExc_ValueError,
                     "only single character unicode strings can be converted to Py_UCS4, "
                     "got length %" CYTHON_FORMAT_SSIZE_T "d", length);
    }
}
static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject* x) {
    Py_ssize_t length = __Pyx_PyUnicode_GET_LENGTH(x);
    if (unlikely(length != 1)) {
        __Pyx_PyUnicode_AsPy_UCS4_error(length);
        return (Py_UCS4)-1;
    }
    return __Pyx_PyUnicode_READ_CHAR(x, 0);
}

/* object_ord */
static long __Pyx__PyObject_Ord(PyObject* c) {
    Py_ssize_t size;
    if (PyBytes_Check(c)) {
        size = __Pyx_PyBytes_GET_SIZE(c);
        if (likely(size == 1)) {
#if CYTHON_ASSUME_SAFE_MACROS
            return (unsigned char) PyBytes_AS_STRING(c)[0];
#else
            char *data = PyBytes_AsString(c);
            if (unlikely(!data)) return -1;
            return (unsigned char) data[0];
#endif
        }
#if !CYTHON_ASSUME_SAFE_SIZE
        else if (unlikely(size < 0)) return -1;
#endif
    } else if (PyByteArray_Check(c)) {
        size = __Pyx_PyByteArray_GET_SIZE(c);
        if (likely(size == 1)) {
#if CYTHON_ASSUME_SAFE_MACROS
            return (unsigned char) PyByteArray_AS_STRING(c)[0];
#else
            char *data = PyByteArray_AsString(c);
            if (unlikely(!data)) return -1;
            return (unsigned char) data[0];
#endif
        }
#if !CYTHON_ASSUME_SAFE_SIZE
        else if (unlikely(size < 0)) return -1;
#endif
    } else {
        __Pyx_TypeName c_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(c));
        PyErr_Format(PyExc_TypeError,
            "ord() expected string of length 1, but " __Pyx_FMT_TYPENAME " found",
            c_type_name);
        __Pyx_DECREF_TypeName(c_type_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;
}

/* PyObjectVectorCallKwBuilder (used by PyObjectVectorCallMethodKwBuilder) */
#if CYTHON_VECTORCALL
static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
    (void)__Pyx_PyObject_FastCallDict;
    if (__Pyx_PyTuple_SET_ITEM(builder, n, key) != (0)) return -1;
    Py_INCREF(key);
    args[n] = value;
    return 0;
}
CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
    (void)__Pyx_VectorcallBuilder_AddArgStr;
    if (unlikely(!PyUnicode_Check(key))) {
        PyErr_SetString(PyExc_TypeError, "keywords must be strings");
        return -1;
    }
    return __Pyx_VectorcallBuilder_AddArg(key, value, builder, args, n);
}
static int __Pyx_VectorcallBuilder_AddArgStr(const char *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
    PyObject *pyKey = PyUnicode_FromString(key);
    if (!pyKey) return -1;
    return __Pyx_VectorcallBuilder_AddArg(pyKey, value, builder, args, n);
}
#else // CYTHON_VECTORCALL
CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, CYTHON_UNUSED PyObject **args, CYTHON_UNUSED int n) {
    if (unlikely(!PyUnicode_Check(key))) {
        PyErr_SetString(PyExc_TypeError, "keywords must be strings");
        return -1;
    }
    return PyDict_SetItem(builder, key, value);
}
#endif

/* PyObjectVectorCallMethodKwBuilder */
#if !CYTHON_VECTORCALL || PY_VERSION_HEX < 0x03090000
static PyObject *__Pyx_Object_VectorcallMethod_CallFromBuilder(PyObject *name, PyObject *const *args, size_t nargsf, PyObject *kwnames) {
    PyObject *result;
    PyObject *obj = PyObject_GetAttr(args[0], name);
    if (unlikely(!obj))
        return NULL;
    result = __Pyx_Object_Vectorcall_CallFromBuilder(obj, args+1, nargsf-1, kwnames);
    Py_DECREF(obj);
    return result;
}
#endif

/* AllocateExtensionType */
static PyObject *__Pyx_AllocateExtensionType(PyTypeObject *t, int is_final) {
    if (is_final || likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
        allocfunc alloc_func = __Pyx_PyType_GetSlot(t, tp_alloc, allocfunc);
        return alloc_func(t, 0);
    } else {
        newfunc tp_new = __Pyx_PyType_TryGetSlot(&PyBaseObject_Type, tp_new, newfunc);
    #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
        if (!tp_new) {
            PyObject *new_str = PyUnicode_FromString("__new__");
            if (likely(new_str)) {
                PyObject *o = PyObject_CallMethodObjArgs((PyObject *)&PyBaseObject_Type, new_str, t, NULL);
                Py_DECREF(new_str);
                return o;
            } else
                return NULL;
        } else
    #endif
        return tp_new(t, __pyx_mstate_global->__pyx_empty_tuple, 0);
    }
}

/* CallTypeTraverse */
#if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
#else
static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitproc visit, void *arg) {
    #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x03090000
    if (__Pyx_get_runtime_version() < 0x03090000) return 0;
    #endif
    if (!always_call) {
        PyTypeObject *base = __Pyx_PyObject_GetSlot(o, tp_base, PyTypeObject*);
        unsigned long flags = PyType_GetFlags(base);
        if (flags & Py_TPFLAGS_HEAPTYPE) {
            return 0;
        }
    }
    Py_VISIT((PyObject*)Py_TYPE(o));
    return 0;
}
#endif

/* CallNextTpDealloc */
static void __Pyx_call_next_tp_dealloc(PyObject* obj, destructor current_tp_dealloc) {
    PyTypeObject* type = Py_TYPE(obj);
    destructor tp_dealloc = NULL;
    while (type && __Pyx_PyType_GetSlot(type, tp_dealloc, destructor) != current_tp_dealloc)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    while (type && (tp_dealloc = __Pyx_PyType_GetSlot(type, tp_dealloc, destructor)) == current_tp_dealloc)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    if (type)
        tp_dealloc(obj);
}

/* CallNextTpTraverse */
static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) {
    PyTypeObject* type = Py_TYPE(obj);
    traverseproc tp_traverse = NULL;
    while (type && __Pyx_PyType_GetSlot(type, tp_traverse, traverseproc) != current_tp_traverse)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    while (type && (tp_traverse = __Pyx_PyType_GetSlot(type, tp_traverse, traverseproc)) == current_tp_traverse)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    if (type && tp_traverse)
        return 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);
    inquiry tp_clear = NULL;
    while (type && __Pyx_PyType_GetSlot(type, tp_clear, inquiry) != current_tp_clear)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    while (type && (tp_clear = __Pyx_PyType_GetSlot(type, tp_clear, inquiry)) == current_tp_clear)
        type = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
    if (type && tp_clear)
        tp_clear(obj);
}

/* LimitedApiGetTypeDict (used by SetItemOnTypeDict) */
#if CYTHON_COMPILING_IN_LIMITED_API
static Py_ssize_t __Pyx_GetTypeDictOffset(void) {
    PyObject *tp_dictoffset_o;
    Py_ssize_t tp_dictoffset;
    tp_dictoffset_o = PyObject_GetAttrString((PyObject*)(&PyType_Type), "__dictoffset__");
    if (unlikely(!tp_dictoffset_o)) return -1;
    tp_dictoffset = PyLong_AsSsize_t(tp_dictoffset_o);
    Py_DECREF(tp_dictoffset_o);
    if (unlikely(tp_dictoffset == 0)) {
        PyErr_SetString(
            PyExc_TypeError,
            "'type' doesn't have a dictoffset");
        return -1;
    } else if (unlikely(tp_dictoffset < 0)) {
        PyErr_SetString(
            PyExc_TypeError,
            "'type' has an unexpected negative dictoffset. "
            "Please report this as Cython bug");
        return -1;
    }
    return tp_dictoffset;
}
static PyObject *__Pyx_GetTypeDict(PyTypeObject *tp) {
    static Py_ssize_t tp_dictoffset = 0;
    if (unlikely(tp_dictoffset == 0)) {
        tp_dictoffset = __Pyx_GetTypeDictOffset();
        if (unlikely(tp_dictoffset == -1 && PyErr_Occurred())) {
            tp_dictoffset = 0; // try again next time?
            return NULL;
        }
    }
    return *(PyObject**)((char*)tp + tp_dictoffset);
}
#endif

/* SetItemOnTypeDict (used by FixUpExtensionType) */
static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObject *v) {
    int result;
    PyObject *tp_dict;
#if CYTHON_COMPILING_IN_LIMITED_API
    tp_dict = __Pyx_GetTypeDict(tp);
    if (unlikely(!tp_dict)) return -1;
#else
    tp_dict = tp->tp_dict;
#endif
    result = PyDict_SetItem(tp_dict, k, v);
    if (likely(!result)) {
        PyType_Modified(tp);
        if (unlikely(PyObject_HasAttr(v, __pyx_mstate_global->__pyx_n_u_set_name))) {
            PyObject *setNameResult = PyObject_CallMethodObjArgs(v, __pyx_mstate_global->__pyx_n_u_set_name,  (PyObject *) tp, k, NULL);
            if (!setNameResult) return -1;
            Py_DECREF(setNameResult);
        }
    }
    return result;
}

/* FixUpExtensionType */
static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) {
#if __PYX_LIMITED_VERSION_HEX > 0x030900B1
    CYTHON_UNUSED_VAR(spec);
    CYTHON_UNUSED_VAR(type);
    CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
#else
    const PyType_Slot *slot = spec->slots;
    int changed = 0;
#if !CYTHON_COMPILING_IN_LIMITED_API
    while (slot && slot->slot && slot->slot != Py_tp_members)
        slot++;
    if (slot && slot->slot == Py_tp_members) {
#if !CYTHON_COMPILING_IN_CPYTHON
        const
#endif  // !CYTHON_COMPILING_IN_CPYTHON)
            PyMemberDef *memb = (PyMemberDef*) slot->pfunc;
        while (memb && memb->name) {
            if (memb->name[0] == '_' && memb->name[1] == '_') {
                if (strcmp(memb->name, "__weaklistoffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
                    type->tp_weaklistoffset = memb->offset;
                    changed = 1;
                }
                else if (strcmp(memb->name, "__dictoffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
                    type->tp_dictoffset = memb->offset;
                    changed = 1;
                }
#if CYTHON_METH_FASTCALL
                else if (strcmp(memb->name, "__vectorcalloffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
                    type->tp_vectorcall_offset = memb->offset;
                    changed = 1;
                }
#endif  // CYTHON_METH_FASTCALL
#if !CYTHON_COMPILING_IN_PYPY
                else if (strcmp(memb->name, "__module__") == 0) {
                    PyObject *descr;
                    assert(memb->type == T_OBJECT);
                    assert(memb->flags == 0 || memb->flags == READONLY);
                    descr = PyDescr_NewMember(type, memb);
                    if (unlikely(!descr))
                        return -1;
                    int set_item_result = PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr);
                    Py_DECREF(descr);
                    if (unlikely(set_item_result < 0)) {
                        return -1;
                    }
                    changed = 1;
                }
#endif  // !CYTHON_COMPILING_IN_PYPY
            }
            memb++;
        }
    }
#endif  // !CYTHON_COMPILING_IN_LIMITED_API
#if !CYTHON_COMPILING_IN_PYPY
    slot = spec->slots;
    while (slot && slot->slot && slot->slot != Py_tp_getset)
        slot++;
    if (slot && slot->slot == Py_tp_getset) {
        PyGetSetDef *getset = (PyGetSetDef*) slot->pfunc;
        while (getset && getset->name) {
            if (getset->name[0] == '_' && getset->name[1] == '_' && strcmp(getset->name, "__module__") == 0) {
                PyObject *descr = PyDescr_NewGetSet(type, getset);
                if (unlikely(!descr))
                    return -1;
                #if CYTHON_COMPILING_IN_LIMITED_API
                PyObject *pyname = PyUnicode_FromString(getset->name);
                if (unlikely(!pyname)) {
                    Py_DECREF(descr);
                    return -1;
                }
                int set_item_result = __Pyx_SetItemOnTypeDict(type, pyname, descr);
                Py_DECREF(pyname);
                #else
                CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
                int set_item_result = PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr);
                #endif
                Py_DECREF(descr);
                if (unlikely(set_item_result < 0)) {
                    return -1;
                }
                changed = 1;
            }
            ++getset;
        }
    }
#else
    CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
#endif  // !CYTHON_COMPILING_IN_PYPY
    if (changed)
        PyType_Modified(type);
#endif  // PY_VERSION_HEX > 0x030900B1
    return 0;
}

/* PyObjectGetMethod (used by PyObjectCallMethod0) */
#if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
    PyObject *attr;
#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
    __Pyx_TypeName type_name;
    PyTypeObject *tp = Py_TYPE(obj);
    PyObject *descr;
    descrgetfunc f = NULL;
    PyObject **dictptr, *dict;
    int meth_found = 0;
    assert (*method == NULL);
    if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
        attr = __Pyx_PyObject_GetAttrStr(obj, name);
        goto try_unpack;
    }
    if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
        return 0;
    }
    descr = _PyType_Lookup(tp, name);
    if (likely(descr != NULL)) {
        Py_INCREF(descr);
#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR
        if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR))
#else
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type)))
        #endif
#endif
        {
            meth_found = 1;
        } else {
            f = Py_TYPE(descr)->tp_descr_get;
            if (f != NULL && PyDescr_IsData(descr)) {
                attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
                Py_DECREF(descr);
                goto try_unpack;
            }
        }
    }
    dictptr = _PyObject_GetDictPtr(obj);
    if (dictptr != NULL && (dict = *dictptr) != NULL) {
        Py_INCREF(dict);
        attr = __Pyx_PyDict_GetItemStr(dict, name);
        if (attr != NULL) {
            Py_INCREF(attr);
            Py_DECREF(dict);
            Py_XDECREF(descr);
            goto try_unpack;
        }
        Py_DECREF(dict);
    }
    if (meth_found) {
        *method = descr;
        return 1;
    }
    if (f != NULL) {
        attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
        Py_DECREF(descr);
        goto try_unpack;
    }
    if (likely(descr != NULL)) {
        *method = descr;
        return 0;
    }
    type_name = __Pyx_PyType_GetFullyQualifiedName(tp);
    PyErr_Format(PyExc_AttributeError,
                 "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'",
                 type_name, name);
    __Pyx_DECREF_TypeName(type_name);
    return 0;
#else
    attr = __Pyx_PyObject_GetAttrStr(obj, name);
    goto try_unpack;
#endif
try_unpack:
#if CYTHON_UNPACK_METHODS
    if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
        PyObject *function = PyMethod_GET_FUNCTION(attr);
        Py_INCREF(function);
        Py_DECREF(attr);
        *method = function;
        return 1;
    }
#endif
    *method = attr;
    return 0;
}
#endif

/* PyObjectCallMethod0 (used by PyType_Ready) */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
#if CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000))
    PyObject *args[1] = {obj};
    (void) __Pyx_PyObject_CallOneArg;
    (void) __Pyx_PyObject_CallNoArg;
    return PyObject_VectorcallMethod(method_name, args, 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
#else
    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;
#endif
}

/* ValidateBasesTuple (used by PyType_Ready) */
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) {
    Py_ssize_t i, n;
#if CYTHON_ASSUME_SAFE_SIZE
    n = PyTuple_GET_SIZE(bases);
#else
    n = PyTuple_Size(bases);
    if (unlikely(n < 0)) return -1;
#endif
    for (i = 1; i < n; i++)
    {
        PyTypeObject *b;
#if CYTHON_AVOID_BORROWED_REFS
        PyObject *b0 = PySequence_GetItem(bases, i);
        if (!b0) return -1;
#elif CYTHON_ASSUME_SAFE_MACROS
        PyObject *b0 = PyTuple_GET_ITEM(bases, i);
#else
        PyObject *b0 = PyTuple_GetItem(bases, i);
        if (!b0) return -1;
#endif
        b = (PyTypeObject*) b0;
        if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE))
        {
            __Pyx_TypeName b_name = __Pyx_PyType_GetFullyQualifiedName(b);
            PyErr_Format(PyExc_TypeError,
                "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name);
            __Pyx_DECREF_TypeName(b_name);
#if CYTHON_AVOID_BORROWED_REFS
            Py_DECREF(b0);
#endif
            return -1;
        }
        if (dictoffset == 0)
        {
            Py_ssize_t b_dictoffset = 0;
#if CYTHON_USE_TYPE_SLOTS
            b_dictoffset = b->tp_dictoffset;
#else
            PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__");
            if (!py_b_dictoffset) goto dictoffset_return;
            b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset);
            Py_DECREF(py_b_dictoffset);
            if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return;
#endif
            if (b_dictoffset) {
                {
                    __Pyx_TypeName b_name = __Pyx_PyType_GetFullyQualifiedName(b);
                    PyErr_Format(PyExc_TypeError,
                        "extension type '%.200s' has no __dict__ slot, "
                        "but base type '" __Pyx_FMT_TYPENAME "' has: "
                        "either add 'cdef dict __dict__' to the extension type "
                        "or add '__slots__ = [...]' to the base type",
                        type_name, b_name);
                    __Pyx_DECREF_TypeName(b_name);
                }
#if !CYTHON_USE_TYPE_SLOTS
              dictoffset_return:
#endif
#if CYTHON_AVOID_BORROWED_REFS
                Py_DECREF(b0);
#endif
                return -1;
            }
        }
#if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(b0);
#endif
    }
    return 0;
}
#endif

/* PyType_Ready */
CYTHON_UNUSED static int __Pyx_PyType_HasMultipleInheritance(PyTypeObject *t) {
    while (t) {
        PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*);
        if (bases) {
            return 1;
        }
        t = __Pyx_PyType_GetSlot(t, tp_base, PyTypeObject*);
    }
    return 0;
}
static int __Pyx_PyType_Ready(PyTypeObject *t) {
#if CYTHON_USE_TYPE_SPECS || !CYTHON_COMPILING_IN_CPYTHON || defined(PYSTON_MAJOR_VERSION)
    (void)__Pyx_PyObject_CallMethod0;
#if CYTHON_USE_TYPE_SPECS
    (void)__Pyx_validate_bases_tuple;
#endif
    return PyType_Ready(t);
#else
    int r;
    if (!__Pyx_PyType_HasMultipleInheritance(t)) {
        return PyType_Ready(t);
    }
    PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*);
    if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1))
        return -1;
#if !defined(PYSTON_MAJOR_VERSION)
    {
        int gc_was_enabled;
    #if PY_VERSION_HEX >= 0x030A00b1
        gc_was_enabled = PyGC_Disable();
        (void)__Pyx_PyObject_CallMethod0;
    #else
        PyObject *ret, *py_status;
        PyObject *gc = NULL;
        #if (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) &&\
                !CYTHON_COMPILING_IN_GRAAL
        gc = PyImport_GetModule(__pyx_mstate_global->__pyx_kp_u_gc);
        #endif
        if (unlikely(!gc)) gc = PyImport_Import(__pyx_mstate_global->__pyx_kp_u_gc);
        if (unlikely(!gc)) return -1;
        py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_isenabled);
        if (unlikely(!py_status)) {
            Py_DECREF(gc);
            return -1;
        }
        gc_was_enabled = __Pyx_PyObject_IsTrue(py_status);
        Py_DECREF(py_status);
        if (gc_was_enabled > 0) {
            ret = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_disable);
            if (unlikely(!ret)) {
                Py_DECREF(gc);
                return -1;
            }
            Py_DECREF(ret);
        } else if (unlikely(gc_was_enabled == -1)) {
            Py_DECREF(gc);
            return -1;
        }
    #endif
        t->tp_flags |= Py_TPFLAGS_HEAPTYPE;
#if PY_VERSION_HEX >= 0x030A0000
        t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE;
#endif
#else
        (void)__Pyx_PyObject_CallMethod0;
#endif
    r = PyType_Ready(t);
#if !defined(PYSTON_MAJOR_VERSION)
        t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE;
    #if PY_VERSION_HEX >= 0x030A00b1
        if (gc_was_enabled)
            PyGC_Enable();
    #else
        if (gc_was_enabled) {
            PyObject *tp, *v, *tb;
            PyErr_Fetch(&tp, &v, &tb);
            ret = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_enable);
            if (likely(ret || r == -1)) {
                Py_XDECREF(ret);
                PyErr_Restore(tp, v, tb);
            } else {
                Py_XDECREF(tp);
                Py_XDECREF(v);
                Py_XDECREF(tb);
                r = -1;
            }
        }
        Py_DECREF(gc);
    #endif
    }
#endif
    return r;
#endif
}

/* SetVTable */
static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) {
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
    if (unlikely(!ob))
        goto bad;
#if CYTHON_COMPILING_IN_LIMITED_API
    if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_mstate_global->__pyx_n_u_pyx_vtable, ob) < 0))
#else
    if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_mstate_global->__pyx_n_u_pyx_vtable, ob) < 0))
#endif
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

/* GetVTable (used by MergeVTables) */
static void* __Pyx_GetVtable(PyTypeObject *type) {
    void* ptr;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_mstate_global->__pyx_n_u_pyx_vtable);
#else
    PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_mstate_global->__pyx_n_u_pyx_vtable);
#endif
    if (!ob)
        goto bad;
    ptr = PyCapsule_GetPointer(ob, 0);
    if (!ptr && !PyErr_Occurred())
        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
    Py_DECREF(ob);
    return ptr;
bad:
    Py_XDECREF(ob);
    return NULL;
}

/* MergeVTables */
static int __Pyx_MergeVtables(PyTypeObject *type) {
    int i=0;
    Py_ssize_t size;
    void** base_vtables;
    __Pyx_TypeName tp_base_name = NULL;
    __Pyx_TypeName base_name = NULL;
    void* unknown = (void*)-1;
    PyObject* bases = __Pyx_PyType_GetSlot(type, tp_bases, PyObject*);
    int base_depth = 0;
    {
        PyTypeObject* base = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
        while (base) {
            base_depth += 1;
            base = __Pyx_PyType_GetSlot(base, tp_base, PyTypeObject*);
        }
    }
    base_vtables = (void**) PyMem_Malloc(sizeof(void*) * (size_t)(base_depth + 1));
    base_vtables[0] = unknown;
#if CYTHON_COMPILING_IN_LIMITED_API
    size = PyTuple_Size(bases);
    if (size < 0) goto other_failure;
#else
    size = PyTuple_GET_SIZE(bases);
#endif
    for (i = 1; i < size; i++) {
        PyObject *basei;
        void* base_vtable;
#if CYTHON_AVOID_BORROWED_REFS
        basei = PySequence_GetItem(bases, i);
        if (unlikely(!basei)) goto other_failure;
#elif !CYTHON_ASSUME_SAFE_MACROS
        basei = PyTuple_GetItem(bases, i);
        if (unlikely(!basei)) goto other_failure;
#else
        basei = PyTuple_GET_ITEM(bases, i);
#endif
        base_vtable = __Pyx_GetVtable((PyTypeObject*)basei);
#if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(basei);
#endif
        if (base_vtable != NULL) {
            int j;
            PyTypeObject* base = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
            for (j = 0; j < base_depth; j++) {
                if (base_vtables[j] == unknown) {
                    base_vtables[j] = __Pyx_GetVtable(base);
                    base_vtables[j + 1] = unknown;
                }
                if (base_vtables[j] == base_vtable) {
                    break;
                } else if (base_vtables[j] == NULL) {
                    goto bad;
                }
                base = __Pyx_PyType_GetSlot(base, tp_base, PyTypeObject*);
            }
        }
    }
    PyErr_Clear();
    PyMem_Free(base_vtables);
    return 0;
bad:
    {
        PyTypeObject* basei = NULL;
        PyTypeObject* tp_base = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
        tp_base_name = __Pyx_PyType_GetFullyQualifiedName(tp_base);
#if CYTHON_AVOID_BORROWED_REFS
        basei = (PyTypeObject*)PySequence_GetItem(bases, i);
        if (unlikely(!basei)) goto really_bad;
#elif !CYTHON_ASSUME_SAFE_MACROS
        basei = (PyTypeObject*)PyTuple_GetItem(bases, i);
        if (unlikely(!basei)) goto really_bad;
#else
        basei = (PyTypeObject*)PyTuple_GET_ITEM(bases, i);
#endif
        base_name = __Pyx_PyType_GetFullyQualifiedName(basei);
#if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(basei);
#endif
    }
    PyErr_Format(PyExc_TypeError,
        "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name);
#if CYTHON_AVOID_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS
really_bad: // bad has failed!
#endif
    __Pyx_DECREF_TypeName(tp_base_name);
    __Pyx_DECREF_TypeName(base_name);
#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_AVOID_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS
other_failure:
#endif
    PyMem_Free(base_vtables);
    return -1;
}

/* DelItemOnTypeDict (used by SetupReduce) */
static int __Pyx__DelItemOnTypeDict(PyTypeObject *tp, PyObject *k) {
    int result;
    PyObject *tp_dict;
#if CYTHON_COMPILING_IN_LIMITED_API
    tp_dict = __Pyx_GetTypeDict(tp);
    if (unlikely(!tp_dict)) return -1;
#else
    tp_dict = tp->tp_dict;
#endif
    result = PyDict_DelItem(tp_dict, k);
    if (likely(!result)) PyType_Modified(tp);
    return result;
}

/* SetupReduce */
static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
  int ret;
  PyObject *name_attr;
  name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_mstate_global->__pyx_n_u_name_2);
  if (likely(name_attr)) {
      ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
  } else {
      ret = -1;
  }
  if (unlikely(ret < 0)) {
      PyErr_Clear();
      ret = 0;
  }
  Py_XDECREF(name_attr);
  return ret;
}
static int __Pyx_setup_reduce(PyObject* type_obj) {
    int ret = 0;
    PyObject *object_reduce = NULL;
    PyObject *object_getstate = NULL;
    PyObject *object_reduce_ex = NULL;
    PyObject *reduce = NULL;
    PyObject *reduce_ex = NULL;
    PyObject *reduce_cython = NULL;
    PyObject *setstate = NULL;
    PyObject *setstate_cython = NULL;
    PyObject *getstate = NULL;
#if CYTHON_USE_PYTYPE_LOOKUP
    getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_getstate);
#else
    getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_mstate_global->__pyx_n_u_getstate);
    if (!getstate && PyErr_Occurred()) {
        goto __PYX_BAD;
    }
#endif
    if (getstate) {
#if CYTHON_USE_PYTYPE_LOOKUP
        object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_getstate);
#else
        object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_getstate);
        if (!object_getstate && PyErr_Occurred()) {
            goto __PYX_BAD;
        }
#endif
        if (object_getstate != getstate) {
            goto __PYX_GOOD;
        }
    }
#if CYTHON_USE_PYTYPE_LOOKUP
    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#else
    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#endif
    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_mstate_global->__pyx_n_u_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_mstate_global->__pyx_n_u_reduce); if (!object_reduce) goto __PYX_BAD;
#else
        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_reduce); if (!object_reduce) goto __PYX_BAD;
#endif
        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_mstate_global->__pyx_n_u_reduce); if (unlikely(!reduce)) goto __PYX_BAD;
        if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_mstate_global->__pyx_n_u_reduce_cython)) {
            reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_mstate_global->__pyx_n_u_reduce_cython);
            if (likely(reduce_cython)) {
                ret = __Pyx_SetItemOnTypeDict((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                ret = __Pyx_DelItemOnTypeDict((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
            } else if (reduce == object_reduce || PyErr_Occurred()) {
                goto __PYX_BAD;
            }
            setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_mstate_global->__pyx_n_u_setstate);
            if (!setstate) PyErr_Clear();
            if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_mstate_global->__pyx_n_u_setstate_cython)) {
                setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_mstate_global->__pyx_n_u_setstate_cython);
                if (likely(setstate_cython)) {
                    ret = __Pyx_SetItemOnTypeDict((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                    ret = __Pyx_DelItemOnTypeDict((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                } else if (!setstate || PyErr_Occurred()) {
                    goto __PYX_BAD;
                }
            }
            PyType_Modified((PyTypeObject*)type_obj);
        }
    }
    goto __PYX_GOOD;
__PYX_BAD:
    if (!PyErr_Occurred()) {
        __Pyx_TypeName type_obj_name =
            __Pyx_PyType_GetFullyQualifiedName((PyTypeObject*)type_obj);
        PyErr_Format(PyExc_RuntimeError,
            "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name);
        __Pyx_DECREF_TypeName(type_obj_name);
    }
    ret = -1;
__PYX_GOOD:
#if !CYTHON_USE_PYTYPE_LOOKUP
    Py_XDECREF(object_reduce);
    Py_XDECREF(object_reduce_ex);
    Py_XDECREF(object_getstate);
    Py_XDECREF(getstate);
#endif
    Py_XDECREF(reduce);
    Py_XDECREF(reduce_ex);
    Py_XDECREF(reduce_cython);
    Py_XDECREF(setstate);
    Py_XDECREF(setstate_cython);
    return ret;
}

/* TypeImport */
#ifndef __PYX_HAVE_RT_ImportType_3_2_2
#define __PYX_HAVE_RT_ImportType_3_2_2
static PyTypeObject *__Pyx_ImportType_3_2_2(PyObject *module, const char *module_name, const char *class_name,
    size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_2_2 check_size)
{
    PyObject *result = 0;
    Py_ssize_t basicsize;
    Py_ssize_t itemsize;
#if defined(Py_LIMITED_API) || (defined(CYTHON_COMPILING_IN_LIMITED_API) && CYTHON_COMPILING_IN_LIMITED_API)
    PyObject *py_basicsize;
    PyObject *py_itemsize;
#endif
    result = PyObject_GetAttrString(module, class_name);
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError,
            "%.200s.%.200s is not a type object",
            module_name, class_name);
        goto bad;
    }
#if !( defined(Py_LIMITED_API) || (defined(CYTHON_COMPILING_IN_LIMITED_API) && CYTHON_COMPILING_IN_LIMITED_API) )
    basicsize = ((PyTypeObject *)result)->tp_basicsize;
    itemsize = ((PyTypeObject *)result)->tp_itemsize;
#else
    if (size == 0) {
        return (PyTypeObject *)result;
    }
    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
    if (!py_basicsize)
        goto bad;
    basicsize = PyLong_AsSsize_t(py_basicsize);
    Py_DECREF(py_basicsize);
    py_basicsize = 0;
    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
    py_itemsize = PyObject_GetAttrString(result, "__itemsize__");
    if (!py_itemsize)
        goto bad;
    itemsize = PyLong_AsSsize_t(py_itemsize);
    Py_DECREF(py_itemsize);
    py_itemsize = 0;
    if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
#endif
    if (itemsize) {
        if (size % alignment) {
            alignment = size % alignment;
        }
        if (itemsize < (Py_ssize_t)alignment)
            itemsize = (Py_ssize_t)alignment;
    }
    if ((size_t)(basicsize + itemsize) < size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize+itemsize);
        goto bad;
    }
    if (check_size == __Pyx_ImportType_CheckSize_Error_3_2_2 &&
            ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd-%zd from PyObject",
            module_name, class_name, size, basicsize, basicsize+itemsize);
        goto bad;
    }
    else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_2_2 && (size_t)basicsize > size) {
        if (PyErr_WarnFormat(NULL, 0,
                "%.200s.%.200s size changed, may indicate binary incompatibility. "
                "Expected %zd from C header, got %zd from PyObject",
                module_name, class_name, size, basicsize) < 0) {
            goto bad;
        }
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(result);
    return NULL;
}
#endif

/* HasAttr (used by ImportImpl) */
#if __PYX_LIMITED_VERSION_HEX < 0x030d0000
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
    PyObject *r;
    if (unlikely(!PyUnicode_Check(n))) {
        PyErr_SetString(PyExc_TypeError,
                        "hasattr(): attribute name must be string");
        return -1;
    }
    r = __Pyx_PyObject_GetAttrStrNoError(o, n);
    if (!r) {
        return (unlikely(PyErr_Occurred())) ? -1 : 0;
    } else {
        Py_DECREF(r);
        return 1;
    }
}
#endif

/* ImportImpl (used by Import) */
static int __Pyx__Import_GetModule(PyObject *qualname, PyObject **module) {
    PyObject *imported_module = PyImport_GetModule(qualname);
    if (unlikely(!imported_module)) {
        *module = NULL;
        if (PyErr_Occurred()) {
            return -1;
        }
        return 0;
    }
    *module = imported_module;
    return 1;
}
static int __Pyx__Import_Lookup(PyObject *qualname, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject **module) {
    PyObject *imported_module;
    PyObject *top_level_package_name;
    Py_ssize_t i;
    int status, module_found;
    Py_ssize_t dot_index;
    module_found = __Pyx__Import_GetModule(qualname, &imported_module);
    if (unlikely(!module_found || module_found == -1)) {
        *module = NULL;
        return module_found;
    }
    if (imported_names) {
        for (i = 0; i < len_imported_names; i++) {
            PyObject *imported_name = imported_names[i];
#if __PYX_LIMITED_VERSION_HEX < 0x030d0000
            int has_imported_attribute = PyObject_HasAttr(imported_module, imported_name);
#else
            int has_imported_attribute = PyObject_HasAttrWithError(imported_module, imported_name);
            if (unlikely(has_imported_attribute == -1)) goto error;
#endif
            if (!has_imported_attribute) {
                goto not_found;
            }
        }
        *module = imported_module;
        return 1;
    }
    dot_index = PyUnicode_FindChar(qualname, '.', 0, PY_SSIZE_T_MAX, 1);
    if (dot_index == -1) {
        *module = imported_module;
        return 1;
    }
    if (unlikely(dot_index == -2)) goto error;
    top_level_package_name = PyUnicode_Substring(qualname, 0, dot_index);
    if (unlikely(!top_level_package_name)) goto error;
    Py_DECREF(imported_module);
    status = __Pyx__Import_GetModule(top_level_package_name, module);
    Py_DECREF(top_level_package_name);
    return status;
error:
    Py_DECREF(imported_module);
    *module = NULL;
    return -1;
not_found:
    Py_DECREF(imported_module);
    *module = NULL;
    return 0;
}
static PyObject *__Pyx__Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, PyObject *moddict, int level) {
    PyObject *module = 0;
    PyObject *empty_dict = 0;
    PyObject *from_list = 0;
    int module_found;
    if (!qualname) {
        qualname = name;
    }
    module_found = __Pyx__Import_Lookup(qualname, imported_names, len_imported_names, &module);
    if (likely(module_found == 1)) {
        return module;
    } else if (unlikely(module_found == -1)) {
        return NULL;
    }
    empty_dict = PyDict_New();
    if (unlikely(!empty_dict))
        goto bad;
    if (imported_names) {
#if CYTHON_COMPILING_IN_CPYTHON
        from_list = __Pyx_PyList_FromArray(imported_names, len_imported_names);
        if (unlikely(!from_list))
            goto bad;
#else
        from_list = PyList_New(len_imported_names);
        if (unlikely(!from_list)) goto bad;
        for (Py_ssize_t i=0; i<len_imported_names; ++i) {
            if (PyList_SetItem(from_list, i, __Pyx_NewRef(imported_names[i])) < 0) goto bad;
        }
#endif
    }
    if (level == -1) {
        const char* package_sep = strchr(__Pyx_MODULE_NAME, '.');
        if (package_sep != (0)) {
            module = PyImport_ImportModuleLevelObject(
                name, moddict, empty_dict, from_list, 1);
            if (unlikely(!module)) {
                if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError)))
                    goto bad;
                PyErr_Clear();
            }
        }
        level = 0;
    }
    if (!module) {
        module = PyImport_ImportModuleLevelObject(
            name, moddict, empty_dict, from_list, level);
    }
bad:
    Py_XDECREF(from_list);
    Py_XDECREF(empty_dict);
    return module;
}

/* Import */
static PyObject *__Pyx_Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, int level) {
    return __Pyx__Import(name, imported_names, len_imported_names, qualname, __pyx_mstate_global->__pyx_d, level);
}

/* ImportFrom */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        const char* module_name_str = 0;
        PyObject* module_name = 0;
        PyObject* module_dot = 0;
        PyObject* full_name = 0;
        PyErr_Clear();
        module_name_str = PyModule_GetName(module);
        if (unlikely(!module_name_str)) { goto modbad; }
        module_name = PyUnicode_FromString(module_name_str);
        if (unlikely(!module_name)) { goto modbad; }
        module_dot = PyUnicode_Concat(module_name, __pyx_mstate_global->__pyx_kp_u__2);
        if (unlikely(!module_dot)) { goto modbad; }
        full_name = PyUnicode_Concat(module_dot, name);
        if (unlikely(!full_name)) { goto modbad; }
        #if (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM  < 0x07030400) ||\
                CYTHON_COMPILING_IN_GRAAL
        {
            PyObject *modules = PyImport_GetModuleDict();
            if (unlikely(!modules))
                goto modbad;
            value = PyObject_GetItem(modules, full_name);
        }
        #else
        value = PyImport_GetModule(full_name);
        #endif
      modbad:
        Py_XDECREF(full_name);
        Py_XDECREF(module_dot);
        Py_XDECREF(module_name);
    }
    if (unlikely(!value)) {
        PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
    }
    return value;
}

/* dict_setdefault (used by FetchCommonType) */
static CYTHON_INLINE PyObject *__Pyx_PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *default_value) {
    PyObject* value;
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX >= 0x030C0000
    PyObject *args[] = {d, key, default_value};
    value = PyObject_VectorcallMethod(__pyx_mstate_global->__pyx_n_u_setdefault, args, 3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
#elif CYTHON_COMPILING_IN_LIMITED_API
    value = PyObject_CallMethodObjArgs(d, __pyx_mstate_global->__pyx_n_u_setdefault, key, default_value, NULL);
#elif PY_VERSION_HEX >= 0x030d0000
    PyDict_SetDefaultRef(d, key, default_value, &value);
#else
    value = PyDict_SetDefault(d, key, default_value);
    if (unlikely(!value)) return NULL;
    Py_INCREF(value);
#endif
    return value;
}

/* AddModuleRef (used by FetchSharedCythonModule) */
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  static PyObject *__Pyx_PyImport_AddModuleObjectRef(PyObject *name) {
      PyObject *module_dict = PyImport_GetModuleDict();
      PyObject *m;
      if (PyMapping_GetOptionalItem(module_dict, name, &m) < 0) {
          return NULL;
      }
      if (m != NULL && PyModule_Check(m)) {
          return m;
      }
      Py_XDECREF(m);
      m = PyModule_NewObject(name);
      if (m == NULL)
          return NULL;
      if (PyDict_CheckExact(module_dict)) {
          PyObject *new_m;
          (void)PyDict_SetDefaultRef(module_dict, name, m, &new_m);
          Py_DECREF(m);
          return new_m;
      } else {
           if (PyObject_SetItem(module_dict, name, m) != 0) {
                Py_DECREF(m);
                return NULL;
            }
            return m;
      }
  }
  static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
      PyObject *py_name = PyUnicode_FromString(name);
      if (!py_name) return NULL;
      PyObject *module = __Pyx_PyImport_AddModuleObjectRef(py_name);
      Py_DECREF(py_name);
      return module;
  }
#elif __PYX_LIMITED_VERSION_HEX >= 0x030d0000
  #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
#else
  static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
      PyObject *module = PyImport_AddModule(name);
      Py_XINCREF(module);
      return module;
  }
#endif

/* FetchSharedCythonModule (used by FetchCommonType) */
static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
    return __Pyx_PyImport_AddModuleRef(__PYX_ABI_MODULE_NAME);
}

/* FetchCommonType (used by CommonTypesMetaclass) */
#if __PYX_LIMITED_VERSION_HEX < 0x030C0000
static PyObject* __Pyx_PyType_FromMetaclass(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases) {
    PyObject *result = __Pyx_PyType_FromModuleAndSpec(module, spec, bases);
    if (result && metaclass) {
        PyObject *old_tp = (PyObject*)Py_TYPE(result);
    Py_INCREF((PyObject*)metaclass);
#if __PYX_LIMITED_VERSION_HEX >= 0x03090000
        Py_SET_TYPE(result, metaclass);
#else
        result->ob_type = metaclass;
#endif
        Py_DECREF(old_tp);
    }
    return result;
}
#else
#define __Pyx_PyType_FromMetaclass(me, mo, s, b) PyType_FromMetaclass(me, mo, s, b)
#endif
static int __Pyx_VerifyCachedType(PyObject *cached_type,
                               const char *name,
                               Py_ssize_t expected_basicsize) {
    Py_ssize_t basicsize;
    if (!PyType_Check(cached_type)) {
        PyErr_Format(PyExc_TypeError,
            "Shared Cython type %.200s is not a type object", name);
        return -1;
    }
    if (expected_basicsize == 0) {
        return 0; // size is inherited, nothing useful to check
    }
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_basicsize;
    py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__");
    if (unlikely(!py_basicsize)) return -1;
    basicsize = PyLong_AsSsize_t(py_basicsize);
    Py_DECREF(py_basicsize);
    py_basicsize = NULL;
    if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) return -1;
#else
    basicsize = ((PyTypeObject*) cached_type)->tp_basicsize;
#endif
    if (basicsize != expected_basicsize) {
        PyErr_Format(PyExc_TypeError,
            "Shared Cython type %.200s has the wrong size, try recompiling",
            name);
        return -1;
    }
    return 0;
}
static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases) {
    PyObject *abi_module = NULL, *cached_type = NULL, *abi_module_dict, *new_cached_type, *py_object_name;
    int get_item_ref_result;
    const char* object_name = strrchr(spec->name, '.');
    object_name = object_name ? object_name+1 : spec->name;
    py_object_name = PyUnicode_FromString(object_name);
    if (!py_object_name) return NULL;
    abi_module = __Pyx_FetchSharedCythonABIModule();
    if (!abi_module) goto done;
    abi_module_dict = PyModule_GetDict(abi_module);
    if (!abi_module_dict) goto done;
    get_item_ref_result = __Pyx_PyDict_GetItemRef(abi_module_dict, py_object_name, &cached_type);
    if (get_item_ref_result == 1) {
        if (__Pyx_VerifyCachedType(
              cached_type,
              object_name,
              spec->basicsize) < 0) {
            goto bad;
        }
        goto done;
    } else if (unlikely(get_item_ref_result == -1)) {
        goto bad;
    }
    cached_type = __Pyx_PyType_FromMetaclass(
        metaclass,
        CYTHON_USE_MODULE_STATE ? module : abi_module,
        spec, bases);
    if (unlikely(!cached_type)) goto bad;
    if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad;
    new_cached_type = __Pyx_PyDict_SetDefault(abi_module_dict, py_object_name, cached_type);
    if (unlikely(new_cached_type != cached_type)) {
        if (unlikely(!new_cached_type)) goto bad;
        Py_DECREF(cached_type);
        cached_type = new_cached_type;
        if (__Pyx_VerifyCachedType(
                cached_type,
                object_name,
                spec->basicsize) < 0) {
            goto bad;
        }
        goto done;
    } else {
        Py_DECREF(new_cached_type);
    }
done:
    Py_XDECREF(abi_module);
    Py_DECREF(py_object_name);
    assert(cached_type == NULL || PyType_Check(cached_type));
    return (PyTypeObject *) cached_type;
bad:
    Py_XDECREF(cached_type);
    cached_type = NULL;
    goto done;
}

/* CommonTypesMetaclass (used by CythonFunctionShared) */
static PyObject* __pyx_CommonTypesMetaclass_get_module(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED void* context) {
    return PyUnicode_FromString(__PYX_ABI_MODULE_NAME);
}
#if __PYX_LIMITED_VERSION_HEX < 0x030A0000
static PyObject* __pyx_CommonTypesMetaclass_call(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED PyObject *args, CYTHON_UNUSED PyObject *kwds) {
    PyErr_SetString(PyExc_TypeError, "Cannot instantiate Cython internal types");
    return NULL;
}
static int __pyx_CommonTypesMetaclass_setattr(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED PyObject *attr, CYTHON_UNUSED PyObject *value) {
    PyErr_SetString(PyExc_TypeError, "Cython internal types are immutable");
    return -1;
}
#endif
static PyGetSetDef __pyx_CommonTypesMetaclass_getset[] = {
    {"__module__", __pyx_CommonTypesMetaclass_get_module, NULL, NULL, NULL},
    {0, 0, 0, 0, 0}
};
static PyType_Slot __pyx_CommonTypesMetaclass_slots[] = {
    {Py_tp_getset, (void *)__pyx_CommonTypesMetaclass_getset},
    #if __PYX_LIMITED_VERSION_HEX < 0x030A0000
    {Py_tp_call, (void*)__pyx_CommonTypesMetaclass_call},
    {Py_tp_new, (void*)__pyx_CommonTypesMetaclass_call},
    {Py_tp_setattro, (void*)__pyx_CommonTypesMetaclass_setattr},
    #endif
    {0, 0}
};
static PyType_Spec __pyx_CommonTypesMetaclass_spec = {
    __PYX_TYPE_MODULE_PREFIX "_common_types_metatype",
    0,
    0,
    Py_TPFLAGS_IMMUTABLETYPE |
    Py_TPFLAGS_DISALLOW_INSTANTIATION |
    Py_TPFLAGS_DEFAULT,
    __pyx_CommonTypesMetaclass_slots
};
static int __pyx_CommonTypesMetaclass_init(PyObject *module) {
    __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
    PyObject *bases = PyTuple_Pack(1, &PyType_Type);
    if (unlikely(!bases)) {
        return -1;
    }
    mstate->__pyx_CommonTypesMetaclassType = __Pyx_FetchCommonTypeFromSpec(NULL, module, &__pyx_CommonTypesMetaclass_spec, bases);
    Py_DECREF(bases);
    if (unlikely(mstate->__pyx_CommonTypesMetaclassType == NULL)) {
        return -1;
    }
    return 0;
}

/* PyMethodNew (used by CythonFunctionShared) */
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
    PyObject *result;
    CYTHON_UNUSED_VAR(typ);
    if (!self)
        return __Pyx_NewRef(func);
    #if __PYX_LIMITED_VERSION_HEX >= 0x030C0000
    {
        PyObject *args[] = {func, self};
        result = PyObject_Vectorcall(__pyx_mstate_global->__Pyx_CachedMethodType, args, 2, NULL);
    }
    #else
    result = PyObject_CallFunctionObjArgs(__pyx_mstate_global->__Pyx_CachedMethodType, func, self, NULL);
    #endif
    return result;
}
#else
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
    CYTHON_UNUSED_VAR(typ);
    if (!self)
        return __Pyx_NewRef(func);
    return PyMethod_New(func, self);
}
#endif

/* PyVectorcallFastCallDict (used by CythonFunctionShared) */
#if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw)
{
    PyObject *res = NULL;
    PyObject *kwnames;
    PyObject **newargs;
    PyObject **kwvalues;
    Py_ssize_t i;
    #if CYTHON_AVOID_BORROWED_REFS
    PyObject *pos;
    #else
    Py_ssize_t pos;
    #endif
    size_t j;
    PyObject *key, *value;
    unsigned long keys_are_strings;
    #if !CYTHON_ASSUME_SAFE_SIZE
    Py_ssize_t nkw = PyDict_Size(kw);
    if (unlikely(nkw == -1)) return NULL;
    #else
    Py_ssize_t nkw = PyDict_GET_SIZE(kw);
    #endif
    newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0]));
    if (unlikely(newargs == NULL)) {
        PyErr_NoMemory();
        return NULL;
    }
    for (j = 0; j < nargs; j++) newargs[j] = args[j];
    kwnames = PyTuple_New(nkw);
    if (unlikely(kwnames == NULL)) {
        PyMem_Free(newargs);
        return NULL;
    }
    kwvalues = newargs + nargs;
    pos = 0;
    i = 0;
    keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS;
    while (__Pyx_PyDict_NextRef(kw, &pos, &key, &value)) {
        keys_are_strings &=
        #if CYTHON_COMPILING_IN_LIMITED_API
            PyType_GetFlags(Py_TYPE(key));
        #else
            Py_TYPE(key)->tp_flags;
        #endif
        #if !CYTHON_ASSUME_SAFE_MACROS
        if (unlikely(PyTuple_SetItem(kwnames, i, key) < 0)) goto cleanup;
        #else
        PyTuple_SET_ITEM(kwnames, i, key);
        #endif
        kwvalues[i] = value;
        i++;
    }
    if (unlikely(!keys_are_strings)) {
        PyErr_SetString(PyExc_TypeError, "keywords must be strings");
        goto cleanup;
    }
    res = vc(func, newargs, nargs, kwnames);
cleanup:
    #if CYTHON_AVOID_BORROWED_REFS
    Py_DECREF(pos);
    #endif
    Py_DECREF(kwnames);
    for (i = 0; i < nkw; i++)
        Py_DECREF(kwvalues[i]);
    PyMem_Free(newargs);
    return res;
}
static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw)
{
    Py_ssize_t kw_size =
        likely(kw == NULL) ?
        0 :
#if !CYTHON_ASSUME_SAFE_SIZE
        PyDict_Size(kw);
#else
        PyDict_GET_SIZE(kw);
#endif
    if (kw_size == 0) {
        return vc(func, args, nargs, NULL);
    }
#if !CYTHON_ASSUME_SAFE_SIZE
    else if (unlikely(kw_size == -1)) {
        return NULL;
    }
#endif
    return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw);
}
#endif

/* CythonFunctionShared (used by CythonFunction) */
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunctionNoMethod(PyObject *func, void (*cfunc)(void)) {
    if (__Pyx_CyFunction_Check(func)) {
        return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc;
    } else if (PyCFunction_Check(func)) {
        return PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
    }
    return 0;
}
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void)) {
    if ((PyObject*)Py_TYPE(func) == __pyx_mstate_global->__Pyx_CachedMethodType) {
        int result;
        PyObject *newFunc = PyObject_GetAttr(func, __pyx_mstate_global->__pyx_n_u_func);
        if (unlikely(!newFunc)) {
            PyErr_Clear(); // It's only an optimization, so don't throw an error
            return 0;
        }
        result = __Pyx__IsSameCyOrCFunctionNoMethod(newFunc, cfunc);
        Py_DECREF(newFunc);
        return result;
    }
    return __Pyx__IsSameCyOrCFunctionNoMethod(func, cfunc);
}
#else
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void)) {
    if (PyMethod_Check(func)) {
        func = PyMethod_GET_FUNCTION(func);
    }
    return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
}
#endif
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) {
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    __Pyx_Py_XDECREF_SET(
        __Pyx_CyFunction_GetClassObj(f),
            ((classobj) ? __Pyx_NewRef(classobj) : NULL));
#else
    __Pyx_Py_XDECREF_SET(
        ((PyCMethodObject *) (f))->mm_class,
        (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL));
#endif
}
static PyObject *
__Pyx_CyFunction_get_doc_locked(__pyx_CyFunctionObject *op)
{
    if (unlikely(op->func_doc == NULL)) {
#if CYTHON_COMPILING_IN_LIMITED_API
        op->func_doc = PyObject_GetAttrString(op->func, "__doc__");
        if (unlikely(!op->func_doc)) return NULL;
#else
        if (((PyCFunctionObject*)op)->m_ml->ml_doc) {
            op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc);
            if (unlikely(op->func_doc == NULL))
                return NULL;
        } else {
            Py_INCREF(Py_None);
            return Py_None;
        }
#endif
    }
    Py_INCREF(op->func_doc);
    return op->func_doc;
}
static PyObject *
__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) {
    PyObject *result;
    CYTHON_UNUSED_VAR(closure);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_doc_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (value == NULL) {
        value = Py_None;
    }
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->func_doc, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_name_locked(__pyx_CyFunctionObject *op)
{
    if (unlikely(op->func_name == NULL)) {
#if CYTHON_COMPILING_IN_LIMITED_API
        op->func_name = PyObject_GetAttrString(op->func, "__name__");
#else
        op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name);
#endif
        if (unlikely(op->func_name == NULL))
            return NULL;
    }
    Py_INCREF(op->func_name);
    return op->func_name;
}
static PyObject *
__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context)
{
    PyObject *result = NULL;
    CYTHON_UNUSED_VAR(context);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_name_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->func_name, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    PyObject *result;
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    Py_INCREF(op->func_qualname);
    result = op->func_qualname;
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->func_qualname, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
static PyObject *
__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(op->func_dict == NULL)) {
        op->func_dict = PyDict_New();
        if (unlikely(op->func_dict == NULL))
            return NULL;
    }
    Py_INCREF(op->func_dict);
    return op->func_dict;
}
#endif
static PyObject *
__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(op->func_globals);
    return op->func_globals;
}
static PyObject *
__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(op);
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject *
__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context)
{
    PyObject* result = (op->func_code) ? op->func_code : Py_None;
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
    int result = 0;
    PyObject *res = op->defaults_getter((PyObject *) op);
    if (unlikely(!res))
        return -1;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
    Py_INCREF(op->defaults_tuple);
    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
    Py_INCREF(op->defaults_kwdict);
    #else
    op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0);
    if (unlikely(!op->defaults_tuple)) result = -1;
    else {
        op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1);
        if (unlikely(!op->defaults_kwdict)) result = -1;
    }
    #endif
    Py_DECREF(res);
    return result;
}
static int
__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value) {
        value = Py_None;
    } else if (unlikely(value != Py_None && !PyTuple_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__defaults__ must be set to a tuple object");
        return -1;
    }
    PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not "
                 "currently affect the values used in function calls", 1);
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->defaults_tuple, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_defaults_locked(__pyx_CyFunctionObject *op) {
    PyObject* result = op->defaults_tuple;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL;
            result = op->defaults_tuple;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static PyObject *
__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result = NULL;
    CYTHON_UNUSED_VAR(context);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_defaults_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value) {
        value = Py_None;
    } else if (unlikely(value != Py_None && !PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__kwdefaults__ must be set to a dict object");
        return -1;
    }
    PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not "
                 "currently affect the values used in function calls", 1);
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults_locked(__pyx_CyFunctionObject *op) {
    PyObject* result = op->defaults_kwdict;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL;
            result = op->defaults_kwdict;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result;
    CYTHON_UNUSED_VAR(context);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_kwdefaults_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value || value == Py_None) {
        value = NULL;
    } else if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__annotations__ must be set to a dict object");
        return -1;
    }
    Py_XINCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->func_annotations, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_annotations_locked(__pyx_CyFunctionObject *op) {
    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 PyObject *
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) {
    PyObject *result;
    CYTHON_UNUSED_VAR(context);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_annotations_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static PyObject *
__Pyx_CyFunction_get_is_coroutine_value(__pyx_CyFunctionObject *op) {
    int is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE;
    if (is_coroutine) {
        PyObject *is_coroutine_value, *module, *fromlist, *marker = __pyx_mstate_global->__pyx_n_u_is_coroutine;
        fromlist = PyList_New(1);
        if (unlikely(!fromlist)) return NULL;
        Py_INCREF(marker);
#if CYTHON_ASSUME_SAFE_MACROS
        PyList_SET_ITEM(fromlist, 0, marker);
#else
        if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) {
            Py_DECREF(marker);
            Py_DECREF(fromlist);
            return NULL;
        }
#endif
        module = PyImport_ImportModuleLevelObject(__pyx_mstate_global->__pyx_n_u_asyncio_coroutines, NULL, NULL, fromlist, 0);
        Py_DECREF(fromlist);
        if (unlikely(!module)) goto ignore;
        is_coroutine_value = __Pyx_PyObject_GetAttrStr(module, marker);
        Py_DECREF(module);
        if (likely(is_coroutine_value)) {
            return is_coroutine_value;
        }
ignore:
        PyErr_Clear();
    }
    return __Pyx_PyBool_FromLong(is_coroutine);
}
static PyObject *
__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) {
    PyObject *result;
    CYTHON_UNUSED_VAR(context);
    if (op->func_is_coroutine) {
        return __Pyx_NewRef(op->func_is_coroutine);
    }
    result = __Pyx_CyFunction_get_is_coroutine_value(op);
    if (unlikely(!result))
        return NULL;
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    if (op->func_is_coroutine) {
        Py_DECREF(result);
        result = __Pyx_NewRef(op->func_is_coroutine);
    } else {
        op->func_is_coroutine = __Pyx_NewRef(result);
    }
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static void __Pyx_CyFunction_raise_argument_count_error(__pyx_CyFunctionObject *func, const char* message, Py_ssize_t size) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_name = __Pyx_CyFunction_get_name(func, NULL);
    if (!py_name) return;
    PyErr_Format(PyExc_TypeError,
        "%.200S() %s (%" CYTHON_FORMAT_SSIZE_T "d given)",
        py_name, message, size);
    Py_DECREF(py_name);
#else
    const char* name = ((PyCFunctionObject*)func)->m_ml->ml_name;
    PyErr_Format(PyExc_TypeError,
        "%.200s() %s (%" CYTHON_FORMAT_SSIZE_T "d given)",
        name, message, size);
#endif
}
static void __Pyx_CyFunction_raise_type_error(__pyx_CyFunctionObject *func, const char* message) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_name = __Pyx_CyFunction_get_name(func, NULL);
    if (!py_name) return;
    PyErr_Format(PyExc_TypeError,
        "%.200S() %s",
        py_name, message);
    Py_DECREF(py_name);
#else
    const char* name = ((PyCFunctionObject*)func)->m_ml->ml_name;
    PyErr_Format(PyExc_TypeError,
        "%.200s() %s",
        name, message);
#endif
}
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *
__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) {
    CYTHON_UNUSED_VAR(context);
    return PyObject_GetAttrString(op->func, "__module__");
}
static int
__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    return PyObject_SetAttrString(op->func, "__module__", value);
}
#endif
static PyGetSetDef __pyx_CyFunction_getsets[] = {
    {"func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {"__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {"func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {"__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {"__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
    {"func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)PyObject_GenericSetDict, 0, 0},
    {"__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)PyObject_GenericSetDict, 0, 0},
#else
    {"func_dict", (getter)PyObject_GenericGetDict, (setter)PyObject_GenericSetDict, 0, 0},
    {"__dict__", (getter)PyObject_GenericGetDict, (setter)PyObject_GenericSetDict, 0, 0},
#endif
    {"func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {"__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {"func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {"__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {"func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {"__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {"func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {"__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {"__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
    {"__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
    {"_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0},
#if CYTHON_COMPILING_IN_LIMITED_API
    {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0},
#endif
    {0, 0, 0, 0, 0}
};
static PyMemberDef __pyx_CyFunction_members[] = {
#if !CYTHON_COMPILING_IN_LIMITED_API
    {"__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0},
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    {"__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0},
#endif
#if CYTHON_METH_FASTCALL
#if CYTHON_COMPILING_IN_LIMITED_API
    {"__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0},
#else
    {"__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0},
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
    {"__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0},
#else
    {"__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0},
#endif
#endif
    {0, 0, 0,  0, 0}
};
static PyObject *
__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args)
{
    PyObject *result = NULL;
    CYTHON_UNUSED_VAR(args);
    __Pyx_BEGIN_CRITICAL_SECTION(m);
    Py_INCREF(m->func_qualname);
    result = m->func_qualname;
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static PyMethodDef __pyx_CyFunction_methods[] = {
    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
    {0, 0, 0, 0}
};
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
#else
#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist)
#endif
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname,
                                       PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
#if !CYTHON_COMPILING_IN_LIMITED_API
    PyCFunctionObject *cf = (PyCFunctionObject*) op;
#endif
    if (unlikely(op == NULL))
        return NULL;
#if CYTHON_COMPILING_IN_LIMITED_API
    op->func = PyCFunction_NewEx(ml, (PyObject*)op, module);
    if (unlikely(!op->func)) return NULL;
#endif
    op->flags = flags;
    __Pyx_CyFunction_weakreflist(op) = NULL;
#if !CYTHON_COMPILING_IN_LIMITED_API
    cf->m_ml = ml;
    cf->m_self = (PyObject *) op;
#endif
    Py_XINCREF(closure);
    op->func_closure = closure;
#if !CYTHON_COMPILING_IN_LIMITED_API
    Py_XINCREF(module);
    cf->m_module = module;
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    op->func_dict = NULL;
#endif
    op->func_name = NULL;
    Py_INCREF(qualname);
    op->func_qualname = qualname;
    op->func_doc = NULL;
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    op->func_classobj = NULL;
#else
    ((PyCMethodObject*)op)->mm_class = NULL;
#endif
    op->func_globals = globals;
    Py_INCREF(op->func_globals);
    Py_XINCREF(code);
    op->func_code = code;
    op->defaults = NULL;
    op->defaults_tuple = NULL;
    op->defaults_kwdict = NULL;
    op->defaults_getter = NULL;
    op->func_annotations = NULL;
    op->func_is_coroutine = NULL;
#if CYTHON_METH_FASTCALL
    switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) {
    case METH_NOARGS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS;
        break;
    case METH_O:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O;
        break;
    case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD;
        break;
    case METH_FASTCALL | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS;
        break;
    case METH_VARARGS | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = NULL;
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
        Py_DECREF(op);
        return NULL;
    }
#endif
    return (PyObject *) op;
}
static int
__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
{
    Py_CLEAR(m->func_closure);
#if CYTHON_COMPILING_IN_LIMITED_API
    Py_CLEAR(m->func);
#else
    Py_CLEAR(((PyCFunctionObject*)m)->m_module);
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    Py_CLEAR(m->func_dict);
#elif PY_VERSION_HEX < 0x030d0000
    _PyObject_ClearManagedDict((PyObject*)m);
#else
    PyObject_ClearManagedDict((PyObject*)m);
#endif
    Py_CLEAR(m->func_name);
    Py_CLEAR(m->func_qualname);
    Py_CLEAR(m->func_doc);
    Py_CLEAR(m->func_globals);
    Py_CLEAR(m->func_code);
#if !CYTHON_COMPILING_IN_LIMITED_API
#if PY_VERSION_HEX < 0x030900B1
    Py_CLEAR(__Pyx_CyFunction_GetClassObj(m));
#else
    {
        PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class;
        ((PyCMethodObject *) (m))->mm_class = NULL;
        Py_XDECREF(cls);
    }
#endif
#endif
    Py_CLEAR(m->defaults_tuple);
    Py_CLEAR(m->defaults_kwdict);
    Py_CLEAR(m->func_annotations);
    Py_CLEAR(m->func_is_coroutine);
    Py_CLEAR(m->defaults);
    return 0;
}
static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    if (__Pyx_CyFunction_weakreflist(m) != NULL)
        PyObject_ClearWeakRefs((PyObject *) m);
    __Pyx_CyFunction_clear(m);
    __Pyx_PyHeapTypeObject_GC_Del(m);
}
static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    PyObject_GC_UnTrack(m);
    __Pyx__CyFunction_dealloc(m);
}
static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
{
    {
        int e = __Pyx_call_type_traverse((PyObject*)m, 1, visit, arg);
        if (e) return e;
    }
    Py_VISIT(m->func_closure);
#if CYTHON_COMPILING_IN_LIMITED_API
    Py_VISIT(m->func);
#else
    Py_VISIT(((PyCFunctionObject*)m)->m_module);
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    Py_VISIT(m->func_dict);
#else
    {
        int e =
#if PY_VERSION_HEX < 0x030d0000
            _PyObject_VisitManagedDict
#else
            PyObject_VisitManagedDict
#endif
                ((PyObject*)m, visit, arg);
        if (e != 0) return e;
    }
#endif
    __Pyx_VISIT_CONST(m->func_name);
    __Pyx_VISIT_CONST(m->func_qualname);
    Py_VISIT(m->func_doc);
    Py_VISIT(m->func_globals);
    __Pyx_VISIT_CONST(m->func_code);
#if !CYTHON_COMPILING_IN_LIMITED_API
    Py_VISIT(__Pyx_CyFunction_GetClassObj(m));
#endif
    Py_VISIT(m->defaults_tuple);
    Py_VISIT(m->defaults_kwdict);
    Py_VISIT(m->func_is_coroutine);
    Py_VISIT(m->defaults);
    return 0;
}
static PyObject*
__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
{
    PyObject *repr;
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    repr = PyUnicode_FromFormat("<cyfunction %U at %p>",
                                op->func_qualname, (void *)op);
    __Pyx_END_CRITICAL_SECTION();
    return repr;
}
static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *f = ((__pyx_CyFunctionObject*)func)->func;
    PyCFunction meth;
    int flags;
    meth = PyCFunction_GetFunction(f);
    if (unlikely(!meth)) return NULL;
    flags = PyCFunction_GetFlags(f);
    if (unlikely(flags < 0)) return NULL;
#else
    PyCFunctionObject* f = (PyCFunctionObject*)func;
    PyCFunction meth = f->m_ml->ml_meth;
    int flags = f->m_ml->ml_flags;
#endif
    Py_ssize_t size;
    switch (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(*)(void))meth)(self, arg, kw);
    case METH_NOARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
#if CYTHON_ASSUME_SAFE_SIZE
            size = PyTuple_GET_SIZE(arg);
#else
            size = PyTuple_Size(arg);
            if (unlikely(size < 0)) return NULL;
#endif
            if (likely(size == 0))
                return (*meth)(self, NULL);
            __Pyx_CyFunction_raise_argument_count_error(
                (__pyx_CyFunctionObject*)func,
                "takes no arguments", size);
            return NULL;
        }
        break;
    case METH_O:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
#if CYTHON_ASSUME_SAFE_SIZE
            size = PyTuple_GET_SIZE(arg);
#else
            size = PyTuple_Size(arg);
            if (unlikely(size < 0)) return NULL;
#endif
            if (likely(size == 1)) {
                PyObject *result, *arg0;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                arg0 = PyTuple_GET_ITEM(arg, 0);
                #else
                arg0 = __Pyx_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;
            }
            __Pyx_CyFunction_raise_argument_count_error(
                (__pyx_CyFunctionObject*)func,
                "takes exactly one argument", size);
            return NULL;
        }
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
        return NULL;
    }
    __Pyx_CyFunction_raise_type_error(
        (__pyx_CyFunctionObject*)func, "takes no keyword arguments");
    return NULL;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *self, *result;
#if CYTHON_COMPILING_IN_LIMITED_API
    self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func);
    if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
    self = ((PyCFunctionObject*)func)->m_self;
#endif
    result = __Pyx_CyFunction_CallMethod(func, self, arg, kw);
    return result;
}
static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
    PyObject *result;
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
#if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
     __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc);
    if (vc) {
#if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
        return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw);
#else
        (void) &__Pyx_PyVectorcall_FastCallDict;
        return PyVectorcall_Call(func, args, kw);
#endif
    }
#endif
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        Py_ssize_t argc;
        PyObject *new_args;
        PyObject *self;
#if CYTHON_ASSUME_SAFE_SIZE
        argc = PyTuple_GET_SIZE(args);
#else
        argc = PyTuple_Size(args);
        if (unlikely(argc < 0)) return NULL;
#endif
        new_args = PyTuple_GetSlice(args, 1, argc);
        if (unlikely(!new_args))
            return NULL;
        self = PyTuple_GetItem(args, 0);
        if (unlikely(!self)) {
            Py_DECREF(new_args);
            PyErr_Format(PyExc_TypeError,
                         "unbound method %.200S() needs an argument",
                         cyfunc->func_qualname);
            return NULL;
        }
        result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
        Py_DECREF(new_args);
    } else {
        result = __Pyx_CyFunction_Call(func, args, kw);
    }
    return result;
}
#if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames)
{
    int ret = 0;
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        if (unlikely(nargs < 1)) {
            __Pyx_CyFunction_raise_type_error(
                cyfunc, "needs an argument");
            return -1;
        }
        ret = 1;
    }
    if (unlikely(kwnames) && unlikely(__Pyx_PyTuple_GET_SIZE(kwnames))) {
        __Pyx_CyFunction_raise_type_error(
            cyfunc, "takes no keyword arguments");
        return -1;
    }
    return ret;
}
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    if (unlikely(nargs != 0)) {
        __Pyx_CyFunction_raise_argument_count_error(
            cyfunc, "takes no arguments", nargs);
        return NULL;
    }
    return meth(self, NULL);
}
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    if (unlikely(nargs != 1)) {
        __Pyx_CyFunction_raise_argument_count_error(
            cyfunc, "takes exactly one argument", nargs);
        return NULL;
    }
    return meth(self, args[0]);
}
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))meth)(self, args, nargs, kwnames);
}
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc);
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    #if PY_VERSION_HEX < 0x030e00A6
    size_t nargs_value = (size_t) nargs;
    #else
    Py_ssize_t nargs_value = nargs;
    #endif
    return ((__Pyx_PyCMethod)(void(*)(void))meth)(self, cls, args, nargs_value, kwnames);
}
#endif
static PyType_Slot __pyx_CyFunctionType_slots[] = {
    {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc},
    {Py_tp_repr, (void *)__Pyx_CyFunction_repr},
    {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod},
    {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse},
    {Py_tp_clear, (void *)__Pyx_CyFunction_clear},
    {Py_tp_methods, (void *)__pyx_CyFunction_methods},
    {Py_tp_members, (void *)__pyx_CyFunction_members},
    {Py_tp_getset, (void *)__pyx_CyFunction_getsets},
    {Py_tp_descr_get, (void *)__Pyx_PyMethod_New},
    {0, 0},
};
static PyType_Spec __pyx_CyFunctionType_spec = {
    __PYX_TYPE_MODULE_PREFIX "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR
    Py_TPFLAGS_METHOD_DESCRIPTOR |
#endif
#if CYTHON_METH_FASTCALL
#if defined(Py_TPFLAGS_HAVE_VECTORCALL)
    Py_TPFLAGS_HAVE_VECTORCALL |
#elif defined(_Py_TPFLAGS_HAVE_VECTORCALL)
    _Py_TPFLAGS_HAVE_VECTORCALL |
#endif
#endif // CYTHON_METH_FASTCALL
#if PY_VERSION_HEX >= 0x030C0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_TPFLAGS_MANAGED_DICT |
#endif
    Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION |
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
    __pyx_CyFunctionType_slots
};
static int __pyx_CyFunction_init(PyObject *module) {
    __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
    mstate->__pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(
        mstate->__pyx_CommonTypesMetaclassType, module, &__pyx_CyFunctionType_spec, NULL);
    if (unlikely(mstate->__pyx_CyFunctionType == NULL)) {
        return -1;
    }
    return 0;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_InitDefaults(PyObject *func, PyTypeObject *defaults_type) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults = PyObject_CallObject((PyObject*)defaults_type, NULL); // _PyObject_New(defaults_type);
    if (unlikely(!m->defaults))
        return NULL;
    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_mstate_global->__pyx_CyFunctionType),
        ml, flags, qualname, closure, module, globals, code
    );
    if (likely(op)) {
        PyObject_GC_Track(op);
    }
    return op;
}

/* CLineInTraceback (used by AddTraceback) */
#if CYTHON_CLINE_IN_TRACEBACK && CYTHON_CLINE_IN_TRACEBACK_RUNTIME
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
#define __Pyx_PyProbablyModule_GetDict(o) __Pyx_XNewRef(PyModule_GetDict(o))
#elif !CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#define __Pyx_PyProbablyModule_GetDict(o) PyObject_GenericGetDict(o, NULL);
#else
PyObject* __Pyx_PyProbablyModule_GetDict(PyObject *o) {
    PyObject **dict_ptr = _PyObject_GetDictPtr(o);
    return dict_ptr ? __Pyx_XNewRef(*dict_ptr) : NULL;
}
#endif
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
    PyObject *use_cline = NULL;
    PyObject *ptype, *pvalue, *ptraceback;
    PyObject *cython_runtime_dict;
    CYTHON_MAYBE_UNUSED_VAR(tstate);
    if (unlikely(!__pyx_mstate_global->__pyx_cython_runtime)) {
        return c_line;
    }
    __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
    cython_runtime_dict = __Pyx_PyProbablyModule_GetDict(__pyx_mstate_global->__pyx_cython_runtime);
    if (likely(cython_runtime_dict)) {
        __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
            use_cline, cython_runtime_dict,
            __Pyx_PyDict_SetDefault(cython_runtime_dict, __pyx_mstate_global->__pyx_n_u_cline_in_traceback, Py_False))
    }
    if (use_cline == NULL || use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
        c_line = 0;
    }
    Py_XDECREF(use_cline);
    Py_XDECREF(cython_runtime_dict);
    __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
    return c_line;
}
#endif

/* CodeObjectCache (used by AddTraceback) */
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 __Pyx_CachedCodeObjectType *__pyx__find_code_object(struct __Pyx_CodeObjectCache *code_cache, int code_line) {
    __Pyx_CachedCodeObjectType* code_object;
    int pos;
    if (unlikely(!code_line) || unlikely(!code_cache->entries)) {
        return NULL;
    }
    pos = __pyx_bisect_code_objects(code_cache->entries, code_cache->count, code_line);
    if (unlikely(pos >= code_cache->count) || unlikely(code_cache->entries[pos].code_line != code_line)) {
        return NULL;
    }
    code_object = code_cache->entries[pos].code_object;
    Py_INCREF(code_object);
    return code_object;
}
static __Pyx_CachedCodeObjectType *__pyx_find_code_object(int code_line) {
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && !CYTHON_ATOMICS
    (void)__pyx__find_code_object;
    return NULL; // Most implementation should have atomics. But otherwise, don't make it thread-safe, just miss.
#else
    struct __Pyx_CodeObjectCache *code_cache = &__pyx_mstate_global->__pyx_code_cache;
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_nonatomic_int_type old_count = __pyx_atomic_incr_acq_rel(&code_cache->accessor_count);
    if (old_count < 0) {
        __pyx_atomic_decr_acq_rel(&code_cache->accessor_count);
        return NULL;
    }
#endif
    __Pyx_CachedCodeObjectType *result = __pyx__find_code_object(code_cache, code_line);
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_atomic_decr_acq_rel(&code_cache->accessor_count);
#endif
    return result;
#endif
}
static void __pyx__insert_code_object(struct __Pyx_CodeObjectCache *code_cache, int code_line, __Pyx_CachedCodeObjectType* code_object)
{
    int pos, i;
    __Pyx_CodeObjectCacheEntry* entries = code_cache->entries;
    if (unlikely(!code_line)) {
        return;
    }
    if (unlikely(!entries)) {
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
        if (likely(entries)) {
            code_cache->entries = entries;
            code_cache->max_count = 64;
            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(code_cache->entries, code_cache->count, code_line);
    if ((pos < code_cache->count) && unlikely(code_cache->entries[pos].code_line == code_line)) {
        __Pyx_CachedCodeObjectType* tmp = entries[pos].code_object;
        entries[pos].code_object = code_object;
        Py_INCREF(code_object);
        Py_DECREF(tmp);
        return;
    }
    if (code_cache->count == code_cache->max_count) {
        int new_max = code_cache->max_count + 64;
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
            code_cache->entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
        if (unlikely(!entries)) {
            return;
        }
        code_cache->entries = entries;
        code_cache->max_count = new_max;
    }
    for (i=code_cache->count; i>pos; i--) {
        entries[i] = entries[i-1];
    }
    entries[pos].code_line = code_line;
    entries[pos].code_object = code_object;
    code_cache->count++;
    Py_INCREF(code_object);
}
static void __pyx_insert_code_object(int code_line, __Pyx_CachedCodeObjectType* code_object) {
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && !CYTHON_ATOMICS
    (void)__pyx__insert_code_object;
    return; // Most implementation should have atomics. But otherwise, don't make it thread-safe, just fail.
#else
    struct __Pyx_CodeObjectCache *code_cache = &__pyx_mstate_global->__pyx_code_cache;
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_nonatomic_int_type expected = 0;
    if (!__pyx_atomic_int_cmp_exchange(&code_cache->accessor_count, &expected, INT_MIN)) {
        return;
    }
#endif
    __pyx__insert_code_object(code_cache, code_line, code_object);
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_atomic_sub(&code_cache->accessor_count, INT_MIN);
#endif
#endif
}

/* AddTraceback */
#include "compile.h"
#include "frameobject.h"
#include "traceback.h"
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
  #ifndef Py_BUILD_CORE
    #define Py_BUILD_CORE 1
  #endif
  #include "internal/pycore_frame.h"
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict,
                                                       PyObject *firstlineno, PyObject *name) {
    PyObject *replace = NULL;
    if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL;
    if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL;
    replace = PyObject_GetAttrString(code, "replace");
    if (likely(replace)) {
        PyObject *result = PyObject_Call(replace, __pyx_mstate_global->__pyx_empty_tuple, scratch_dict);
        Py_DECREF(replace);
        return result;
    }
    PyErr_Clear();
    return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL;
    PyObject *replace = NULL, *getframe = NULL, *frame = NULL;
    PyObject *exc_type, *exc_value, *exc_traceback;
    int success = 0;
    if (c_line) {
        c_line = __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line);
    }
    PyErr_Fetch(&exc_type, &exc_value, &exc_traceback);
    code_object = __pyx_find_code_object(c_line ? -c_line : py_line);
    if (!code_object) {
        code_object = Py_CompileString("_getframe()", filename, Py_eval_input);
        if (unlikely(!code_object)) goto bad;
        py_py_line = PyLong_FromLong(py_line);
        if (unlikely(!py_py_line)) goto bad;
        if (c_line) {
            py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        } else {
            py_funcname = PyUnicode_FromString(funcname);
        }
        if (unlikely(!py_funcname)) goto bad;
        dict = PyDict_New();
        if (unlikely(!dict)) goto bad;
        {
            PyObject *old_code_object = code_object;
            code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname);
            Py_DECREF(old_code_object);
        }
        if (unlikely(!code_object)) goto bad;
        __pyx_insert_code_object(c_line ? -c_line : py_line, code_object);
    } else {
        dict = PyDict_New();
    }
    getframe = PySys_GetObject("_getframe");
    if (unlikely(!getframe)) goto bad;
    if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad;
    frame = PyEval_EvalCode(code_object, dict, dict);
    if (unlikely(!frame) || frame == Py_None) goto bad;
    success = 1;
  bad:
    PyErr_Restore(exc_type, exc_value, exc_traceback);
    Py_XDECREF(code_object);
    Py_XDECREF(py_py_line);
    Py_XDECREF(py_funcname);
    Py_XDECREF(dict);
    Py_XDECREF(replace);
    if (success) {
        PyTraceBack_Here(
            (struct _frame*)frame);
    }
    Py_XDECREF(frame);
}
#else
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
            const char *funcname, int c_line,
            int py_line, const char *filename) {
    PyCodeObject *py_code = NULL;
    PyObject *py_funcname = NULL;
    if (c_line) {
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        if (!py_funcname) goto bad;
        funcname = PyUnicode_AsUTF8(py_funcname);
        if (!funcname) goto bad;
    }
    py_code = PyCode_NewEmpty(filename, funcname, py_line);
    Py_XDECREF(py_funcname);
    return py_code;
bad:
    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;
    PyObject *ptype, *pvalue, *ptraceback;
    if (c_line) {
        c_line = __Pyx_CLineForTraceback(tstate, c_line);
    }
    py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
    if (!py_code) {
        __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
        py_code = __Pyx_CreateCodeObjectForTraceback(
            funcname, c_line, py_line, filename);
        if (!py_code) {
            /* If the code object creation fails, then we should clear the
               fetched exception references and propagate the new exception */
            Py_XDECREF(ptype);
            Py_XDECREF(pvalue);
            Py_XDECREF(ptraceback);
            goto bad;
        }
        __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
        __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
    }
    py_frame = PyFrame_New(
        tstate,            /*PyThreadState *tstate,*/
        py_code,           /*PyCodeObject *code,*/
        __pyx_mstate_global->__pyx_d,    /*PyObject *globals,*/
        0                  /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}
#endif

/* CheckUnpickleChecksum */
static void __Pyx_RaiseUnpickleChecksumError(long checksum, long checksum1, long checksum2, long checksum3, const char *members) {
    PyObject *pickle_module = PyImport_ImportModule("pickle");
    if (unlikely(!pickle_module)) return;
    PyObject *pickle_error = PyObject_GetAttrString(pickle_module, "PickleError");
    Py_DECREF(pickle_module);
    if (unlikely(!pickle_error)) return;
    if (checksum2 == checksum1) {
        PyErr_Format(pickle_error, "Incompatible checksums (0x%x vs (0x%x) = (%s))",
            checksum, checksum1, members);
    } else if (checksum3 == checksum2) {
        PyErr_Format(pickle_error, "Incompatible checksums (0x%x vs (0x%x, 0x%x) = (%s))",
            checksum, checksum1, checksum2, members);
    } else {
        PyErr_Format(pickle_error, "Incompatible checksums (0x%x vs (0x%x, 0x%x, 0x%x) = (%s))",
            checksum, checksum1, checksum2, checksum3, members);
    }
    Py_DECREF(pickle_error);
}
static int __Pyx_CheckUnpickleChecksum(long checksum, long checksum1, long checksum2, long checksum3, const char *members) {
    int found = 0;
    found |= checksum1 == checksum;
    found |= checksum2 == checksum;
    found |= checksum3 == checksum;
    if (likely(found))
        return 0;
    __Pyx_RaiseUnpickleChecksumError(checksum, checksum1, checksum2, checksum3, members);
    return -1;
}

/* CIntFromPyVerify */
#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
    {\
        func_type value = func_value;\
        if (sizeof(target_type) < sizeof(func_type)) {\
            if (unlikely(value != (func_type) (target_type) value)) {\
                func_type zero = 0;\
                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
                    return (target_type) -1;\
                if (is_unsigned && unlikely(value < zero))\
                    goto raise_neg_overflow;\
                else\
                    goto raise_overflow;\
            }\
        }\
        return (target_type) value;\
    }

/* CIntFromPy */
static CYTHON_INLINE int __Pyx_PyLong_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 (unlikely(!PyLong_Check(x))) {
        int val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (int) -1;
        val = __Pyx_PyLong_As_int(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                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 && PY_VERSION_HEX < 0x030C00A7
        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))
        } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                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))
        } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        int val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (int) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (int) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (int) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (int) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((int) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((int) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (int) -1;
        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 gcg::USERGIVEN __Pyx_PyLong_As_gcg_3a__3a_USERGIVEN(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const gcg::USERGIVEN neg_one = (gcg::USERGIVEN) -1, const_zero = (gcg::USERGIVEN) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        gcg::USERGIVEN val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (gcg::USERGIVEN) -1;
        val = __Pyx_PyLong_As_gcg_3a__3a_USERGIVEN(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(gcg::USERGIVEN) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::USERGIVEN) >= 2 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) (((((gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(gcg::USERGIVEN) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::USERGIVEN) >= 3 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) (((((((gcg::USERGIVEN)digits[2]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(gcg::USERGIVEN) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, 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(gcg::USERGIVEN) >= 4 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) (((((((((gcg::USERGIVEN)digits[3]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[2]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        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 (gcg::USERGIVEN) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(gcg::USERGIVEN) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::USERGIVEN, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(gcg::USERGIVEN) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::USERGIVEN, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(gcg::USERGIVEN) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::USERGIVEN) - 1 > 2 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) (((gcg::USERGIVEN)-1)*(((((gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(gcg::USERGIVEN) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::USERGIVEN) - 1 > 2 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) ((((((gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(gcg::USERGIVEN) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::USERGIVEN) - 1 > 3 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) (((gcg::USERGIVEN)-1)*(((((((gcg::USERGIVEN)digits[2]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(gcg::USERGIVEN) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::USERGIVEN) - 1 > 3 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) ((((((((gcg::USERGIVEN)digits[2]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(gcg::USERGIVEN) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, 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(gcg::USERGIVEN) - 1 > 4 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) (((gcg::USERGIVEN)-1)*(((((((((gcg::USERGIVEN)digits[3]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[2]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(gcg::USERGIVEN) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::USERGIVEN, 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(gcg::USERGIVEN) - 1 > 4 * PyLong_SHIFT)) {
                            return (gcg::USERGIVEN) ((((((((((gcg::USERGIVEN)digits[3]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[2]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[1]) << PyLong_SHIFT) | (gcg::USERGIVEN)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(gcg::USERGIVEN) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::USERGIVEN, long, PyLong_AsLong(x))
        } else if ((sizeof(gcg::USERGIVEN) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::USERGIVEN, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        gcg::USERGIVEN val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (gcg::USERGIVEN) -1;
#endif
        if (unlikely(ret))
            return (gcg::USERGIVEN) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to gcg::USERGIVEN");
    return (gcg::USERGIVEN) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to gcg::USERGIVEN");
    return (gcg::USERGIVEN) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_gcg_3a__3a_USERGIVEN(gcg::USERGIVEN value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const gcg::USERGIVEN neg_one = (gcg::USERGIVEN) -1, const_zero = (gcg::USERGIVEN) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(gcg::USERGIVEN) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(gcg::USERGIVEN) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(gcg::USERGIVEN) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(gcg::USERGIVEN) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(gcg::USERGIVEN) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(gcg::USERGIVEN),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(gcg::USERGIVEN));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_GCG_PRICINGSTATUS(GCG_PRICINGSTATUS value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const GCG_PRICINGSTATUS neg_one = (GCG_PRICINGSTATUS) -1, const_zero = (GCG_PRICINGSTATUS) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(GCG_PRICINGSTATUS) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(GCG_PRICINGSTATUS) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(GCG_PRICINGSTATUS) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(GCG_PRICINGSTATUS) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(GCG_PRICINGSTATUS) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(GCG_PRICINGSTATUS),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(GCG_PRICINGSTATUS));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_gcg_3a__3a_VAR_DECOMPINFO(gcg::VAR_DECOMPINFO value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const gcg::VAR_DECOMPINFO neg_one = (gcg::VAR_DECOMPINFO) -1, const_zero = (gcg::VAR_DECOMPINFO) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(gcg::VAR_DECOMPINFO) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(gcg::VAR_DECOMPINFO) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(gcg::VAR_DECOMPINFO) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(gcg::VAR_DECOMPINFO) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(gcg::VAR_DECOMPINFO) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(gcg::VAR_DECOMPINFO),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(gcg::VAR_DECOMPINFO));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_gcg_3a__3a_CONS_DECOMPINFO(gcg::CONS_DECOMPINFO value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const gcg::CONS_DECOMPINFO neg_one = (gcg::CONS_DECOMPINFO) -1, const_zero = (gcg::CONS_DECOMPINFO) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(gcg::CONS_DECOMPINFO) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(gcg::CONS_DECOMPINFO) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(gcg::CONS_DECOMPINFO) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(gcg::CONS_DECOMPINFO) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(gcg::CONS_DECOMPINFO) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(gcg::CONS_DECOMPINFO),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(gcg::CONS_DECOMPINFO));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_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 PyLong_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } 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 PyLong_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(int),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE long __Pyx_PyLong_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 (unlikely(!PyLong_Check(x))) {
        long val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (long) -1;
        val = __Pyx_PyLong_As_long(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                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 && PY_VERSION_HEX < 0x030C00A7
        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))
        } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                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))
        } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        long val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (long) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (long) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (long) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (long) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((long) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((long) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (long) -1;
        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;
}

/* CIntFromPy */
static CYTHON_INLINE size_t __Pyx_PyLong_As_size_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const size_t neg_one = (size_t) -1, const_zero = (size_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        size_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (size_t) -1;
        val = __Pyx_PyLong_As_size_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(size_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(size_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 2 * PyLong_SHIFT)) {
                            return (size_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(size_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 3 * PyLong_SHIFT)) {
                            return (size_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(size_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 4 * PyLong_SHIFT)) {
                            return (size_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (size_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(size_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(size_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(size_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(size_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (size_t) ((((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(size_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (size_t) ((((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(size_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (size_t) ((((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(size_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x))
        } else if ((sizeof(size_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(size_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        size_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (size_t) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (size_t) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (size_t) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (size_t) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(size_t) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((size_t) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(size_t) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((size_t) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((size_t) 1) << (sizeof(size_t) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (size_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to size_t");
    return (size_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to size_t");
    return (size_t) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_SCIP_RESULT(SCIP_RESULT value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const SCIP_RESULT neg_one = (SCIP_RESULT) -1, const_zero = (SCIP_RESULT) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(SCIP_RESULT) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(SCIP_RESULT) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(SCIP_RESULT) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(SCIP_RESULT) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(SCIP_RESULT) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(SCIP_RESULT),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(SCIP_RESULT));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE SCIP_RESULT __Pyx_PyLong_As_SCIP_RESULT(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const SCIP_RESULT neg_one = (SCIP_RESULT) -1, const_zero = (SCIP_RESULT) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        SCIP_RESULT val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (SCIP_RESULT) -1;
        val = __Pyx_PyLong_As_SCIP_RESULT(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(SCIP_RESULT) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_RESULT) >= 2 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) (((((SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(SCIP_RESULT) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_RESULT) >= 3 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) (((((((SCIP_RESULT)digits[2]) << PyLong_SHIFT) | (SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(SCIP_RESULT) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, 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(SCIP_RESULT) >= 4 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) (((((((((SCIP_RESULT)digits[3]) << PyLong_SHIFT) | (SCIP_RESULT)digits[2]) << PyLong_SHIFT) | (SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        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 (SCIP_RESULT) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(SCIP_RESULT) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(SCIP_RESULT, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(SCIP_RESULT) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(SCIP_RESULT, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(SCIP_RESULT) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_RESULT) - 1 > 2 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) (((SCIP_RESULT)-1)*(((((SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(SCIP_RESULT) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_RESULT) - 1 > 2 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) ((((((SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(SCIP_RESULT) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_RESULT) - 1 > 3 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) (((SCIP_RESULT)-1)*(((((((SCIP_RESULT)digits[2]) << PyLong_SHIFT) | (SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(SCIP_RESULT) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_RESULT) - 1 > 3 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) ((((((((SCIP_RESULT)digits[2]) << PyLong_SHIFT) | (SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(SCIP_RESULT) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, 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(SCIP_RESULT) - 1 > 4 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) (((SCIP_RESULT)-1)*(((((((((SCIP_RESULT)digits[3]) << PyLong_SHIFT) | (SCIP_RESULT)digits[2]) << PyLong_SHIFT) | (SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(SCIP_RESULT) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_RESULT, 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(SCIP_RESULT) - 1 > 4 * PyLong_SHIFT)) {
                            return (SCIP_RESULT) ((((((((((SCIP_RESULT)digits[3]) << PyLong_SHIFT) | (SCIP_RESULT)digits[2]) << PyLong_SHIFT) | (SCIP_RESULT)digits[1]) << PyLong_SHIFT) | (SCIP_RESULT)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(SCIP_RESULT) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(SCIP_RESULT, long, PyLong_AsLong(x))
        } else if ((sizeof(SCIP_RESULT) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(SCIP_RESULT, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        SCIP_RESULT val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (SCIP_RESULT) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (SCIP_RESULT) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (SCIP_RESULT) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (SCIP_RESULT) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(SCIP_RESULT) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((SCIP_RESULT) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(SCIP_RESULT) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((SCIP_RESULT) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((SCIP_RESULT) 1) << (sizeof(SCIP_RESULT) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (SCIP_RESULT) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to SCIP_RESULT");
    return (SCIP_RESULT) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to SCIP_RESULT");
    return (SCIP_RESULT) -1;
}

/* CIntFromPy */
static CYTHON_INLINE GCG_PRICINGSTATUS __Pyx_PyLong_As_GCG_PRICINGSTATUS(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const GCG_PRICINGSTATUS neg_one = (GCG_PRICINGSTATUS) -1, const_zero = (GCG_PRICINGSTATUS) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        GCG_PRICINGSTATUS val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (GCG_PRICINGSTATUS) -1;
        val = __Pyx_PyLong_As_GCG_PRICINGSTATUS(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(GCG_PRICINGSTATUS) >= 2 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) (((((GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(GCG_PRICINGSTATUS) >= 3 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) (((((((GCG_PRICINGSTATUS)digits[2]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, 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(GCG_PRICINGSTATUS) >= 4 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) (((((((((GCG_PRICINGSTATUS)digits[3]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[2]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        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 (GCG_PRICINGSTATUS) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(GCG_PRICINGSTATUS) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(GCG_PRICINGSTATUS, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(GCG_PRICINGSTATUS) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(GCG_PRICINGSTATUS, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(GCG_PRICINGSTATUS) - 1 > 2 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) (((GCG_PRICINGSTATUS)-1)*(((((GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(GCG_PRICINGSTATUS) - 1 > 2 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) ((((((GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(GCG_PRICINGSTATUS) - 1 > 3 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) (((GCG_PRICINGSTATUS)-1)*(((((((GCG_PRICINGSTATUS)digits[2]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(GCG_PRICINGSTATUS) - 1 > 3 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) ((((((((GCG_PRICINGSTATUS)digits[2]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, 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(GCG_PRICINGSTATUS) - 1 > 4 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) (((GCG_PRICINGSTATUS)-1)*(((((((((GCG_PRICINGSTATUS)digits[3]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[2]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(GCG_PRICINGSTATUS) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(GCG_PRICINGSTATUS, 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(GCG_PRICINGSTATUS) - 1 > 4 * PyLong_SHIFT)) {
                            return (GCG_PRICINGSTATUS) ((((((((((GCG_PRICINGSTATUS)digits[3]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[2]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[1]) << PyLong_SHIFT) | (GCG_PRICINGSTATUS)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(GCG_PRICINGSTATUS) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(GCG_PRICINGSTATUS, long, PyLong_AsLong(x))
        } else if ((sizeof(GCG_PRICINGSTATUS) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(GCG_PRICINGSTATUS, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        GCG_PRICINGSTATUS val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (GCG_PRICINGSTATUS) -1;
#endif
        if (unlikely(ret))
            return (GCG_PRICINGSTATUS) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to GCG_PRICINGSTATUS");
    return (GCG_PRICINGSTATUS) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to GCG_PRICINGSTATUS");
    return (GCG_PRICINGSTATUS) -1;
}

/* CIntFromPy */
static CYTHON_INLINE gcg::CONS_DECOMPINFO __Pyx_PyLong_As_gcg_3a__3a_CONS_DECOMPINFO(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const gcg::CONS_DECOMPINFO neg_one = (gcg::CONS_DECOMPINFO) -1, const_zero = (gcg::CONS_DECOMPINFO) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        gcg::CONS_DECOMPINFO val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (gcg::CONS_DECOMPINFO) -1;
        val = __Pyx_PyLong_As_gcg_3a__3a_CONS_DECOMPINFO(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::CONS_DECOMPINFO) >= 2 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) (((((gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::CONS_DECOMPINFO) >= 3 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) (((((((gcg::CONS_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, 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(gcg::CONS_DECOMPINFO) >= 4 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) (((((((((gcg::CONS_DECOMPINFO)digits[3]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        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 (gcg::CONS_DECOMPINFO) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(gcg::CONS_DECOMPINFO) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::CONS_DECOMPINFO, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(gcg::CONS_DECOMPINFO) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::CONS_DECOMPINFO, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::CONS_DECOMPINFO) - 1 > 2 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) (((gcg::CONS_DECOMPINFO)-1)*(((((gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::CONS_DECOMPINFO) - 1 > 2 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) ((((((gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::CONS_DECOMPINFO) - 1 > 3 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) (((gcg::CONS_DECOMPINFO)-1)*(((((((gcg::CONS_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::CONS_DECOMPINFO) - 1 > 3 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) ((((((((gcg::CONS_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, 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(gcg::CONS_DECOMPINFO) - 1 > 4 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) (((gcg::CONS_DECOMPINFO)-1)*(((((((((gcg::CONS_DECOMPINFO)digits[3]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(gcg::CONS_DECOMPINFO) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::CONS_DECOMPINFO, 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(gcg::CONS_DECOMPINFO) - 1 > 4 * PyLong_SHIFT)) {
                            return (gcg::CONS_DECOMPINFO) ((((((((((gcg::CONS_DECOMPINFO)digits[3]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::CONS_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(gcg::CONS_DECOMPINFO) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::CONS_DECOMPINFO, long, PyLong_AsLong(x))
        } else if ((sizeof(gcg::CONS_DECOMPINFO) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::CONS_DECOMPINFO, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        gcg::CONS_DECOMPINFO val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (gcg::CONS_DECOMPINFO) -1;
#endif
        if (unlikely(ret))
            return (gcg::CONS_DECOMPINFO) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to gcg::CONS_DECOMPINFO");
    return (gcg::CONS_DECOMPINFO) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to gcg::CONS_DECOMPINFO");
    return (gcg::CONS_DECOMPINFO) -1;
}

/* CIntFromPy */
static CYTHON_INLINE gcg::VAR_DECOMPINFO __Pyx_PyLong_As_gcg_3a__3a_VAR_DECOMPINFO(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const gcg::VAR_DECOMPINFO neg_one = (gcg::VAR_DECOMPINFO) -1, const_zero = (gcg::VAR_DECOMPINFO) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        gcg::VAR_DECOMPINFO val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (gcg::VAR_DECOMPINFO) -1;
        val = __Pyx_PyLong_As_gcg_3a__3a_VAR_DECOMPINFO(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::VAR_DECOMPINFO) >= 2 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) (((((gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::VAR_DECOMPINFO) >= 3 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) (((((((gcg::VAR_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, 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(gcg::VAR_DECOMPINFO) >= 4 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) (((((((((gcg::VAR_DECOMPINFO)digits[3]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        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 (gcg::VAR_DECOMPINFO) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(gcg::VAR_DECOMPINFO) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::VAR_DECOMPINFO, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(gcg::VAR_DECOMPINFO) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::VAR_DECOMPINFO, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::VAR_DECOMPINFO) - 1 > 2 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) (((gcg::VAR_DECOMPINFO)-1)*(((((gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::VAR_DECOMPINFO) - 1 > 2 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) ((((((gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::VAR_DECOMPINFO) - 1 > 3 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) (((gcg::VAR_DECOMPINFO)-1)*(((((((gcg::VAR_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(gcg::VAR_DECOMPINFO) - 1 > 3 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) ((((((((gcg::VAR_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, 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(gcg::VAR_DECOMPINFO) - 1 > 4 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) (((gcg::VAR_DECOMPINFO)-1)*(((((((((gcg::VAR_DECOMPINFO)digits[3]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(gcg::VAR_DECOMPINFO) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(gcg::VAR_DECOMPINFO, 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(gcg::VAR_DECOMPINFO) - 1 > 4 * PyLong_SHIFT)) {
                            return (gcg::VAR_DECOMPINFO) ((((((((((gcg::VAR_DECOMPINFO)digits[3]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[2]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[1]) << PyLong_SHIFT) | (gcg::VAR_DECOMPINFO)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(gcg::VAR_DECOMPINFO) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::VAR_DECOMPINFO, long, PyLong_AsLong(x))
        } else if ((sizeof(gcg::VAR_DECOMPINFO) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(gcg::VAR_DECOMPINFO, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        gcg::VAR_DECOMPINFO val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (gcg::VAR_DECOMPINFO) -1;
#endif
        if (unlikely(ret))
            return (gcg::VAR_DECOMPINFO) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to gcg::VAR_DECOMPINFO");
    return (gcg::VAR_DECOMPINFO) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to gcg::VAR_DECOMPINFO");
    return (gcg::VAR_DECOMPINFO) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_unsigned_long(unsigned long value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned 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(unsigned long) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(unsigned long) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(unsigned long),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned long));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_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 PyLong_FromLong((long) value);
        } else if (sizeof(unsigned int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } 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 PyLong_FromLong((long) value);
        } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(unsigned int),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned int));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_SCIP_RETCODE(SCIP_RETCODE value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const SCIP_RETCODE neg_one = (SCIP_RETCODE) -1, const_zero = (SCIP_RETCODE) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(SCIP_RETCODE) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(SCIP_RETCODE) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(SCIP_RETCODE) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(SCIP_RETCODE) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(SCIP_RETCODE) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(SCIP_RETCODE),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(SCIP_RETCODE));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_SCIP_STAGE(SCIP_STAGE value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const SCIP_STAGE neg_one = (SCIP_STAGE) -1, const_zero = (SCIP_STAGE) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(SCIP_STAGE) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(SCIP_STAGE) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(SCIP_STAGE) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(SCIP_STAGE) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(SCIP_STAGE) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(SCIP_STAGE),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(SCIP_STAGE));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE SCIP_PARAMSETTING __Pyx_PyLong_As_SCIP_PARAMSETTING(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const SCIP_PARAMSETTING neg_one = (SCIP_PARAMSETTING) -1, const_zero = (SCIP_PARAMSETTING) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        SCIP_PARAMSETTING val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (SCIP_PARAMSETTING) -1;
        val = __Pyx_PyLong_As_SCIP_PARAMSETTING(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(SCIP_PARAMSETTING) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_PARAMSETTING) >= 2 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) (((((SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(SCIP_PARAMSETTING) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_PARAMSETTING) >= 3 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) (((((((SCIP_PARAMSETTING)digits[2]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(SCIP_PARAMSETTING) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, 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(SCIP_PARAMSETTING) >= 4 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) (((((((((SCIP_PARAMSETTING)digits[3]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[2]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        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 (SCIP_PARAMSETTING) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(SCIP_PARAMSETTING) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(SCIP_PARAMSETTING, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(SCIP_PARAMSETTING) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(SCIP_PARAMSETTING, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(SCIP_PARAMSETTING) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_PARAMSETTING) - 1 > 2 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) (((SCIP_PARAMSETTING)-1)*(((((SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(SCIP_PARAMSETTING) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_PARAMSETTING) - 1 > 2 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) ((((((SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(SCIP_PARAMSETTING) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_PARAMSETTING) - 1 > 3 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) (((SCIP_PARAMSETTING)-1)*(((((((SCIP_PARAMSETTING)digits[2]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(SCIP_PARAMSETTING) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(SCIP_PARAMSETTING) - 1 > 3 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) ((((((((SCIP_PARAMSETTING)digits[2]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(SCIP_PARAMSETTING) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, 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(SCIP_PARAMSETTING) - 1 > 4 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) (((SCIP_PARAMSETTING)-1)*(((((((((SCIP_PARAMSETTING)digits[3]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[2]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(SCIP_PARAMSETTING) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(SCIP_PARAMSETTING, 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(SCIP_PARAMSETTING) - 1 > 4 * PyLong_SHIFT)) {
                            return (SCIP_PARAMSETTING) ((((((((((SCIP_PARAMSETTING)digits[3]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[2]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[1]) << PyLong_SHIFT) | (SCIP_PARAMSETTING)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(SCIP_PARAMSETTING) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(SCIP_PARAMSETTING, long, PyLong_AsLong(x))
        } else if ((sizeof(SCIP_PARAMSETTING) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(SCIP_PARAMSETTING, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        SCIP_PARAMSETTING val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (SCIP_PARAMSETTING) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (SCIP_PARAMSETTING) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (SCIP_PARAMSETTING) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (SCIP_PARAMSETTING) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(SCIP_PARAMSETTING) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((SCIP_PARAMSETTING) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(SCIP_PARAMSETTING) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((SCIP_PARAMSETTING) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((SCIP_PARAMSETTING) 1) << (sizeof(SCIP_PARAMSETTING) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (SCIP_PARAMSETTING) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to SCIP_PARAMSETTING");
    return (SCIP_PARAMSETTING) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to SCIP_PARAMSETTING");
    return (SCIP_PARAMSETTING) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_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 PyLong_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } 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 PyLong_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(long),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* PyObjectCall2Args */
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
    PyObject *args[3] = {NULL, arg1, arg2};
    return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* PyObjectCallMethod1 */
#if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
    PyObject *result = __Pyx_PyObject_CallOneArg(method, arg);
    Py_DECREF(method);
    return result;
}
#endif
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
#if CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000))
    PyObject *args[2] = {obj, arg};
    (void) __Pyx_PyObject_CallOneArg;
    (void) __Pyx_PyObject_Call2Args;
    return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
#else
    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);
#endif
}

/* UpdateUnpickledDict */
static int __Pyx__UpdateUnpickledDict(PyObject *obj, PyObject *state, Py_ssize_t index) {
    PyObject *state_dict = __Pyx_PySequence_ITEM(state, index);
    if (unlikely(!state_dict)) {
        return -1;
    }
    int non_empty = PyObject_IsTrue(state_dict);
    if (non_empty == 0) {
        Py_DECREF(state_dict);
        return 0;
    } else if (unlikely(non_empty == -1)) {
        return -1;
    }
    PyObject *dict;
    #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
    dict = PyObject_GetAttrString(obj, "__dict__");
    #else
    dict = PyObject_GenericGetDict(obj, NULL);
    #endif
    if (unlikely(!dict)) {
        Py_DECREF(state_dict);
        return -1;
    }
    int result;
    if (likely(PyDict_CheckExact(dict))) {
        result = PyDict_Update(dict, state_dict);
    } else {
        PyObject *obj_result = __Pyx_PyObject_CallMethod1(dict, __pyx_mstate_global->__pyx_n_u_update, state_dict);
        if (likely(obj_result)) {
            Py_DECREF(obj_result);
            result = 0;
        } else {
            result = -1;
        }
    }
    Py_DECREF(state_dict);
    Py_DECREF(dict);
    return result;
}
static int __Pyx_UpdateUnpickledDict(PyObject *obj, PyObject *state, Py_ssize_t index) {
    Py_ssize_t state_size = __Pyx_PyTuple_GET_SIZE(state);
    #if !CYTHON_ASSUME_SAFE_SIZE
    if (unlikely(state_size == -1)) return -1;
    #endif
    if (state_size <= index) {
        return 0;
    }
    return __Pyx__UpdateUnpickledDict(obj, state, index);
}

/* FormatTypeName */
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030d0000
static __Pyx_TypeName
__Pyx_PyType_GetFullyQualifiedName(PyTypeObject* tp)
{
    PyObject *module = NULL, *name = NULL, *result = NULL;
    #if __PYX_LIMITED_VERSION_HEX < 0x030b0000
    name = __Pyx_PyObject_GetAttrStr((PyObject *)tp,
                                               __pyx_mstate_global->__pyx_n_u_qualname);
    #else
    name = PyType_GetQualName(tp);
    #endif
    if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) goto bad;
    module = __Pyx_PyObject_GetAttrStr((PyObject *)tp,
                                               __pyx_mstate_global->__pyx_n_u_module);
    if (unlikely(module == NULL) || unlikely(!PyUnicode_Check(module))) goto bad;
    if (PyUnicode_CompareWithASCIIString(module, "builtins") == 0) {
        result = name;
        name = NULL;
        goto done;
    }
    result = PyUnicode_FromFormat("%U.%U", module, name);
    if (unlikely(result == NULL)) goto bad;
  done:
    Py_XDECREF(name);
    Py_XDECREF(module);
    return result;
  bad:
    PyErr_Clear();
    if (name) {
        result = name;
        name = NULL;
    } else {
        result = __Pyx_NewRef(__pyx_mstate_global->__pyx_kp_u__7);
    }
    goto done;
}
#endif

/* FastTypeChecks */
#if CYTHON_COMPILING_IN_CPYTHON
static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
    while (a) {
        a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*);
        if (a == b)
            return 1;
    }
    return b == &PyBaseObject_Type;
}
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
    PyObject *mro;
    if (a == b) return 1;
    mro = a->tp_mro;
    if (likely(mro)) {
        Py_ssize_t i, n;
        n = PyTuple_GET_SIZE(mro);
        for (i = 0; i < n; i++) {
            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
                return 1;
        }
        return 0;
    }
    return __Pyx_InBases(a, b);
}
static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) {
    PyObject *mro;
    if (cls == a || cls == b) return 1;
    mro = cls->tp_mro;
    if (likely(mro)) {
        Py_ssize_t i, n;
        n = PyTuple_GET_SIZE(mro);
        for (i = 0; i < n; i++) {
            PyObject *base = PyTuple_GET_ITEM(mro, i);
            if (base == (PyObject *)a || base == (PyObject *)b)
                return 1;
        }
        return 0;
    }
    return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b);
}
static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
    if (exc_type1) {
        return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2);
    } else {
        return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
    }
}
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);
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
    for (i=0; i<n; i++) {
        PyObject *t = PyTuple_GET_ITEM(tuple, i);
        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

/* GetRuntimeVersion */
#if __PYX_LIMITED_VERSION_HEX < 0x030b0000
void __Pyx_init_runtime_version(void) {
    if (__Pyx_cached_runtime_version == 0) {
        const char* rt_version = Py_GetVersion();
        unsigned long version = 0;
        unsigned long factor = 0x01000000UL;
        unsigned int digit = 0;
        int i = 0;
        while (factor) {
            while ('0' <= rt_version[i] && rt_version[i] <= '9') {
                digit = digit * 10 + (unsigned int) (rt_version[i] - '0');
                ++i;
            }
            version += factor * digit;
            if (rt_version[i] != '.')
                break;
            digit = 0;
            factor >>= 8;
            ++i;
        }
        __Pyx_cached_runtime_version = version;
    }
}
#endif
static unsigned long __Pyx_get_runtime_version(void) {
#if __PYX_LIMITED_VERSION_HEX >= 0x030b0000
    return Py_Version & ~0xFFUL;
#else
    return __Pyx_cached_runtime_version;
#endif
}

/* CheckBinaryVersion */
static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) {
    const unsigned long MAJOR_MINOR = 0xFFFF0000UL;
    if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR))
        return 0;
    if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR)))
        return 1;
    {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compile time Python version %d.%d "
                      "of module '%.100s' "
                      "%s "
                      "runtime version %d.%d",
                       (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF),
                       __Pyx_MODULE_NAME,
                       (allow_newer) ? "was newer than" : "does not match",
                       (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF)
       );
        return PyErr_WarnEx(NULL, message, 1);
    }
}

/* NewCodeObj */
#if CYTHON_COMPILING_IN_LIMITED_API
    static PyObject* __Pyx__PyCode_New(int a, int p, int k, int l, int s, int f,
                                       PyObject *code, PyObject *c, PyObject* n, PyObject *v,
                                       PyObject *fv, PyObject *cell, PyObject* fn,
                                       PyObject *name, int fline, PyObject *lnos) {
        PyObject *exception_table = NULL;
        PyObject *types_module=NULL, *code_type=NULL, *result=NULL;
        #if __PYX_LIMITED_VERSION_HEX < 0x030b0000
        PyObject *version_info;
        PyObject *py_minor_version = NULL;
        #endif
        long minor_version = 0;
        PyObject *type, *value, *traceback;
        PyErr_Fetch(&type, &value, &traceback);
        #if __PYX_LIMITED_VERSION_HEX >= 0x030b0000
        minor_version = 11;
        #else
        if (!(version_info = PySys_GetObject("version_info"))) goto end;
        if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end;
        minor_version = PyLong_AsLong(py_minor_version);
        Py_DECREF(py_minor_version);
        if (minor_version == -1 && PyErr_Occurred()) goto end;
        #endif
        if (!(types_module = PyImport_ImportModule("types"))) goto end;
        if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end;
        if (minor_version <= 7) {
            (void)p;
            result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOOO", a, k, l, s, f, code,
                          c, n, v, fn, name, fline, lnos, fv, cell);
        } else if (minor_version <= 10) {
            result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOOO", a,p, k, l, s, f, code,
                          c, n, v, fn, name, fline, lnos, fv, cell);
        } else {
            if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end;
            result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOOOO", a,p, k, l, s, f, code,
                          c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell);
        }
    end:
        Py_XDECREF(code_type);
        Py_XDECREF(exception_table);
        Py_XDECREF(types_module);
        if (type) {
            PyErr_Restore(type, value, traceback);
        }
        return result;
    }
#elif PY_VERSION_HEX >= 0x030B0000
  static PyCodeObject* __Pyx__PyCode_New(int a, int p, int k, int l, int s, int f,
                                         PyObject *code, PyObject *c, PyObject* n, PyObject *v,
                                         PyObject *fv, PyObject *cell, PyObject* fn,
                                         PyObject *name, int fline, PyObject *lnos) {
    PyCodeObject *result;
    result =
      #if PY_VERSION_HEX >= 0x030C0000
        PyUnstable_Code_NewWithPosOnlyArgs
      #else
        PyCode_NewWithPosOnlyArgs
      #endif
        (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, __pyx_mstate_global->__pyx_empty_bytes);
    #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030c00A1
    if (likely(result))
        result->_co_firsttraceable = 0;
    #endif
    return result;
  }
#elif !CYTHON_COMPILING_IN_PYPY
  #define __Pyx__PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
  #define __Pyx__PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#endif
static PyObject* __Pyx_PyCode_New(
        const __Pyx_PyCode_New_function_description descr,
        PyObject * const *varnames,
        PyObject *filename,
        PyObject *funcname,
        PyObject *line_table,
        PyObject *tuple_dedup_map
) {
    PyObject *code_obj = NULL, *varnames_tuple_dedup = NULL, *code_bytes = NULL;
    Py_ssize_t var_count = (Py_ssize_t) descr.nlocals;
    PyObject *varnames_tuple = PyTuple_New(var_count);
    if (unlikely(!varnames_tuple)) return NULL;
    for (Py_ssize_t i=0; i < var_count; i++) {
        Py_INCREF(varnames[i]);
        if (__Pyx_PyTuple_SET_ITEM(varnames_tuple, i, varnames[i]) != (0)) goto done;
    }
    #if CYTHON_COMPILING_IN_LIMITED_API
    varnames_tuple_dedup = PyDict_GetItem(tuple_dedup_map, varnames_tuple);
    if (!varnames_tuple_dedup) {
        if (unlikely(PyDict_SetItem(tuple_dedup_map, varnames_tuple, varnames_tuple) < 0)) goto done;
        varnames_tuple_dedup = varnames_tuple;
    }
    #else
    varnames_tuple_dedup = PyDict_SetDefault(tuple_dedup_map, varnames_tuple, varnames_tuple);
    if (unlikely(!varnames_tuple_dedup)) goto done;
    #endif
    #if CYTHON_AVOID_BORROWED_REFS
    Py_INCREF(varnames_tuple_dedup);
    #endif
    if (__PYX_LIMITED_VERSION_HEX >= (0x030b0000) && line_table != NULL && !CYTHON_COMPILING_IN_GRAAL) {
        Py_ssize_t line_table_length = __Pyx_PyBytes_GET_SIZE(line_table);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(line_table_length == -1)) goto done;
        #endif
        Py_ssize_t code_len = (line_table_length * 2 + 4) & ~3LL;
        code_bytes = PyBytes_FromStringAndSize(NULL, code_len);
        if (unlikely(!code_bytes)) goto done;
        char* c_code_bytes = PyBytes_AsString(code_bytes);
        if (unlikely(!c_code_bytes)) goto done;
        memset(c_code_bytes, 0, (size_t) code_len);
    }
    code_obj = (PyObject*) __Pyx__PyCode_New(
        (int) descr.argcount,
        (int) descr.num_posonly_args,
        (int) descr.num_kwonly_args,
        (int) descr.nlocals,
        0,
        (int) descr.flags,
        code_bytes ? code_bytes : __pyx_mstate_global->__pyx_empty_bytes,
        __pyx_mstate_global->__pyx_empty_tuple,
        __pyx_mstate_global->__pyx_empty_tuple,
        varnames_tuple_dedup,
        __pyx_mstate_global->__pyx_empty_tuple,
        __pyx_mstate_global->__pyx_empty_tuple,
        filename,
        funcname,
        (int) descr.first_line,
        (__PYX_LIMITED_VERSION_HEX >= (0x030b0000) && line_table) ? line_table : __pyx_mstate_global->__pyx_empty_bytes
    );
done:
    Py_XDECREF(code_bytes);
    #if CYTHON_AVOID_BORROWED_REFS
    Py_XDECREF(varnames_tuple_dedup);
    #endif
    Py_DECREF(varnames_tuple);
    return code_obj;
}

/* DecompressString */
static PyObject *__Pyx_DecompressString(const char *s, Py_ssize_t length, int algo) {
    PyObject *module, *decompress, *compressed_bytes, *decompressed;
    const char* module_name = algo == 3 ? "compression.zstd" : algo == 2 ? "bz2" : "zlib";
    PyObject *methodname = PyUnicode_FromString("decompress");
    if (unlikely(!methodname)) return NULL;
    #if __PYX_LIMITED_VERSION_HEX >= 0x030e0000
    if (algo == 3) {
        PyObject *fromlist = Py_BuildValue("[O]", methodname);
        if (unlikely(!fromlist)) return NULL;
        module = PyImport_ImportModuleLevel("compression.zstd", NULL, NULL, fromlist, 0);
        Py_DECREF(fromlist);
    } else
    #endif
        module = PyImport_ImportModule(module_name);
    if (unlikely(!module)) goto import_failed;
    decompress = PyObject_GetAttr(module, methodname);
    if (unlikely(!decompress)) goto import_failed;
    {
        #ifdef __cplusplus
            char *memview_bytes = const_cast<char*>(s);
        #else
            #if defined(__clang__)
              #pragma clang diagnostic push
              #pragma clang diagnostic ignored "-Wcast-qual"
            #elif !defined(__INTEL_COMPILER) && defined(__GNUC__)
              #pragma GCC diagnostic push
              #pragma GCC diagnostic ignored "-Wcast-qual"
            #endif
            char *memview_bytes = (char*) s;
            #if defined(__clang__)
              #pragma clang diagnostic pop
            #elif !defined(__INTEL_COMPILER) && defined(__GNUC__)
              #pragma GCC diagnostic pop
            #endif
        #endif
        #if CYTHON_COMPILING_IN_LIMITED_API && !defined(PyBUF_READ)
        int memview_flags = 0x100;
        #else
        int memview_flags = PyBUF_READ;
        #endif
        compressed_bytes = PyMemoryView_FromMemory(memview_bytes, length, memview_flags);
    }
    if (unlikely(!compressed_bytes)) {
        Py_DECREF(decompress);
        goto bad;
    }
    decompressed = PyObject_CallFunctionObjArgs(decompress, compressed_bytes, NULL);
    Py_DECREF(compressed_bytes);
    Py_DECREF(decompress);
    Py_DECREF(module);
    Py_DECREF(methodname);
    return decompressed;
import_failed:
    PyErr_Format(PyExc_ImportError,
        "Failed to import '%.20s.decompress' - cannot initialise module strings. "
        "String compression was configured with the C macro 'CYTHON_COMPRESS_STRINGS=%d'.",
        module_name, algo);
bad:
    Py_XDECREF(module);
    Py_DECREF(methodname);
    return NULL;
}

#include <string.h>
static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) {
    size_t len = strlen(s);
    if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) {
        PyErr_SetString(PyExc_OverflowError, "byte string is too long");
        return -1;
    }
    return (Py_ssize_t) len;
}
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
    Py_ssize_t len = __Pyx_ssize_strlen(c_str);
    if (unlikely(len < 0)) return NULL;
    return __Pyx_PyUnicode_FromStringAndSize(c_str, len);
}
static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) {
    Py_ssize_t len = __Pyx_ssize_strlen(c_str);
    if (unlikely(len < 0)) return NULL;
    return PyByteArray_FromStringAndSize(c_str, len);
}
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_UTF8
static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
#if CYTHON_COMPILING_IN_LIMITED_API
    {
        const char* result;
        Py_ssize_t unicode_length;
        CYTHON_MAYBE_UNUSED_VAR(unicode_length); // only for __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        #if __PYX_LIMITED_VERSION_HEX < 0x030A0000
        if (unlikely(PyArg_Parse(o, "s#", &result, length) < 0)) return NULL;
        #else
        result = PyUnicode_AsUTF8AndSize(o, length);
        #endif
        #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        unicode_length = PyUnicode_GetLength(o);
        if (unlikely(unicode_length < 0)) return NULL;
        if (unlikely(unicode_length != *length)) {
            PyUnicode_AsASCIIString(o);
            return NULL;
        }
        #endif
        return result;
    }
#else
#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_UTF8
    if (PyUnicode_Check(o)) {
        return __Pyx_PyUnicode_AsStringAndSize(o, length);
    } else
#endif
    if (PyByteArray_Check(o)) {
#if (CYTHON_ASSUME_SAFE_SIZE && CYTHON_ASSUME_SAFE_MACROS) || (CYTHON_COMPILING_IN_PYPY && (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)))
        *length = PyByteArray_GET_SIZE(o);
        return PyByteArray_AS_STRING(o);
#else
        *length = PyByteArray_Size(o);
        if (*length == -1) return NULL;
        return PyByteArray_AsString(o);
#endif
    } else
    {
        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_LongWrongResultType(PyObject* result) {
    __Pyx_TypeName result_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(result));
    if (PyLong_Check(result)) {
        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                "__int__ returned non-int (type " __Pyx_FMT_TYPENAME ").  "
                "The ability to return an instance of a strict subclass of int is deprecated, "
                "and may be removed in a future version of Python.",
                result_type_name)) {
            __Pyx_DECREF_TypeName(result_type_name);
            Py_DECREF(result);
            return NULL;
        }
        __Pyx_DECREF_TypeName(result_type_name);
        return result;
    }
    PyErr_Format(PyExc_TypeError,
                 "__int__ returned non-int (type " __Pyx_FMT_TYPENAME ")",
                 result_type_name);
    __Pyx_DECREF_TypeName(result_type_name);
    Py_DECREF(result);
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Long(PyObject* x) {
#if CYTHON_USE_TYPE_SLOTS
  PyNumberMethods *m;
#endif
  PyObject *res = NULL;
  if (likely(PyLong_Check(x)))
      return __Pyx_NewRef(x);
#if CYTHON_USE_TYPE_SLOTS
  m = Py_TYPE(x)->tp_as_number;
  if (likely(m && m->nb_int)) {
      res = m->nb_int(x);
  }
#else
  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
      res = PyNumber_Long(x);
  }
#endif
  if (likely(res)) {
      if (unlikely(!PyLong_CheckExact(res))) {
          return __Pyx_PyNumber_LongWrongResultType(res);
      }
  }
  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 (likely(PyLong_CheckExact(b))) {
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(__Pyx_PyLong_IsCompact(b))) {
        return __Pyx_PyLong_CompactValue(b);
    } else {
      const digit* digits = __Pyx_PyLong_Digits(b);
      const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b);
      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 = PyLong_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
  if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
    return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
  } else {
    Py_ssize_t ival;
    PyObject *x;
    x = PyNumber_Index(o);
    if (!x) return -1;
    ival = PyLong_AsLong(x);
    Py_DECREF(x);
    return ival;
  }
}
static CYTHON_INLINE PyObject *__Pyx_Owned_Py_None(int b) {
    CYTHON_UNUSED_VAR(b);
    return __Pyx_NewRef(Py_None);
}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
  return __Pyx_NewRef(b ? Py_True: Py_False);
}
static CYTHON_INLINE PyObject * __Pyx_PyLong_FromSize_t(size_t ival) {
    return PyLong_FromSize_t(ival);
}


/* MultiPhaseInitModuleState */
#if CYTHON_PEP489_MULTI_PHASE_INIT && CYTHON_USE_MODULE_STATE
#ifndef CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
#if (CYTHON_COMPILING_IN_LIMITED_API || PY_VERSION_HEX >= 0x030C0000)
  #define CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE 1
#else
  #define CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE 0
#endif
#endif
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE && !CYTHON_ATOMICS
#error "Module state with PEP489 requires atomics. Currently that's one of\
 C11, C++11, gcc atomic intrinsics or MSVC atomic intrinsics"
#endif
#if !CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
#define __Pyx_ModuleStateLookup_Lock()
#define __Pyx_ModuleStateLookup_Unlock()
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d0000
static PyMutex __Pyx_ModuleStateLookup_mutex = {0};
#define __Pyx_ModuleStateLookup_Lock() PyMutex_Lock(&__Pyx_ModuleStateLookup_mutex)
#define __Pyx_ModuleStateLookup_Unlock() PyMutex_Unlock(&__Pyx_ModuleStateLookup_mutex)
#elif defined(__cplusplus) && __cplusplus >= 201103L
#include <mutex>
static std::mutex __Pyx_ModuleStateLookup_mutex;
#define __Pyx_ModuleStateLookup_Lock() __Pyx_ModuleStateLookup_mutex.lock()
#define __Pyx_ModuleStateLookup_Unlock() __Pyx_ModuleStateLookup_mutex.unlock()
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201112L) && !defined(__STDC_NO_THREADS__)
#include <threads.h>
static mtx_t __Pyx_ModuleStateLookup_mutex;
static once_flag __Pyx_ModuleStateLookup_mutex_once_flag = ONCE_FLAG_INIT;
static void __Pyx_ModuleStateLookup_initialize_mutex(void) {
    mtx_init(&__Pyx_ModuleStateLookup_mutex, mtx_plain);
}
#define __Pyx_ModuleStateLookup_Lock()\
  call_once(&__Pyx_ModuleStateLookup_mutex_once_flag, __Pyx_ModuleStateLookup_initialize_mutex);\
  mtx_lock(&__Pyx_ModuleStateLookup_mutex)
#define __Pyx_ModuleStateLookup_Unlock() mtx_unlock(&__Pyx_ModuleStateLookup_mutex)
#elif defined(HAVE_PTHREAD_H)
#include <pthread.h>
static pthread_mutex_t __Pyx_ModuleStateLookup_mutex = PTHREAD_MUTEX_INITIALIZER;
#define __Pyx_ModuleStateLookup_Lock() pthread_mutex_lock(&__Pyx_ModuleStateLookup_mutex)
#define __Pyx_ModuleStateLookup_Unlock() pthread_mutex_unlock(&__Pyx_ModuleStateLookup_mutex)
#elif defined(_WIN32)
#include <Windows.h>  // synchapi.h on its own doesn't work
static SRWLOCK __Pyx_ModuleStateLookup_mutex = SRWLOCK_INIT;
#define __Pyx_ModuleStateLookup_Lock() AcquireSRWLockExclusive(&__Pyx_ModuleStateLookup_mutex)
#define __Pyx_ModuleStateLookup_Unlock() ReleaseSRWLockExclusive(&__Pyx_ModuleStateLookup_mutex)
#else
#error "No suitable lock available for CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE.\
 Requires C standard >= C11, or C++ standard >= C++11,\
 or pthreads, or the Windows 32 API, or Python >= 3.13."
#endif
typedef struct {
    int64_t id;
    PyObject *module;
} __Pyx_InterpreterIdAndModule;
typedef struct {
    char interpreter_id_as_index;
    Py_ssize_t count;
    Py_ssize_t allocated;
    __Pyx_InterpreterIdAndModule table[1];
} __Pyx_ModuleStateLookupData;
#define __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE 32
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
static __pyx_atomic_int_type __Pyx_ModuleStateLookup_read_counter = 0;
#endif
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
static __pyx_atomic_ptr_type __Pyx_ModuleStateLookup_data = 0;
#else
static __Pyx_ModuleStateLookupData* __Pyx_ModuleStateLookup_data = NULL;
#endif
static __Pyx_InterpreterIdAndModule* __Pyx_State_FindModuleStateLookupTableLowerBound(
        __Pyx_InterpreterIdAndModule* table,
        Py_ssize_t count,
        int64_t interpreterId) {
    __Pyx_InterpreterIdAndModule* begin = table;
    __Pyx_InterpreterIdAndModule* end = begin + count;
    if (begin->id == interpreterId) {
        return begin;
    }
    while ((end - begin) > __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE) {
        __Pyx_InterpreterIdAndModule* halfway = begin + (end - begin)/2;
        if (halfway->id == interpreterId) {
            return halfway;
        }
        if (halfway->id < interpreterId) {
            begin = halfway;
        } else {
            end = halfway;
        }
    }
    for (; begin < end; ++begin) {
        if (begin->id >= interpreterId) return begin;
    }
    return begin;
}
static PyObject *__Pyx_State_FindModule(CYTHON_UNUSED void* dummy) {
    int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
    if (interpreter_id == -1) return NULL;
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __Pyx_ModuleStateLookupData* data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_relaxed(&__Pyx_ModuleStateLookup_data);
    {
        __pyx_atomic_incr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
        if (likely(data)) {
            __Pyx_ModuleStateLookupData* new_data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_acquire(&__Pyx_ModuleStateLookup_data);
            if (likely(data == new_data)) {
                goto read_finished;
            }
        }
        __pyx_atomic_decr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
        __Pyx_ModuleStateLookup_Lock();
        __pyx_atomic_incr_relaxed(&__Pyx_ModuleStateLookup_read_counter);
        data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_relaxed(&__Pyx_ModuleStateLookup_data);
        __Pyx_ModuleStateLookup_Unlock();
    }
  read_finished:;
#else
    __Pyx_ModuleStateLookupData* data = __Pyx_ModuleStateLookup_data;
#endif
    __Pyx_InterpreterIdAndModule* found = NULL;
    if (unlikely(!data)) goto end;
    if (data->interpreter_id_as_index) {
        if (interpreter_id < data->count) {
            found = data->table+interpreter_id;
        }
    } else {
        found = __Pyx_State_FindModuleStateLookupTableLowerBound(
            data->table, data->count, interpreter_id);
    }
  end:
    {
        PyObject *result=NULL;
        if (found && found->id == interpreter_id) {
            result = found->module;
        }
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
        __pyx_atomic_decr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
#endif
        return result;
    }
}
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
static void __Pyx_ModuleStateLookup_wait_until_no_readers(void) {
    while (__pyx_atomic_load(&__Pyx_ModuleStateLookup_read_counter) != 0);
}
#else
#define __Pyx_ModuleStateLookup_wait_until_no_readers()
#endif
static int __Pyx_State_AddModuleInterpIdAsIndex(__Pyx_ModuleStateLookupData **old_data, PyObject* module, int64_t interpreter_id) {
    Py_ssize_t to_allocate = (*old_data)->allocated;
    while (to_allocate <= interpreter_id) {
        if (to_allocate == 0) to_allocate = 1;
        else to_allocate *= 2;
    }
    __Pyx_ModuleStateLookupData *new_data = *old_data;
    if (to_allocate != (*old_data)->allocated) {
         new_data = (__Pyx_ModuleStateLookupData *)realloc(
            *old_data,
            sizeof(__Pyx_ModuleStateLookupData)+(to_allocate-1)*sizeof(__Pyx_InterpreterIdAndModule));
        if (!new_data) {
            PyErr_NoMemory();
            return -1;
        }
        for (Py_ssize_t i = new_data->allocated; i < to_allocate; ++i) {
            new_data->table[i].id = i;
            new_data->table[i].module = NULL;
        }
        new_data->allocated = to_allocate;
    }
    new_data->table[interpreter_id].module = module;
    if (new_data->count < interpreter_id+1) {
        new_data->count = interpreter_id+1;
    }
    *old_data = new_data;
    return 0;
}
static void __Pyx_State_ConvertFromInterpIdAsIndex(__Pyx_ModuleStateLookupData *data) {
    __Pyx_InterpreterIdAndModule *read = data->table;
    __Pyx_InterpreterIdAndModule *write = data->table;
    __Pyx_InterpreterIdAndModule *end = read + data->count;
    for (; read<end; ++read) {
        if (read->module) {
            write->id = read->id;
            write->module = read->module;
            ++write;
        }
    }
    data->count = write - data->table;
    for (; write<end; ++write) {
        write->id = 0;
        write->module = NULL;
    }
    data->interpreter_id_as_index = 0;
}
static int __Pyx_State_AddModule(PyObject* module, CYTHON_UNUSED void* dummy) {
    int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
    if (interpreter_id == -1) return -1;
    int result = 0;
    __Pyx_ModuleStateLookup_Lock();
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __Pyx_ModuleStateLookupData *old_data = (__Pyx_ModuleStateLookupData *)
            __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, 0);
#else
    __Pyx_ModuleStateLookupData *old_data = __Pyx_ModuleStateLookup_data;
#endif
    __Pyx_ModuleStateLookupData *new_data = old_data;
    if (!new_data) {
        new_data = (__Pyx_ModuleStateLookupData *)calloc(1, sizeof(__Pyx_ModuleStateLookupData));
        if (!new_data) {
            result = -1;
            PyErr_NoMemory();
            goto end;
        }
        new_data->allocated = 1;
        new_data->interpreter_id_as_index = 1;
    }
    __Pyx_ModuleStateLookup_wait_until_no_readers();
    if (new_data->interpreter_id_as_index) {
        if (interpreter_id < __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE) {
            result = __Pyx_State_AddModuleInterpIdAsIndex(&new_data, module, interpreter_id);
            goto end;
        }
        __Pyx_State_ConvertFromInterpIdAsIndex(new_data);
    }
    {
        Py_ssize_t insert_at = 0;
        {
            __Pyx_InterpreterIdAndModule* lower_bound = __Pyx_State_FindModuleStateLookupTableLowerBound(
                new_data->table, new_data->count, interpreter_id);
            assert(lower_bound);
            insert_at = lower_bound - new_data->table;
            if (unlikely(insert_at < new_data->count && lower_bound->id == interpreter_id)) {
                lower_bound->module = module;
                goto end;  // already in table, nothing more to do
            }
        }
        if (new_data->count+1 >= new_data->allocated) {
            Py_ssize_t to_allocate = (new_data->count+1)*2;
            new_data =
                (__Pyx_ModuleStateLookupData*)realloc(
                    new_data,
                    sizeof(__Pyx_ModuleStateLookupData) +
                    (to_allocate-1)*sizeof(__Pyx_InterpreterIdAndModule));
            if (!new_data) {
                result = -1;
                new_data = old_data;
                PyErr_NoMemory();
                goto end;
            }
            new_data->allocated = to_allocate;
        }
        ++new_data->count;
        int64_t last_id = interpreter_id;
        PyObject *last_module = module;
        for (Py_ssize_t i=insert_at; i<new_data->count; ++i) {
            int64_t current_id = new_data->table[i].id;
            new_data->table[i].id = last_id;
            last_id = current_id;
            PyObject *current_module = new_data->table[i].module;
            new_data->table[i].module = last_module;
            last_module = current_module;
        }
    }
  end:
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, new_data);
#else
    __Pyx_ModuleStateLookup_data = new_data;
#endif
    __Pyx_ModuleStateLookup_Unlock();
    return result;
}
static int __Pyx_State_RemoveModule(CYTHON_UNUSED void* dummy) {
    int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
    if (interpreter_id == -1) return -1;
    __Pyx_ModuleStateLookup_Lock();
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __Pyx_ModuleStateLookupData *data = (__Pyx_ModuleStateLookupData *)
            __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, 0);
#else
    __Pyx_ModuleStateLookupData *data = __Pyx_ModuleStateLookup_data;
#endif
    if (data->interpreter_id_as_index) {
        if (interpreter_id < data->count) {
            data->table[interpreter_id].module = NULL;
        }
        goto done;
    }
    {
        __Pyx_ModuleStateLookup_wait_until_no_readers();
        __Pyx_InterpreterIdAndModule* lower_bound = __Pyx_State_FindModuleStateLookupTableLowerBound(
            data->table, data->count, interpreter_id);
        if (!lower_bound) goto done;
        if (lower_bound->id != interpreter_id) goto done;
        __Pyx_InterpreterIdAndModule *end = data->table+data->count;
        for (;lower_bound<end-1; ++lower_bound) {
            lower_bound->id = (lower_bound+1)->id;
            lower_bound->module = (lower_bound+1)->module;
        }
    }
    --data->count;
    if (data->count == 0) {
        free(data);
        data = NULL;
    }
  done:
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, data);
#else
    __Pyx_ModuleStateLookup_data = data;
#endif
    __Pyx_ModuleStateLookup_Unlock();
    return 0;
}
#endif

/* #### Code section: utility_code_pragmas_end ### */
#ifdef _MSC_VER
#pragma warning( pop )
#endif



/* #### Code section: end ### */
#endif /* Py_PYTHON_H */
